如何使用FileProvider授予通过intent提供多个URI的权限

时间:2016-06-01 14:17:30

标签: android android-fileprovider

我正在尝试通过IntentFileProvider的帮助下从一个应用提供多个URI。

我发送它时,只发送一个如下所示的URI:

resultIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
resultIntent.setDataAndType(contentUri,getContentResolver().getType(contentUri));

setResult(RESULT_OK, resultIntent);

在我的“接收”应用中,我可以在onActivityResult中继续这样做:

Uri returnUri = data.getData();
ParcelFileDescriptor mInputPFD = getContext().getContentResolver().openFileDescriptor(returnUri, "r");

现在我尝试发送ArrayList个URI:

resultIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList);
resultIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
setResult(RESULT_OK, resultIntent);

但授予的权限标志仅适用于setData()中设置的URI,因此我无法从接收应用程序中的ArrayList访问URI。我读到ClipData作为解决方案,但我不幸被迫使用Min SDK 15。

所以我的问题是,在我的接收应用中手动设置权限是个好主意,比如

context.grantUriPermission("com.example.provider", returnUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
如果我选择“ArrayList”选项并稍后撤销它,我会得到的每个URI

?我可以这样做吗?难道每个其他应用都无法访问提供商应用的私人文件吗?

我需要在这里指定哪个包?我的提供商应用程序或我的接收器应用程序包,因为我没有让它工作,只有一些关于缺少权限的例外。

感谢任何帮助或提示

1 个答案:

答案 0 :(得分:4)

解决了它。

我的问题是,我在接收器应用中调用了grantUriPermission(),而不是应该在提供商应用。因此,调用以下内容修复了权限异常:

getApplicationContext().grantUriPermission(getCallingPackage(), fileUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);