在过去的几个小时里,我一直忙于让FileProvider工作来打开其他应用程序中的文件。在某个过程中出现问题,因为应用程序只是没有权限打开我放在Intent中的文件。我真的希望有人可以帮我解决这个问题。
我对android编程的了解不是很好。所以这可能只是一个非常愚蠢的错误
这是我的代码。
要打开一个文件我这样做(fileToOpen长度大约是300kb所以文件加载到变量中):
File fileToOpen = new File(Environment.getExternalStorageDirectory(), path);
Uri contentUri = FileProvider.getUriForFile(this, "me.albie.share", fileToOpen);
Intent openIntent = new Intent(Intent.ACTION_VIEW);
openIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
openIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
openIntent.setDataAndType(contentUri, "application/pdf");
openIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
PackageManager pm = this.getPackageManager();
if (openIntent.resolveActivity(pm) != null) {
this.startActivity(Intent.createChooser(openIntent, "Open file"));
}
清单文件中的提供者:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="me.albie.share"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
带路径的
的Xml文件<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="external_files" path="/"/>
</paths>
答案 0 :(得分:1)
openIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
openIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
openIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
setFlags()
替换所有以前的标志,因此您的FLAG_ACTIVITY_NO_HISTORY
会清除您的两个权限标记。之一:
将其中的每一个切换为addFlags()
或
使用一次setFlags()
电话:
openIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION |
Intent.FLAG_ACTIVITY_NO_HISTORY);