代码片段分享

Android 手机存储问题及权限

2019-12-06  本文已影响0人  花艺荣

===========================================================

内部存储

直接在设备的内部存储中保存文件。默认情况下,保存到内部存储的文件是应用的私有文件,其他应用(和用户)不能访问这些文件。 当用户卸载应用时,这些文件也会被移除。
Context.getCacheDir():/data/data/包名/cache
Context.getFilesDir():/data/data/包名/files

外部存储

该存储可能是可移除的存储介质(例如 SD 卡,二级)或内部(不可移除,一级)存储。 保存到外部存储的文件是全局可读取文件,而且,在计算机上启用 USB 大容量存储以传输文件后,用户可修改这些文件。存储分为两种,一种是应用卸载后,存储数据也会被删除,一种永久存储,即使应用被卸载,存储的数据依然存在。
外部存储私有 想应用被卸载后,与该应用相关的数据也清除掉,可
通过Context.getExternalFilesDir()方法可以获取到 sdcard/Android/data/包名/files/目录,放一些长时间保存的数据
通过Context.getExternalCacheDir()方法可以获取到 sdcard/Android/data/包名/cache/目录,存放临时缓存数据
使用上面的方法,当应用在被用户卸载后,SDCard/Android/data/包名/
这个目录下的所有数据都会被删除,不会留下垃圾信息。
而且上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项
外部存储一般 想要做到应用卸载后数据仍然保存,则
Environment.getExternalStorageDirectory().getAbsolutePath()
Environment.getExternalStoragePublicDirectory(Environment. ...).getAbsolutePath()

public String getDiskCacheDir(Context context) {
        String cachePath = null;
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) || !Environment.isExternalStorageRemovable()) {
            cachePath = context.getExternalCacheDir().getPath();
        } else {
            cachePath = context.getCacheDir().getPath();
        }
        return cachePath;
    }


Environment.getDataDirectory() = /data
Environment.getDownloadCacheDirectory() = /cache
Environment.getExternalStorageDirectory() = /mnt/sdcard
Environment.getExternalStoragePublicDirectory(“test”) = /mnt/sdcard/test
Environment.getRootDirectory() = /system
getPackageCodePath() = /data/app/com.my.app-1.apk
getPackageResourcePath() = /data/app/com.my.app-1.apk
getCacheDir() = /data/data/com.my.app/cache
getDatabasePath(“test”) = /data/data/com.my.app/databases/test
getDir(“test”, Context.MODE_PRIVATE) = /data/data/com.my.app/app_test
getExternalCacheDir() = /mnt/sdcard/Android/data/com.my.app/cache
getExternalFilesDir(“test”) = /mnt/sdcard/Android/data/com.my.app/files/test
getExternalFilesDir(null) = /mnt/sdcard/Android/data/com.my.app/files
getFilesDir() = /data/data/com.my.app/files
上一篇下一篇

猜你喜欢

热点阅读