如何解决如何在 Android 11 上获得持久文件夹权限?
我的应用程序会扫描某些目录中的文本文件。用户可以点击按钮添加目录:
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
startActivityForResult(intent,RESULT_CODE_DOCUMENT_TREE)
然后我将 URI 存储在数据库中并使用 DocumentsContract
扫描目录中的文件并读取它们。在应用程序启动时,我加载存储的 URI 并以与扫描文件相同的方式处理它们。
在 Android API 28 上,存储的 URI 工作正常。在 Android API 30 上,如果我在应用程序重启后尝试访问其中任何一个,我会收到 SecurityException
。
有没有办法让这些权限在现代 Android 上持久化?还是我应该采用完全不同的方法?
解决方法
为所选目录授予的权限将持续到用户的设备重新启动。要保留访问权限,您必须获得用户的许可。您可以在 onActivityResult
方法中请求许可,请参见以下示例:
val contentResolver = applicationContext.contentResolver
val takeFlags: Int = Intent.FLAG_GRANT_READ_URI_PERMISSION or
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
// Check for the freshest data.
contentResolver.takePersistableUriPermission(uri,takeFlags)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。