3
如何使用为Android 5.0(Lollipop)提供的新SD卡访问API?
背景 在Android 4.4(KitKat)上,Google限制了对SD卡的访问。 从Android Lollipop(5.0)开始,开发人员可以使用新的API,要求用户确认是否允许访问特定文件夹,如本Google-Groups帖子所述。 问题 该帖子指导您访问两个网站: https://android.googlesource.com/platform/development/+/android-5.0.0_r2/samples/Vault/src/com/example/android/vault/VaultProvider.java#258 这看起来像一个内部示例(也许稍后会在API演示中显示),但是很难理解发生了什么。 http://developer.android.com/reference/android/support/v4/provider/DocumentFile.html 这是新API的官方文档,但没有提供足够的使用方法细节。 它告诉你的是: 如果确实需要完全访问整个文档子树,请启动ACTION_OPEN_DOCUMENT_TREE以让用户选择目录。然后将得到的getData()传递到fromTreeUri(Context,Uri)以开始使用用户选择的树。 浏览DocumentFile实例树时,始终可以使用getUri()获取表示该对象的基础文档的Uri,以便与openInputStream(Uri)等配合使用。 为了简化运行KITKAT或更早版本的设备上的代码,可以使用fromFile(File)来模拟DocumentsProvider的行为。 问题 我对新API有一些疑问: 您如何真正使用它? 根据该帖子,操作系统将记住该应用已获得访问文件/文件夹的权限。您如何检查是否可以访问文件/文件夹?是否有一个函数可以向我返回我可以访问的文件/文件夹列表? 您如何在Kitkat上处理此问题?它是支持库的一部分吗? 操作系统上是否有设置屏幕,可显示哪些应用有权访问哪些文件/文件夹? 如果在同一设备上为多个用户安装了一个应用程序,会发生什么? 关于此新API还有其他文档/教程吗? 可以撤销权限吗?如果是这样,是否有意图发送到应用程序? 会在选定文件夹上递归请求权限吗? 使用权限还会允许用户根据自己的选择进行多次选择吗?还是应用程序需要明确告知意图允许哪些文件/文件夹? 在模拟器上有没有办法尝试新的API?我的意思是,它具有SD卡分区,但可以用作主要的外部存储,因此已经授予了对其的所有访问权限(使用简单权限)。 当用户用另一张SD卡替换SD卡时会发生什么?