我正在尝试使用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>
提前谢谢
答案 0 :(得分:1)
file:///android_asset
适用于WebView
...而且几乎没有别的。它绝对不适用于FileProvider
。
您的选择是:
将内容复制到文件中,然后使用FileProvider
使用my StreamProvider
,可以直接从资产中提供
编写自己的ContentProvider
以便从资源中流式传输