Android-存储空间的最佳实践,为什么阿里的程序员成长如此之快

  • 如果获得了权限,执行修改或删除操作;
  • 如果未能获得权限,向用户解释为什么您的应用需要此权限。

详细了解如何使用 Android 11 引入的这些方法执行批量操作

在 Android 10 上运行

如果您的应用目标 API 为 Android 10 (API level 29),请停用分区存储并继续使用 Android 9 及更低版本所使用的方法来执行这类操作。

在 Android 9 及更低版本上运行

使用以下方法:

  1. 使用 “请求应用权限” 一文中描述的最佳实践来请求 WRITE_EXTERNAL_STORAGE 权限。
  2. 使用 MediaStore API 来修改和删除媒体文件。

导入已存在的单个图片

如果您想要导入一张已存在的图片 (例如将照片用于用户个人资料),您的应用可以使用自己的 UI 或者系统图片选择器来执行这一操作。

提供您自己的用户界面

使用以下方法:

  1. 使用 “请求应用权限” 一文中描述的最佳实践来请求 READ_EXTERNAL_STORAGE 权限。
  2. 使用 query()) API 查询媒体集合
  3. 将结果显示到您的 UI 上。

使用系统选择器

使用 ACTION_GET_CONTENT intent 来要求用户选择要导入的图片。如果您希望过滤系统选择器向用户展示的图片类型,可以使用 setType()) 或 EXTRA_MIME_TYPES

拍摄单张图片

当您想要拍摄一张图片并用于您的应用时 (例如将照片用于用户个人资料),使用 ACTION_IMAGE_CAPTURE intent 来要求用户使用设备的相机拍摄一张照片。系统会将拍摄的照片存储于 MediaStore.Images 表中。

与其他应用共享媒体文件

使用 insert()) 方法将记录直接加入 MediaStore。详细信息,可以参阅媒体存储指南中 “添加项目” 部分。

与特定应用共享媒体文件

使用 Android FileProvider 组件,相关内容在 “设置文件分享” 指南中有描述。

从代码或依赖库中使用直接文件路径访问文件

您需要根据运行应用的 Android 版本来整合逻辑。

在 Android 11 上运行

使用以下方法:

  1. 使用 “请求应用权限” 一文中描述的最佳实践来请求 READ_EXTERNAL_STORAGE 权限。
  2. 使用直接文件路径访问文件。

详细信息,请参阅 “使用原始路径访问文件”。

在 Android 10 上运行

如果您的应用目标 API 为 Android 10 (API level 29),请停用分区存储并继续使用 Android 9 及更低版本所使用的方法来执行这类操作。

在 Android 9 及更低版本上运行

使用以下方法:

  1. 使用 “请求应用权限” 一文中描述的最佳实践来请求 WRITE_EXTERNAL_STORAGE 权限。

  2. 使用直接文件路径访问文件。

打开文档文件

使用 ACTION_OPEN_DOCUMENT intent 来要求用户通过系统选择器选择需要打开的文件。如果您想要过滤系统选择器展示给用户的文件类型,可以使用 setType()) 或 EXTRA_MIME_TYPES

举例来说,您可以通过以下代码找到所有的 PDF、ODT 和 TXT 文件:

Kotlin 代码

startActivityForResult(
     Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
         addCategory(Intent.CATEGORY_OPENABLE)
         type = "*/*"
         putExtra(Intent.EXTRA_MIME_TYPES, arrayOf(
              "application/pdf", // .pdf
               "application/vnd.oasis.opendocument.text", // .odt
               "text/plain" // .txt
         ))
      },
      REQUEST_CODE
)
复制代码

Java 代码

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("*/*");
    intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {
          "application/pdf", // .pdf
          "application/vnd.oasis.opendocument.text", // .odt
          "text/plain" // .txt
     });
     startActivityForResult(intent, REQUEST_CODE);
复制代码

从旧的存储位置迁移现有文件

如果一个目录既不是特定应用的目录,也不是公开共享目录,那么它就会被视为旧版存储位置。如果您的应用创建或使用位于旧版存储位置的文件,我们建议您将应用的文件迁移至可被分区存储访问的位置,同时对应用进行必要的修改,以使用分区存储中的文件。

保留对旧版存储位置的访问以进行数据迁移

您的应用需要保留对旧版存储位置的访问,以便可以将任何文件迁移至可被分区存储访问的位置。您应该的使用的方法取决于您应用的目标 API 级别。

如果您的应用目标平台为 Android 11

  1. 使用 preserveLegacyExternalStorage 标志来 保留旧版存储模型,这样您的应用就可以在用户将应用升级为目标平台为 Android 11 的新版本时迁移用户数据。

    注意:  如果您使用  preserveLegacyExternalStorage ,保持旧存储模型的效果只会在用户卸载应用之前有效。如果用户在运行 Android 11 的设备上安装或重装您的应用,则无论  preserveLegacyExternalStorage  的值是什么,您的应用都无法停用分区存储模型。

  2. 继续 停用分区存储,以便您的应用可以继续访问运行 Android 10 的设备上旧版存储位置中的文件。

如果您的应用目标平台为 Android 10

停用分区存储,以便您可以更轻松地在多个 Android 版本间保持应用行为不变。

最后

答应大伙的备战金三银四,大厂面试真题来啦!

这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》

《960全网最全Android开发笔记》

Android-存储空间的最佳实践,为什么阿里的程序员成长如此之快

《379页Android开发面试宝典》

包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

如何使用它?
1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
2.五角星数表示面试问到的频率,代表重要推荐指数

Android-存储空间的最佳实践,为什么阿里的程序员成长如此之快

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

Android-存储空间的最佳实践,为什么阿里的程序员成长如此之快

腾讯、字节跳动、阿里、百度等BAT大厂 2020-2021面试真题解析

Android-存储空间的最佳实践,为什么阿里的程序员成长如此之快

资料收集不易,如果大家喜欢这篇文章,或者对你有帮助不妨多多点赞转发关注哦。文章会持续更新的。绝对干货!!!

eghN-1630824881487)]

腾讯、字节跳动、阿里、百度等BAT大厂 2020-2021面试真题解析

[外链图片转存中…(img-XZGTOO0e-1630824881489)]

资料收集不易,如果大家喜欢这篇文章,或者对你有帮助不妨多多点赞转发关注哦。文章会持续更新的。绝对干货!!!

上一篇:Android IntentService源码解析


下一篇:python中对日期对象的处理