外置SDCard(TF卡)

1. SDCard的挂载路径(根据系统不同的ROM挂载的路径不同,以下列举几个是从旧系统到新系统的表现形式)

/sdcard/external_sd

/mnt/extSdCard

/sdcard/extSdCard

/storage/sdcard1

2. 获取路径

Android获取外部SDcard的官方调用是Environment.getExternalStorageDirectory()

但是根据不同机型,是有不同的结果的。

如果手机支持TF卡扩展,并且本身没有大容量存储,比如说HTC老款手机 G3之类的,那么获取到的是TF卡的路径。这是对的。

如果手机本身有大容量存储,不论手机是否支持TF卡扩展,比如现在HTC系列高端手机One X,或者920 butterfly系列,那么获取到的是大容量存储的路径。

也就是说,如果手机本身具有大容量存储,又支持TF卡扩展,通过这条命令是无法获取到TF卡信息的。

从系统角度编写了以下方法(不用越狱,不用权限):

     try {            Runtime runtime = Runtime.getRuntime();            Process proc = runtime.exec("mount");            InputStream is = proc.getInputStream();            InputStreamReader isr = new InputStreamReader(is);            String line;            String mount = new String();            BufferedReader br = new BufferedReader(isr);            while ((line = br.readLine()) != null) {                if (line.contains("secure")) continue;                if (line.contains("asec")) continue;                                if (line.contains("fat")) {                    String columns[] = line.split(" ");                    if (columns != null && columns.length > 1) {                        mount = mount.concat("*" + columns[1] + "\n");                    }                } else if (line.contains("fuse")) {                    String columns[] = line.split(" ");                    if (columns != null && columns.length > 1) {                        mount = mount.concat(columns[1] + "\n");                    }                }            }            txtView.setText(mount);        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();       }
获取TF卡

内置SDCard(相对于应用,叫外部存储,应用的内部存储路径为/data)

1.内置SDCard文件路径的挂载路径,至于有个/sdcard/这样的路径,则是指向以下真正路径的一个链接

/mnt/sdcard 或者/storage/emulated/legacy/(Android < 4.0,根据不同的系统ROM挂载的路径不同)

/storage/sdcard0 或者/storage/emulated/0/(Android 4.0+,根据不同的系统ROM挂载的路径不同)

2.权限变更

Android 1.0到Android 4.0:写操作受权限WRITE_EXTERNAL_STORAGE保护,写时需加入此权限。

Android 4.1到Android 4.3:读操作也受权限READ_EXTERNAL_STORAGE保护,读时需加入此权限(写权限默认已经包括读权限了)

Android 4.3及以上:应用可以无权限访问自己的外部存储

3.可以获取以下路径(注:"/mnt/sdcard/"字段是上面的挂载路径之一,根据Rom的不同有所不同)

Environment.getRootDirectory().getPath() : /system (系统存储)

Environment.getDataDirectory().getPath() : /data (内部存储、用户数据目录)

Environment.getDownloadCacheDirectory().getPath() : /cache (下载缓存内容目录)

Environment.getExternalStorageDirectory().getPath(): /mnt/sdcard (这个目录很可能当前不能访问,比如这个目录被用户的PC挂载,或者从设备中移除,或者其他问题发生,你可以通过getExternalStorageState()来获取当前状态)

Environment.getExternalStoragePublicDirectory(“test”): /mnt/sdcard/test (公共数据)

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES):/mnt/sdcard/Pictures

Context.getPackageName() :<your app package name>

Context.getCacheDir().getPath() : /data/data/<your app package name>/cache

Context.getFilesDir().getPath() : /data/data/<your app package name>/files (Context.openFileInput()、.openFileOutput()、.fileList()、.deleteFile(String)可进行操作)

Context.getDatabasePath(“test”).getPath() :/data/data/<your app package name>/databases/test

Context.getDir(“test”, Context.MODE_PRIVATE).getPath():/data/data/<your app package name>/app_test (不存在则创建)

Context.getObbDir().getPath() : /mnt/sdcard/Android/obb/<your app package name>

Context.getExternalCacheDir().getPath() : /mnt/sdcard/Android/data/<your app package name>/cache

Context.getExternalFilesDir(null).getPath() = /mnt/sdcard/Android/data/<your app package name>/files (需要声明权限)

Context.getExternalFilesDir(“test”).getPath() = /mnt/sdcard/Android/data/<your app package name>/files/test(需要声明权限)

注: 对于应用,卸载后该应用的内部存储及外部存储数据都会被删除,但公共数据不会被删除。(即/data/data/<your app package name>/c和/mnt/sdcard/Android/data/<your app package name>/下的所有数据会被删除,其它的不会被删除)

根据以上,可以这样获取Cache路径:

/**     * 获取cache目录路径     */    public static String getDiskCachePath(Context context) {        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) || !Environment.isExternalStorageRemovable()) {            return context.getExternalCacheDir().getPath();        } else {            return context.getCacheDir().getPath();        }    }

更多相关文章

  1. Android自带语音播报+讯飞语音播报封装(直接用)
  2. Android(安卓)各种功能代码收集
  3. Android(安卓)实现ListView异步加载图片
  4. SharePreferences
  5. 翻译Android(安卓)API Guides: App Manifest
  6. FFmpeg学习—android 编译libfaac 音频库
  7. Android(安卓)L 版本后uart console 没有root 权限
  8. Android(安卓)Environment 判断sd卡是否挂载 获取sd卡目录
  9. ubuntu16.04 Android(安卓)Studio 模拟器无法启动

随机推荐

  1. Android(安卓)Development
  2. Android最佳实践(六)之扫描二维码模块
  3. Android(安卓)5.1和Android(安卓)5.0相比
  4. Android实现根据条件自动转换手机震动和
  5. android > 修改Android工程版本
  6. android app的类响应式设计
  7. 【Android(安卓)开发】: Android(安卓)消
  8. Android(安卓)RelativeLayout 属性&Andro
  9. Android(安卓)Studio无法加载API帮助文档
  10. android小说阅读源码、bilibili源码、MVP