zoukankan      html  css  js  c++  java
  • android数据存储之外部存储(External Storage)

    Android设备支持外部存储器,可以是可移动存储器(如SD卡),也可以是内置在设备中的外部存储器(不可移动)。

    如果希望外部存储器上的文件只对本程序有用,并且当程序被卸载时目录中的文件自动被系统删除,可以使用如下目录

    /Android/data/<package_name>/

    核心代码:

      /**
         * 得到缓存的目录(apk卸载时系统自动删除该packagename目录)
         * @param context
         * @return
         */
        public static File getCacheDirectory(Context context) {
            File appCacheDir = null;
            if (MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) && hasExternalStoragePermission(context)) {
                appCacheDir = getExternalCacheDir(context);
            }
            if (appCacheDir == null) {

        //返回  /data/data/<package_name>/
                appCacheDir = context.getCacheDir();
            }
            if (appCacheDir == null) {
                L.w("Can't define system cache directory! The app should be re-installed.");
            }
            return appCacheDir;
        }

      /**
         * 返回/Android/data/<package_name>/file,若file目录不存在则创建
         * @param context
         * @return
         */
        private static File getExternalCacheDir(Context context) {
            File dataDir = new File(new File(Environment.getExternalStorageDirectory(), "Android"), "data");
            File appCacheDir = new File(new File(dataDir, context.getPackageName()), "file");
            if (!appCacheDir.exists()) {
                if (!appCacheDir.mkdirs()) {
                    L.w("Unable to create external cache directory");
                    return null;
                }
                try {
                    new File(appCacheDir, ".nomedia").createNewFile();
                } catch (IOException e) {
                    L.i("Can't create ".nomedia" file in application external cache directory");
                }
            }
            return appCacheDir;
        }

      /**
         * 权限判断
         * @param context
         * @return
         */
        private static boolean hasExternalStoragePermission(Context context) {
            int perm = context.checkCallingOrSelfPermission(EXTERNAL_STORAGE_PERMISSION);
            return perm == PackageManager.PERMISSION_GRANTED;
        }

  • 相关阅读:
    【笔记】ubuntu下搜狗输入法的安装(12.04和14.04都会提到,侧重前者)
    【笔记,转载】c++ string与int的转化
    【笔记】关于字符串相加
    【转载】 C++ fstream文件流读写文件操作详解
    【转载】大数据分析的众包平台—Kaggle (如有侵权,请联系我)
    【转载】 生成模型与判别模型
    【杂记】递归缩写
    【笔记】给自己的博客侧栏添加小时钟
    【笔记】改变vim或者终端terminal的光标形状。光标变细了之后看起来爽快多了!
    【笔记】 使用GNU profiler查找性能瓶颈,查看代码中每个函数所消耗的时间
  • 原文地址:https://www.cnblogs.com/bravestarrhu/p/3610922.html
Copyright © 2011-2022 走看看