SAF存储框架最新进展作用域访问

最近刚做了一款外设硬盘的项目,并且帮助部分项目解决了android设备访问外设硬盘权限的问题。我们都知道在Android4.4中引入存储访问框架SAF(storage access framwork),它的原理就是对于初次挂载的外部存储,如果你的manifest文件添加了READ_EXTERNAL_STORAGE 或 [WRITE_EXTERNAL_STORAGE] 系统权限
但是也只是授予读取的权限,就比如我们这个项目,在usb插上外置硬盘的时候,在获取到根目录的情况下,是可以通过文件递归遍历或者媒体查询来获取文件的,但是如果你想删除文件或者创建文件夹,就必须跳转到SAF中Picker文件选择器来选中U盘,点击选择,来授予硬盘根目录的URI权限,并且持久化保存。这样就在第一次授权之后,可以在app中对文件进行操作了。如下代码
Override
public void onActivityResult(int requestCode, int resultCode,
Intent resultData) {
if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
Uri uri = null;
if (resultData != null) {
uri = resultData.getData();
final int takeFlags = intent.getFlags()
& (Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(uri, takeFlags);

    }
}

}
这样选择器对于指定文件授权体验还可以,但是我们是对整个硬盘操作,让用户第一次下载进行如此复杂操作之后才能进行文件操作体验是很不好的
Android官方也考虑到这个问题,但是也只是在android7.0提供解决方案---这就是作用域访问,他提供了一种对话框,允许用户在同意之后,可以对指定文件夹进行操作,比如Environment.DIRECTORY_PICTURES等,那我们是对于根目录进行授权有如何操作呢?


usb设备存储.png

如图这个代码就能让你调起外设的usb硬盘权限对话框,但是有个问题就是上述的判断如果手机安装SD卡,那么就会弹出SD卡权限对话框,当然这都是小问题了

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,858评论 0 17
  • (1)闹钟 创建闹钟(ACTION_SET_ALARM)示例Intent: 注:为了调用ACTION_SET_AL...
    sunnygarden阅读 5,659评论 0 10
  • 2017年5月17日 Kylin_Wu 标注(★☆)为考纲明确给出考点(必考) 常见手机系统(★☆) And...
    Azur_wxj阅读 5,822评论 0 10
  • 书名:《徐文兵、梁冬对话黄帝内经·金匮真言》 作者:徐文兵、梁冬 金句:人活一辈子,从满足低级趣味、生理需要开始,...
    Echo_dc7d阅读 1,670评论 0 0
  • 不知道这个世界上有没有和我一样无聊无趣自我陶醉的人! 一大早上起来看有没有人祝我生日快乐,好,没有。然后我给自己放...
    一个可爱的名称阅读 2,870评论 0 0

友情链接更多精彩内容