总结下应用内可用的存储路径。
Context获取存储目录的方法比较多,比如File目录,Cache目录,大致上可以分为两类,一类是应用内私有,只有应用自身可以访问,其他应用不可以直接访问,对于用户也是不可见的,但可以通过FileProvider将文件分享出去;另一类是应用外私有,同样是应用自身可以访问,但是用户是可以看到的。它们的共同点是,不需要系统权限,同时,会随着应用卸载而被删除。若不想被删除,那么就需要存储到共有目录中,而访问共有目录,就需要申请系统权限了。
1. 应用内私有
1 | Context.getCacheDir(); |
这几个目录,所有的机型大致都在这个目录下,其中package name就是应用的包名
1 | /data/data/package_name/ |
其中,getDataDir指的就是该目录,其他的则会在该目录下创建文件夹,CacheDir对应cache目录,FilesDir对应files目录,CodeCache对应code_cache目录,而getDir则会创建新目录,名字就是第一个参数加上app前缀。
2. 应用外私有
1 | Context.getExternalCacheDir(); |
这几个目录,基本在这,package name也是应用包名,因为位于storage下,所以,对于用户是可见的
1 | /sdcard/Android/package_name/ |
或者,还有其他的目录映射,不同机型可能会有所差别
1 | /storage/self/primary/Android/package_name/ |
3. 公有目录
1 | Environment.getExternalStorageDirectory(); |
这个目录,对应的共有路径,访问这个目录,需要申请系统的读写外部存储的权限
1 | /sdcard/ |
4. 总结
- 应用私有的目录,在应用卸载时会被系统删除
- 不同的ROM,路径可能会有差别,但是获取方式和使用原则是一样的
- 要想把应用私有目录下的文件分享出去,参考FileProvider的使用
- 共有目录需要权限,私有的不需要,所以若不是必要,存储在应用私有的目录即可,减少权限的申请