我有两个应用程序 - Demo和Pro。Demo具有内容提供程序,当安装Pro时,它需要从演示提供程序传输所有文件。
Demo应用程序(提供者):
我该如何正确地向消费者授予uri权限?
<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());
“InternalStorageProvider”是普通“FileProvider”的副本。但这并不重要,因为执行甚至在它被调用之前就会抛出异常。 请注意,没有选择器活动和意图涉及。消费者尝试直接从已知的uri打开文件,而不使用选择器。我找到的大多数示例都使用“Intent.FLAG_GRANT_READ_URI_PERMISSION”,但我根本不使用意图。java.lang.SecurityException:Uid 10061没有权限访问uri 0 @ content://***.demo.storage.int.provider/db/file1
我该如何正确地向消费者授予uri权限?
FLAG_GRANT_READ_URI_PERMISSION
传递给在我的应用程序中使用 URI 的每个其他意图,解决了它。 - Jorge Mendez