【发布时间】:2021-07-24 16:45:34
【问题描述】:
我的应用会扫描某些目录中的文本文件。用户可以点击按钮添加目录:
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 上持久存在?还是我应该实施完全不同的方法?
【问题讨论】:
-
intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)请删除这些标志。它们没有意义。 -
对 Intent.ACTION_OPEN_DOCUMENT_TREE 获取的 uri 的处理在所有 Android 版本上都是相同的。您可以在 onAvtivityResult 中获取持久化 uri 权限。