Iva*_*lov 2 android scoped-storage
我的应用程序扫描某些目录中的文本文件。用户可以点击按钮来添加目录:
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)
Run Code Online (Sandbox Code Playgroud)
然后,我将 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2796 次 |
| 最近记录: |