简介
本文提供了尝试打开 PDF 文件的问题的解决方案使用意图从资产文件夹中获取 PDF 文件会导致“文件路径无效”错误消息。
问题描述
原始代码尝试访问使用以下路径在资产文件夹中创建 PDF 文件:
<code class="java">File file = new File("android.resource://com.project.datastructure/assets/abc.pdf");</code>
但是,此路径不正确,因为它没有说明 PDF 文件在应用程序目录结构中的实际位置。
解决方案
要解决此问题,我们可以使用以下更新的代码:
<code class="java">public class SampleActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); CopyReadAssets(); } private void CopyReadAssets() { AssetManager assetManager = getAssets(); InputStream in = null; OutputStream out = null; File file = new File(getFilesDir(), "abc.pdf"); try { in = assetManager.open("abc.pdf"); out = openFileOutput(file.getName(), Context.MODE_WORLD_READABLE); copyFile(in, out); in.close(); in = null; out.flush(); out.close(); out = null; } catch (Exception e) { Log.e("tag", e.getMessage()); } Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType( Uri.parse("file://" + getFilesDir() + "/abc.pdf"), "application/pdf"); startActivity(intent); } private void copyFile(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int read; while ((read = in.read(buffer)) != -1) { out.write(buffer, 0, read); } } }</code>
此代码首先将资产文件夹中的 PDF 文件复制到应用程序的私有存储目录,使用 FileOutputStream 确保它可以被其他应用程序访问。然后创建一个 Intent 从私有存储目录中打开 PDF 文件,从而解决了文件路径无效的问题。
权限
将文件复制到私有存储目录,需要在AndroidManifest.xml文件中包含以下权限:
<code class="xml"><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /></code>
以上是如何从 Android 中的资源文件夹中打开 PDF 文件并避免“文件路径无效”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!