授予FileProvider的uri权限会导致SecurityException异常

6
我有两个应用程序 - DemoPro。Demo具有内容提供程序,当安装Pro时,它需要从演示提供程序传输所有文件。 Demo应用程序(提供者):
<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>

专业应用程序(消费者版):

  • 实验1:

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

java.lang.SecurityException:权限拒绝:打开提供程序.provider.InternalStorageProvider来自进程记录{9c85875 10734: /u0a61}(pid=10734,uid=10061),该提供程序未从uid 10062导出

  • 实验2:

    Activity activity = 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权限?

目前遇到了这个问题,你有没有能够解决它的办法? - Jorge Mendez
这是相当久以前的事了,我几乎什么都记不起来了。这些东西真的很邪恶。 - WindRider
通过将 FLAG_GRANT_READ_URI_PERMISSION 传递给在我的应用程序中使用 URI 的每个其他意图,解决了它。 - Jorge Mendez
1个回答

1

您需要授权专业应用程序...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接