manifest.xml中的提供程序
<!-- File Provider -->
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.test.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
资源文件
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>
使用fileprovider
Uri uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".fileprovider", file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "*/*");
intent.startActivity(intent);
参考:here
说明: 我无法使用此文件提供程序打开图像,文本文件,pdf。 当我打开文件文本文件时,它给我ERR_UNKNOWN_URL_SCHEME。 如果我打开图像或pdf它没有任何显示
答案 0 :(得分:2)
您需要在意图中添加“FLAG_GRANT_READ_URI_PERMISSION”标记:
Uri uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".fileprovider", file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "*/*");
intent.addFlags(FLAG_GRANT_READ_URI_PERMISSION);
intent.startActivity(intent);
https://developer.android.com/reference/android/content/Intent.html#FLAG_GRANT_READ_URI_PERMISSION
FLAG_GRANT_READ_URI_PERMISSION如果设置,则为此Intent的收件人 将被授予对URI执行读取操作的权限 Intent的数据和ClipData中指定的任何URI。什么时候 应用于Intent的ClipData,所有URI以及递归 遍历Intent项目中的数据或其他ClipData将是 授予;只使用顶级Intent的授权标志。