当前位置:  开发笔记 > 编程语言 > 正文

尝试通过ACTION_OPEN_DOCUMENT为自定义DocumentsProvider尝试采用PersistableUriPermission()失败

如何解决《尝试通过ACTION_OPEN_DOCUMENT为自定义DocumentsProvider尝试采用PersistableUriPermission()失败》经验,为你挑选了0个好方法。

我正在尝试编写一个自定义规则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 的方法中,我可以通过我DocumentsProviderUri那里获取,成功打开我提供的文件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的过程,或者至少我不知道该怎么做。

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有