很多好的问题,让我们深入。:)

你如何使用它?

这是一个伟大的教程与KitKat中的存储访问框架交互:

在Lollipop中与新的API交互非常相似。要提示用户选择目录树,您可以启动这样的意图:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);

startActivityForResult(intent, 42);

然后在您的onActivityResult()中,您可以将用户选择的Uri传递给新的DocumentFile辅助类。这里有一个快速示例,列出了挑选的目录中的文件,然后创建一个新文件:

public void onActivityResult(int requestCode, int resultCode, Intent resultData) {

if (resultCode == RESULT_OK) {

Uri treeUri = resultData.getData();

DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);

// List all existing files inside picked directory

for (DocumentFile file : pickedDir.listFiles()) {

Log.d(TAG, "Found file " + file.getName() + " with size " + file.length());

}

// Create a new file and write into it

DocumentFile newFile = pickedDir.createFile("text/plain", "My Novel");

OutputStream out = getContentResolver().openOutputStream(newFile.getUri());

out.write("A long time ago...".getBytes());

out.close();

}

}

DocumentFile.getUri()返回的Uri足够灵活,可以与不同的平台API一起使用。例如,您可以使用Intent.setData()与Intent.FLAG_GRANT_READ_URI_PERMISSION共享它。

如果要从本机代码访问Uri,可以调用ContentResolver.openFileDescriptor(),然后使用ParcelFileDescriptor.getFd()或detachFd()获取传统的POSIX文件描述符整数。

如何检查是否可以访问文件/文件夹?

默认情况下,通过存储访问框架返回的Uris意图不会在重新启动后持久化。平台“提供”持久化权限的能力,但是您仍然需要“获取”权限,如果你想要的。在上面的示例中,您可以调用:

