授予 FileProvider 的 uri 权限会产生 SecurityException

Posted

技术标签:

【中文标题】授予 FileProvider 的 uri 权限会产生 SecurityException【英文标题】:Granting uri permissions for FileProvider gives SecurityException 【发布时间】:2016-05-30 09:17:01 【问题描述】:

我有 2 个应用程序 - DemoPro。 Demo 有一个 content provider,安装 Pro 后需要从 demo provider 传输所有文件。

演示应用(提供者):

<provider
            android:name="***.provider.InternalStorageProvider"
            android:authorities="***.demo.storage.int.provider"
            android:exported="false"
            android:syncable="true"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/int_storage_paths" />

</provider>

专业应用(消费者):

实验一:

ParcelFileDescriptor pfd = cr.openFileDescriptor(exposedFileUri, "r"); FileInputStream input = new FileInputStream(pfd.getFileDescriptor());

java.lang.SecurityException: Permission Denial: 打开提供者 .provider.InternalStorageProvider 来自 ProcessRecord9c85875 10734:/u0a61 (pid=10734, uid=10061) 不是从 uid 10062 导出的

实验 2:

活动活动 = getActivity(); activity.grantUriPermission(activity.getPackageName(),exposedFileUri,Intent.FLAG_GRANT_READ_URI_PERMISSION);

ParcelFileDescriptor pfd = cr.openFileDescriptor(exposedFileUri, "r"); FileInputStream input = new FileInputStream(pfd.getFileDescriptor());

java.lang.SecurityException: Uid 10061 没有 uri 的权限 0@content://***.demo.storage.int.provider/db/file1

InternalStorageProvider 是普通FileProvider 的副本。但这并不重要,因为执行甚至无法达到它。在调用它之前抛出异常。 请注意,不涉及选择器活动和意图。消费者尝试直接从已知 uri 打开文件,无需选择器。我发现的大多数示例都使用Intent.FLAG_GRANT_READ_URI_PERMISSION,但我根本没有使用意图。

我应该如何正确地向消费者授予 uri 权限?

【问题讨论】:

现在正在处理这个问题,你有没有机会解决它? 那是很久以前的事了,我几乎什么都不记得了。这东西真的很邪恶。 通过将 FLAG_GRANT_READ_URI_PERMISSION 传递给在我的应用程序中使用 URI 的所有其他意图来解决它 【参考方案1】:

您需要授予专业应用权限...

activity.grantUriPermission("pro app package name", exposedFileUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);

【讨论】:

以上是关于授予 FileProvider 的 uri 权限会产生 SecurityException的主要内容,如果未能解决你的问题,请参考以下文章

Android:java.lang.SecurityException:没有权限uri 0 @ content://com.android.chrome.FileProvider/BlockedFil

android 7.0 关闭严格模式绕过fileprovider共享文件的限制

Android 10 中的相机意图权限

使用 FileProvider uri 打开 PDF 文件会打开一个空白屏幕

Android Intent FileProvider“权限被拒绝”在谷歌地球中打开KML文件?

SecurityException:从 ACTION_IMAGE_CAPTURE 中找不到 uri 的持久权限授予