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卡权限对话框,当然这都是小问题了

你可能感兴趣的:(SAF存储框架最新进展作用域访问)