| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android 10 分区存储完全解析 -> 正文阅读 |
|
[移动开发]Android 10 分区存储完全解析 |
Android 10分区存储完全解析Google 为了更好的保护用户数据并限制设备冗余文件增加,在 Android 10 版本变更了设备外部存储访问方式,外部存储新特性称为分区存储(Scoped Storage)。最近项目需要升级到 Android 10 (SDK 29),但是由于一些概念和升级后的方法还不太清楚,所以感觉有必要整体梳理一遍。 一、Android 存储目录要理解 Android 10 的分区存储(Scoped storage),我们必须要将 Android 存储梳理清楚。Android 存储分为内部存储(Internal storage)和外部存储(External storage)。那么这个内外是怎么区分的呢? 1.1 内部存储内部存储就是指的是 App 私有的目录,如: /data/data/packagename/ 1.2 外部存储外部存储包括外部私有存储和外部公共存储,这些数据都是存储在挂载上的空间上的。 1.2.1 外部私有存储外部私有存储是指 /storage/emulated/0/Android/data/packagename 1.2.2 外部公共存储外部存储是指 sdcard 中根目录中的公共目录,即 1.3 使用Api 获取存储目录只有使用外部公共存储的时候需要读写权限 二、Android 10 分区存储机制2.1 原则分区存储遵循以下三个原则对外部存储文件访问方式重新设计,便于用户更好的管理外部存储文件。
2.2 分区存储概览分区存储就是对外部存储进行重新设计,简单来说,对外部共享文件的访问需要通过 MediaStrore API 和 Storage Access Framework 来访问;对外部私有文件来说在无法读写自己应用以外创建的其他文件。 2.2.1 外部共享文件的访问在第一小节中,我们已经知道外部共享目录就是sdcard 中根目录中的公共目录,即 在访问共享目录下文件的时候,在 Android 10 以前,在通过存储权限申请后,可以直接通过 file path 获取资源。在Android 10 版本以及以后的版本中,共享目录文件需要通过MediaStore API或者 Storage Access Framework 方式访问:
2.2.2 外部私有文件的访问外部私有文件的目录对应 :/storage/emulated/0/Android/data/packagename ,
2.2.3 内部存储文件的访问内部私有存储文件的目录对应: /data/data/packagename/ 2.2.4 其他受影响的变更
2.2.5 存储特性Android版本差异三、分区存储适配方案3.1 兼容模式在应用没有完成分区适配工作时,可以临时使用兼容方案,兼容模式下应用申请存储权限,即可以拥有外部存储完整目录的访问权限,通过 Android 10 之前文件访问方式运行,可以使用以下两种方法设置兼容模式:
使用 Environment.isExternalStorageLegacy() 判断兼容模式接口,true 表示应用以兼容模式运行,false 表示应用以分区存储特性运行。 3.2 分区存储适配方案3.2.1 文件迁移文件迁移是将应用共享目录文件迁移到应用私有目录或者 Android 10 要求的媒体集合目录。
3.2.2 文件访问兼容行适配共享目录文件不能通过 File path 方式读取,需要使用 MediaStore API 或者 Storage Access Framework 框架进行访问。 3.2.2.1 MediaStore API 解析MediaStore 是 Android 系统提供的一个多媒体数据库,专门用于存放多媒体信息的,通过 ContentResolver 即可对数据库进行操作。 Android 10版本 MediaStore API只允许在共享目录指定目录创建文件, 非指定目录创建文件会抛出IllegalArgumentException, 创建文件目录汇总如下:
在不同存储权限 MediaStore API 可访问文件区域:
3.2.1.2 Storage Access Framework 解析Android 4.4(API 级别 19)引入了存储访问框架 (SAF)。借助 SAF,用户可轻松浏览和打开各种文档、图片及其他文件,而不用管这些文件来自其首选文档存储提供程序中的哪一个。用户可通过易用的标准界面,跨所有应用和提供程序以统一的方式浏览文件并访问最近用过的文件。 SAF 包含以下元素:
以下为 SAF 提供的部分功能:
站在巨人的肩膀上: |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 20:01:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |