我正在尝试编写一个自定义规则DocumentsProvider
,以允许其他应用程序对其提供的Uris拥有持久权限
我有一个DocumentsProvider
我声明AndroidManufest.xml
如下
并且我的应用具有MANAGE_DOCUMENTS
权限设置
(显然,这不是必需的,但是添加/删除它也没有关系)。然后,当我打开ACTION_OPEN_DOCUMENT
选择器用户界面时,可以看到我的提供者
Intent openDocumentIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT); openDocumentIntent.addCategory(Intent.CATEGORY_OPENABLE); openDocumentIntent.setType("application/pdf"); openDocumentIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION|Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION); startActivityForResult(openDocumentIntent, EDIT_REQUEST);
然后,从我的提供商那里选择一个文件之后,在onActivityResult()
我的App 的方法中,我可以通过我DocumentsProvider
从Uri
那里获取,成功打开我提供的文件intent.getData()
。
但是,尝试通过以下方式持久保留读或写权限:
getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
要么
getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
总是失败,并出现类似的异常
No permission grant found for UID 10210 and Uri content://com.cgogolin.myapp.MyContentProvider/document/tshjhczf.pdf
如果我从Google驱动器中选取文件,或者在选择器UI中选择下载提供程序,则以这种方式获得许可就可以了。所以我认为问题出在我的提供者中。
尽管我进行了指定,为什么没有创建许可授予android:grantUriPermissions="true"
?
如何说服Android为我创建这样的权限授予?
毕竟我不认为自己可以做,因为我不知道UID
打开选择器UI的过程,或者至少我不知道该怎么做。