app尝试从资产打开pdf文件时崩溃

时间:2017-07-20 21:48:42

标签: android android-studio pdf android-fileprovider

我正在尝试使用FileProvider查看assets文件夹中存在的pdf文件,当应用程序运行时崩溃,显示的错误是

  

java.lang.IllegalArgumentException:无法找到包含/file:/android_asset/sample_books/a_walk_among_trees.pdf

的已配置根目录

我打开pdf文件的代码:

mTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String bookAssetPath = "file:///android_asset" +"/"+SAMPLE_BOOKS + "/" +mTextView.getText()+".pdf";
                File file = new File(bookAssetPath);
                Uri uri = FileProvider.getUriForFile(getContext(),"com.example.akl.kibrary.FileContentProvider",file);
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setDataAndType(uri,"application/pdf");
                intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                startActivity(intent);
            }
        });

清单文件中的提供者标记:

<provider android:name="android.support.v4.content.FileProvider"
              android:authorities="com.example.akl.kibrary.FileContentProvider"
              android:grantUriPermissions="true"
              android:exported="false">

        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"
             />
    </provider>

最后是provider_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <internal-path name="sample_books" 
path="file:///android_asset/sample_books/" />
</paths>

提前谢谢

1 个答案:

答案 0 :(得分:1)

file:///android_asset适用于WebView ...而且几乎没有别的。它绝对不适用于FileProvider

您的选择是:

  • 将内容复制到文件中,然后使用FileProvider

  • 进行投放
  • 使用my StreamProvider,可以直接从资产中提供

  • 编写自己的ContentProvider以便从资源中流式传输