如何使用为Android5.0(Lolliop)提供的新的SD卡访问API?
背景
在……上面Android 4.4(KitKat),谷歌对SD卡的访问受到了很大限制。
从AndroidLolliop(5.0)开始,开发人员可以使用一个新的API,该API要求用户确认是否允许访问特定的文件夹,就像写在这个google组的帖子 .
问题
这篇文章引导你访问两个网站:
这看起来像是一个内部示例(可能稍后会在API演示中显示),但是很难理解到底发生了什么。
这是新API的正式文档,但它没有提供关于如何使用它的足够详细信息。
它告诉你的是:
如果您确实需要完全访问整个文档子树,那么首先启动action_open_document_tree,让用户选择一个目录。然后将得到的getData()传递到From TreeURI(Context,URI),以开始处理用户选择的树。
在浏览DocumentFile实例树时,始终可以使用getURI()获取表示该对象的基础文档的URI,以便与openInputStream(URI)一起使用等等。
要简化运行KitKat或更早版本的设备上的代码,可以使用FROM File(File)来模拟DocumentsProvider的行为。
问题
关于新API,我有几个问题:
- 你到底是怎么用的?
- 根据这篇文章,操作系统将记住,该应用程序被授予访问文件/文件夹的权限。如何检查是否可以访问文件/文件夹?是否有一个函数返回我可以访问的文件/文件夹列表?
- 你如何处理Kitkat上的这个问题?它是支持库的一部分吗?
- 操作系统上是否有设置屏幕,显示哪些应用程序可以访问哪些文件/文件夹?
- 如果在同一设备上为多个用户安装了应用程序,会发生什么情况?
- 还有关于这个新API的其他文档/教程吗?
- 权限可以被撤销吗?如果是的话,是否有将其发送到应用程序的意图?
- 会在选定的文件夹上递归地请求权限工作吗?
- 使用该权限是否也允许用户根据用户的选择进行多次选择?还是该应用程序需要具体说明允许哪些文件/文件夹?
- 仿真器上有方法尝试新的API吗?我的意思是,它有SD卡分区,但是它作为主要的外部存储器工作,所以所有对它的访问都已经给出了(使用一个简单的权限)。
- 当用户用另一张SD卡替换SD卡时会发生什么?