getContentResolver().takePersistableUriPermission(treeUri,

Intent.FLAG_GRANT_READ_URI_PERMISSION |

Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

您可以随时通过ContentResolver.getPersistedUriPermissions()API找出您的应用可以访问的持久授权。如果您不再需要访问持久化Uri,则可以使用ContentResolver.releasePersistableUriPermission()释放它。

这是在KitKat吗?

不,我们不能追溯地向平台的旧版本添加新功能。

我可以看到哪些应用程序有权访问文件/文件夹?

目前没有显示此内容的UI,但您可以在adb shell dumpsys活动提供程序输出的“Granted Uri Permissions”部分中找到详细信息。

如果在同一设备上为多个用户安装了应用,会发生什么情况?

Uri权限授予在每个用户的基础上隔离,就像所有其他多用户平台功能一样。也就是说,在两个不同用户下运行的同一个应用程序没有重叠或共享Uri权限授予。

权限可以撤销吗?

支持DocumentProvider可以随时撤销权限,例如删除基于云的文档时。发现这些撤消的权限的最常见方法是当它们从上面提到的ContentResolver.getPersistedUriPermissions()中消失时。

当针对授权中涉及的任一应用程序清除应用数据时,也会撤销权限。

将要求在所选文件夹上递归授权工作吗?

是的,ACTION_OPEN_DOCUMENT_TREE意图让您递归访问现有和新创建的文件和目录。

这是否允许多重选择?

是的,自KitKat以来支持多重选择,并且您可以在启动ACTION_OPEN_DOCUMENT意图时通过设置EXTRA_ALLOW_MULTIPLE来允许它。您可以使用Intent.setType()或EXTRA_MIME_TYPES缩小可以选择的文件类型:

有没有办法在模拟器上尝试新的API?

是的,主共享存储设备应该出现在选择器中,甚至在模拟器上。如果您的应用程序只使用存储访问框架访问共享存储,您不再需要READ / WRITE_EXTERNAL_STORAGE权限,可以删除它们,或使用android:maxSdkVersion功能仅在较旧的平台版本上请求它们。

当用户用另一个SD卡替换SD卡时会发生什么?

当涉及物理介质时,底层媒体的UUID(例如FAT序列号)总是被烧录到返回的Uri中。系统使用它将您连接到用户最初选择的媒体,即使用户在多个插槽之间交换媒体。

如果用户在第二张卡中交换,您需要提示您访问新卡。由于系统会记住基于每个UUID的授予,如果用户以后重新插入,您将继续先前授予对原始卡的访问权限。

android 5.0 sd卡读写,如何使用为Android 5.0(Lollipop)提供的新SD卡存取API?相关推荐

  1. 开启6.0 sd卡读写权限_解了摄影师的燃眉之急:入手雷克沙TF卡,一卡多用速度超快...

    这对我来说,是一个非常常规的周末. 带着相机去外拍的时候,顺便从快递代收点取雷克沙667x 256GB的TF卡.之所以买这款雷克沙TF卡,实际上有两个用途:一个是放到新的行车记录仪里面,去测试和记录一 ...

  2. Android6.0动态申请SD卡读写的权限

    有些设备不能在本地写文件的解决方法如下 : Android6.0之后系统对权限的管理更加严格了,不但要在AndroidManifest中添加,还要在应用运行的时候动态申请.下面是动态申请SD卡读写的权 ...

  3. sdhc 读写 扇区 linux,SD卡读写扇区注意事项(转)

    在调试SD卡时,大家都喜欢使用扇区进行验证.也就是说,一般都是通过读写扇区数据进行比较,或者读取第0扇区的数据,在通过WinHex软件打开启动扇区进行比较.这种方法对于1G的SD卡或部分2G的SD卡可 ...

  4. SD卡读写,首选项,共享首选项

    Android-SD卡读写 adb shell mksdkcard 50m d:\xxx\xxxx.img 挂载/卸载sd卡 <uses-permission android:name=&quo ...

  5. SD卡读写权限和注意事项

    操作SD卡的时候最好用系统接口来读取路径,手机的路径不同: 值得注意的是这里的external不是指外部插入的sd卡,是指系统划分出来给用户使用的存储空间和外部SD卡 Environment.getE ...

  6. ic卡读写器有哪些分类?如何使用ic卡读写器?

    ic卡读写器是读写器中的一种,通过ic卡读写器可对ic卡的信息进行读取.为增进大家对ic卡读写器的认识,本文将对ic卡读写器的分类.ic卡读写器的使用方法等内容予以介绍.如果你对ic卡读写器具有兴趣, ...

  7. IC卡读写器技术及应用

    前言 IC卡读写器又叫IC卡读写机具,它是遵循一定的协议,与IC卡建立通信关系,对IC卡进行读写操作的工具.随着IC卡在社会各领域的广泛应用,各种各样的IC卡读写机具也应运而生.为了帮助大家对IC卡读 ...

  8. html5读取ic卡,企业员工IC卡考勤系统(IC卡读写)

    资源下载此资源下载价格为3D币,请先登录 资源文件列表 IC卡读写/Backup/CorporationEmployeeICCard/AboutBox1.cs , 3745 IC卡读写/Backup/ ...

  9. SIM卡PIN码到底有什么用?华为手机如何设置SIM卡锁?

    最近看到一篇热文<一部手机失窃而揭露的窃取个人信息实现资金盗取的黑色产业链>,一个自称是信息安全的专家,自述因为手机失窃,SIM卡挂失失败遭遇手机黑产,个人身份信息.各种支付账号密码等信息 ...

最新文章

  1. ASP.NET Ajax替代品AjaxWidgets
  2. Android图片缓存框架Glide
  3. angularjs获取上一个元素的id_三男子非法获取苹果ID账号买卖,交易数万条,价格从一毛到上百元不等...
  4. Quartz.NET和Log4Net三种输出[转]
  5. 数据库的定义、模型 和 模式
  6. 刚发版就被客户购买,升级后的神策用户画像究竟有什么魔力?
  7. 百度api:根据经纬度获取地理位置信息
  8. redis订阅执行一段时间自动停止_面试系列 redis 分布式锁amp;数据一致性
  9. hdu 3784 继续xxx定律
  10. PostgreSQL | 学习笔记语句汇总
  11. ipv6单播地址包括哪两种类型_Ipv6详解
  12. centos7.5 gnome3的主题优化
  13. SPIR-V教程 -- SPIRV变量
  14. [NXP.iMX6UL] NFS服务器
  15. mysql查询最近三个月数据方法
  16. WIN7下硬盘安装centos 7
  17. 用C 绘制实时曲线图
  18. 关于DOS-BOX的使用方法
  19. linux命令行下读取u盘内容_Linux拷贝U盘文件(命令行)
  20. 小白也能看懂:最全无线渗透测试与攻防+Fluxison钓鱼教程+路由器安全设置指南 2021.3.31

热门文章

  1. 如何打通“鱼塘” ?腾讯启动“SaaS技术联盟” 共建技术中台
  2. 2019年技术盘点云数据库篇(二):阿里云携手MongoDB率先上线4.2数据库 云上数据库已是大势所趋...
  3. Docker精华问答 | Consul是什么?
  4. java类的理解_Java类该怎么理解?
  5. python pandas csv getitem_Python调用pandas 读csv档时出现了错误
  6. 企业微信_Windows版本调试
  7. 企业实战_06_MyCat 常用的分片算法
  8. 通过asm动态构造class文件
  9. PLSQL 日期格式修改
  10. 前端传递json,后端应该怎样接收呢?