首页 > 系统 > Android > 正文

Android存储路径问题

2019-11-09 18:20:07
字体:
来源:转载
供稿:网友

测试手机:华为荣耀4C

获取存储路径的方法:

Log.e("0",""+this.getFilesDir());Log.e("1",""+this.getCacheDir());Log.e("2",""+this.getExternalCacheDir());Log.e("3",""+this.getExternalFilesDir(""));Log.e("4",""+Environment.getRootDirectory());Log.e("5",""+Environment.getDataDirectory());Log.e("6",""+Environment.getDownloadCacheDirectory());Log.e("7",""+Environment.getExternalStorageDirectory());Log.e("8",""+Environment.getExternalStoragePublicDirectory(""));

输出结果:

E/0: /data/data/com.hnsi.zheng.hnti_erp_app/filesE/1: /data/data/com.hnsi.zheng.hnti_erp_app/cacheE/2: /storage/sdcard1/Android/data/com.hnsi.zheng.hnti_erp_app/cacheE/3: /storage/sdcard1/Android/data/com.hnsi.zheng.hnti_erp_app/filesE/4: /systemE/5: /dataE/6: /cacheE/7: /storage/sdcard1E/8: /storage/sdcard1

华为荣耀4C可选择系统默认存储路径,以上输出结果为默认存储路径设置为SD卡时的输出结果。当系统默认存储路径设置为内部储存时,输出结果如下:

E/0: /data/data/com.hnsi.zheng.hnti_erp_app/filesE/1: /data/data/com.hnsi.zheng.hnti_erp_app/cacheE/2: /storage/emulated/0/Android/data/com.hnsi.zheng.hnti_erp_app/cacheE/3: /storage/emulated/0/Android/data/com.hnsi.zheng.hnti_erp_app/filesE/4: /systemE/5: /dataE/6: /cacheE/7: /storage/emulated/0E/8: /storage/emulated/0

context.getExternalStorageDirectory()返回的是手机外部储存,每个手机厂家对这个外部储存的理解不同,所以不同手机执行此方法返回的值可能不同。目前的手机大多应该已经不再支持自己安装扩展内存卡,而是内置大容量储存,对于此类手机,context.getExternalStorageDirectory()返回的值应该就是内置储存空间,文件可以直接存储在这个空间的路径下;还有一部分手机仍然支持扩展内存卡,这时context.getExternalStorageDirectory()返回的值可能是系统内置的储存空间,也可能是外挂的SD卡,华为荣耀4C可以通过自己设置默认储存决定这个方法的返回值,如果手机没有这项设置功能,可以通过以下方法获取手机当前挂载的所有存储空间:

/** * 获取手机当前挂载的所有储存路径 * @param context * @return 存放所有路径的数组 */public String[] listSDRootPath(Context context) {    try {        StorageManager manager = (StorageManager) context.getSystemService(Activity.STORAGE_SERVICE);        Method method = manager.getClass().getMethod("getVolumePaths");        return (String[]) method.invoke(manager);    } catch (Exception e) {        return null;    }}

关于手机存储路径的使用:Google推荐使用context.getExternalCacheDir和context.getExternalFilesDir分别用来存储缓存和文件,而不是在context.getExternalStorageDirectory()路径下自己创建文件夹,因为前者在app卸载时会被系统关联删除,而后者不会随着app的删除被删除掉,这会导致储存空间存在垃圾文件,如果不希望文件随着app被删除可以自己创建文件夹存放。context.getCacheDir和context.getFilesDir方法获取的是系统内部文件,这个文件在是隐藏并受保护的,需要root权限才能访问,可以放置一些用户不可见的内容,SQLite数据库这种受保护的私密文件就存放在它们所在的/data/data/package/路径下,但是这个路径下不能放置流媒体等大量数据,否则会影响手机的正常使用。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表