IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 应用目录分析 -> 正文阅读

[移动开发]Android 应用目录分析

转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119650111
本文出自【赵彦军的博客】

沙箱私有目录

  • 内部存储空间中的应用私有目录
val filesDir = filesDir
/data/user/0/com.example.myapplication/files

val cacheDir = cacheDir
/data/user/0/com.example.myapplication/cache

app 的私有目录,也称沙箱。App 卸载后,此目录随之删除。文件管理器无法访问,除非root。还有一种方法,把手机连到到电脑上,运行 app debug 模式,用 AndroidStudio 工具是可以看到的。

cacheDir:机身内存不足时,文件会被删除

在这里插入图片描述

需要注意的是,appSharedPreferencesSQLiteDatabase 持久化应用相关数据也在这个目录的父目录。

SharedPreferences/data/user/0/app_package_name/shared_prefs
SQLiteDatabase:       /data/user/0/app_package_name/databases

Context 提供了一个简便方式,来获取一个内部私有目录

//获取一个私有目录,如果没有,系统自动创建
val dir = getDir("myFile", Context.MODE_PRIVATE)
/data/user/0/app_package_name/myFile
  • mode 是指文件夹的访问权限而并不包括其子文件夹和文件的访问权限:
  • MODE_PRIVATE :该文件只能被当前程序读写;
  • MODE_APPEND : 以追加方式打开该文件,应用程序可以向该文件中追加内容。
  • MODE_WORLD_READABLE :该文件的内容可以 被其他程序读取。
  • MODE_WORLD_WRITEABLE :该文件的内容可以 被其他程序读取、写入。

外部存储空间中的应用私有目录

val externalCacheDir = externalCacheDir?.absolutePath
/storage/emulated/0/Android/data/app_package_name/cache

val filesDir = getExternalFilesDir(null)  //null 代表根目录
/storage/emulated/0/Android/data/app_package_name/files

这个目录,是沙箱目录,App 卸载后,此目录随之删除 ,这个目录可以通过文件管理器访问。有一点是特别需要注意的,这个目录存储在 SD 卡上,如果用户把 SD 卡卸载了,那么这个目录将不可用。

内部私有目录、外部私有目录 均不需要申请权限。

值得注意的是,与内部存储空间的应用私有目录不同的是:

  • 第一,默认情况下,系统并不会自动创建外部存储空间的应用私有目录。只有在应用需要的时候,开发人员通过 SDK 提供的 API 创建该目录文件夹和操作文件夹内容。
  • 第二,自 Android 7.0 开始,系统对应用私有目录的访问权限进一步限制。其他 App 无法通过 file:// 这种形式的 Uri 直接读写该目录下的文件内容,而是通过 FileProvider 访问。
  • 第三,宿主 App 可以直接读写内部存储空间中的应用私有目录;而在 4.4 版本开始,宿主 App 才可以直接读写外部存储空间中的应用私有目录,使开发人员无需在 Manifest 文件中或者动态申请外部存储空间的文件读写权限。
  • 而相同点在于:同属于应用私有目录,当用户卸载 App 时,系统也会自动删除外部存储空间下的对应 App 私有目录文件夹及其内容。
//判断SD卡是否可用:
val state = EnvironmentCompat.getStorageState(file)
if (state == Environment.MEDIA_MOUNTED) {
    //sd卡可用
}

外部存储公有目录

val dataDir = Environment.getDataDirectory().absolutePath
/data

val storageDir = Environment.getStorageDirectory().absolutePath
/storage

需要注意的是:这两个目录需要权限声明 , 在 6.0 及以上还需要动态申请权限

如果没有权限,app 会崩溃

//动态申请权限:
ActivityCompat.requestPermissions(
    this,
    arrayOf(
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.READ_EXTERNAL_STORAGE
    ),
    200
)
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-13 12:13:24  更:2021-08-13 12:15:10 
 
开发: 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年5日历 -2024/5/18 22:47:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码