Win*_*der 6 android android-contentprovider android-permissions android-securityexception
我有2个应用程序 - 演示和专业版.Demo有一个内容提供商,当安装Pro时,它需要从演示提供商传输所有文件.
演示应用程序(提供商):
<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>
Run Code Online (Sandbox Code Playgroud)
专业应用(消费者):
实验1:
ParcelFileDescriptor pfd = cr.openFileDescriptor(exposedFileUri,"r");
FileInputStream input = new FileInputStream(pfd.getFileDescriptor());
java.lang.SecurityException:Permission Denial:从ProcessRecord打开提供者 .provider.InternalStorageProvider {9c85875 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权限?
您需要授予专业应用程序权限...
activity.grantUriPermission("pro app package name", exposedFileUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2728 次 |
| 最近记录: |