zoukankan      html  css  js  c++  java
  • Android 存储路径选择

    Android能用来存储的地方有两个,一个是手机内置的存储空间,一个是外置的SD卡,内置的存储空间一般比较小,所以应用的缓存建议存储在外置的SD卡中。 
    在Android系统中如何获得存储的路径呢?

    public static void getRootPath(Context context) {
            Log.d("ExternalDirectory->", Environment.getExternalStorageDirectory().getPath());
    
            Log.d("ExternalCacheDir->", context.getExternalCacheDir().getPath());
    
            Log.d("CacheDir->", context.getCacheDir().getPath());
    
            Log.d("FilesDir->", context.getFilesDir().getPath());
        }

    以上对应的输出结果为

    ExternalDirectory->: /storage/emulated/0 
    ExternalCacheDir->: /storage/emulated/0/Android/data/zhuwentao.com.pathdemo/cache 
    CacheDir->: /data/data/zhuwentao.com.pathdemo/cache 
    FilesDir->: /data/data/zhuwentao.com.pathdemo/files

    应用的缓存建议存储在通过getExternalCacheDir().getPath()获取的路径中,这里的zhuwentao.com.pathdemo会根据你的应用程序包名不同会有差别,存在这个路径,主要有以下几个好处 
    一:该路径是在SD卡中,所以不用担心手机内置存储空间不足,只要SD卡够大就行。 
    二:该路径是Android系统默认的应用缓存路径,对应手机应用设置里面应用详情的“清除缓存”和“清除数据”按钮。 
    三:当我们卸载应用时,该路径下的数据也会被清空,这样就避免了有些应用卸载后还有残留数据的问题。

    如果需要保存用户下载的数据,就不建议存储在getExternalCacheDir()中了,可以在Environment.getExternalStorageDirectory()下新建一个文件夹,用来存储用户下载的数据。

    我们在选择存储路径的时候,还要考虑到用户的手机是否有SD卡,再进行选择,通过以下代码判断用户是否有SD卡:

      /**
         * 获取手机可存储路径
         * @param context 上下文
         * @return 手机可存储路径
         */
        public static String getRootPath(Context context) {
            // 是否有SD卡
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
                    || !Environment.isExternalStorageRemovable()) {
                return context.getExternalCacheDir().getPath(); //
            } else {
                return context.getCacheDir().getPath(); //
            }
        }

    如果有SD卡或者SD卡不可被移除的时候则获取SD卡下的路径,没有则获取应用程序缓存路径。

    有时候getExternalStorageDirectory()怎么也获取不到外置SD卡,这是为何呢? 
    在Android4.0之前Environment.getExternalStorageDirectory()获取到的是外置SD卡路径,而在4.0之后由于很多手机的自带内存已经很大了,不需要外置SD卡,所以Android就把内置的内存分一部分出来当作SD卡使用了,导致不同版本的Android系统获取到的SD卡路径会存在差异。

    需要注意的是,各个手机厂商的SD卡路径也是会存在差异的,有些手机获取到的路径是“/mnt/sdcard/…”,而有的获取的是“/storage/sdcard0/…”所以绝对不能写死SD卡的路径。

  • 相关阅读:
    自定义View的ToolBar布局报错Error:(2) No resource identifier found for attribute 'context' in package 'c
    在学git之主分支 branch
    获取发布版SHA1
    关于开启线程与UI的操作
    播放音频和视频(VideoView控件)
    通知栏Notification的应用
    Android 真机调式 Installation failed with message 远程主机强迫关闭了一个现有的连接。. It is possible that this issue is resolved by uninstalling an existing version of the apk if it is present, and then re-installing. WA
    运行程序申请危险权限
    mysql乐观锁总结和实践
    Nginx配置文件nginx.conf中文详解
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/7731873.html
Copyright © 2011-2022 走看看