Android 存储路径

存储图

路径地址

fun lookFilePath(view: View) {
    //内部存储
    val internalStoragePath = Environment.getDataDirectory().absolutePath//  /data
    val internalFilePath = filesDir.absolutePath  //  /data/user/0/com.zero.jiangke/files
    val internalCachePath = cacheDir.absolutePath//   /data/user/0/com.zero.jiangke/cache
​
    //外部存储 公有目录
    val externalStoragePath =
        Environment.getExternalStorageDirectory().absolutePath//   /storage/emulated/0
​
    //外部私有目录
    val externalFilePath =
        getExternalFilesDir(Environment.DIRECTORY_DCIM)?.absolutePath//  /storage/emulated/0/Android/data/com.zero.jiangke/files/DCIM
​
    val externalCachePath =
        externalCacheDir?.absolutePath//  /storage/emulated/0/Android/data/com.zero.jiangke/cache
​
}

手机存储路径图

权限图

data/data 目录图

这个目录下不需要申请权限 SP也是存储在这个位置

内存划分图片

内部存储

用于存储Android系统本身和应用程序的存储区域

手机/system/目录

/data/等目录

其中data/data/

release 包 不能访问 data/data 目录 debug包可以

卸载后 data/包名 会被移除

//获取手机内部存储空间的绝对路径:   /data/手机包名  Environment.getDataDirectory().getAbsolutePath();

data/data/packagename/files

context.getFilesDir().getAbsolutePath();

data/data/packagename/cache

context.getCacheDir().getAbsolutePath();

外部存储

/storage/emulated/0

//获取手机外部存储的路径:        /storage/emulated/0 Environment.getExternalStorageDirectory().getAbsolutePath();

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

同样的操作外部存储的私有目录不需要 READ_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE 权限

/storage/emulated/0/Android/data/packagename/files

获取某个应用在外部存储中的files路径

context.getExternalFilesDir(type).getAbsolutePath();

/storage/emulated/0/Android/data/packagename/cache

获取某个应用在外部存储中的cache路径

context.getExternalCacheDir().getAbsolutePath();

外部存储空间中的公共目录

例如相机被卸载后 相册里的图片还存在

需要申请 READ_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE 等权限

获取外部存储的根路径

Environment.getExternalStorageDirectory().getAbsolutePath()

获取外部存储的共享目录

Environment.getExternalStoragePublicDirectory(String type);

Environment 类提供诸多 type 参数的常量,比如:

Environment.DIRECTORY_DCIM : 数字相机拍摄的照片 Environment.DIRECTORY_MUSIC:用户音乐 Environment.DIRECTORY_PODCASTS:音频 / 视频的剪辑片段 Environment.DIRECTORY_RINGTONES:铃声 Environment.DIRECTORY_ALARMS:闹钟的声音 Environment.DIRECTORY_PICTURES:所有的图片 (不包括那些用照相机拍摄的照片) Environment.DIRECTORY_MOVIES:所有的电影 (不包括那些用摄像机拍摄的视频) 和 Download / 其他下载的内容。

Android10以后分区存储

目的为了 让 应用不能访问微信的 外部存储

Android 10以后只能通过 Uri访问

限制了应用程序对外部存储空间的操作权限 就算是通过申请READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限

也不能读写整个外部存储空间中的目录 应用程序只能访问外部存储中的公共媒体目录

Android10.0之前访问外部存储

通过File路径访问:File路径可以直接构造文件路径也可以通过MediaStore获取文件路径

通过Uri访问:Uri可以通过MediaStore或者SAF获取

Android10.0之后访问外部存储

Android10.0之后访问外部存储的公共目录中的媒体文件即/storage/emulated/0必须通过MediaStore或者Storage Access Framework(一下简称SAF)获取到Uri,然后通过Uri进行访问

非媒体文件只能通过SAF获取到Uri进行访问。App无法通过路径File(filePath)

小结

分区存储对内部存储或外部存储私有目录存储没有变更 变更的只是外部存储公有目录

内外存储API差异

外部存储通过Enviroment调用

内部存储通过Context调用

结论

Android10以下

A应用与B应用之间

给权限后 内部存储不能访问 (data/data) 外部存储可以访问(storage/emulated)

Android10 以上

A应用与B应用之间

只能访问媒体文件

不能访问内部存储共有目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值