外置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();
}
}

Android Path的更多相关文章

  1. [转]Android Path里FillType功能

    对于简单的封闭图形(路径无相交的现象),图形的外部和内部和容易判断,但如果路径有相交的情况,对应重叠的部分,使用不同的填充模式,内部和外部的定义有所不同.填充模式可以分为两类: EVEN_ODD 意味 ...

  2. Android Path Time ScrollBar(Path 时间轴)

    版本号:1.0 日期:2014.4.22 版权:© 2014 kince 转载注明出处   这是仿Path2.0UI的一个demo的截图,我最早是在农民伯伯的这篇博客中看到的[Andorid X 项目 ...

  3. Android Path路径设置,针对error opening trace file:No such file or directory

    对于android的开发者来说,首先要做的就是环境变量的配置.学习过java的人都知道,java是须要配置环境变量的,那么android开发是否也须要我们配置环境变量呢?当然,安卓的环境变量须要我们配 ...

  4. Android业务组件化之子模块SubModule的拆分以及它们之间的路由Router实现

    前言: 前面分析了APP的现状以及业务组件化的一些探讨(Android业务组件化之现状分析与探讨),以及通信的桥梁Scheme的使用(Android业务组件化之URL Scheme使用),今天重点来聊 ...

  5. Android业务组件化之URL Scheme使用

    前言: 最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在 ...

  6. NDK开发历程(一):android native code的调试方法

    引用:http://www.cnblogs.com/ychellboy/archive/2013/02/22/2922683.html 使用NDK在android上做开发是一件“痛并快乐着”的差事,之 ...

  7. Android二维码功能实现,在程序内嵌入ZXing项目

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9526247 最近二维码真是越来越火了,随便电视上.网络上.商场里,到处都是二维码. ...

  8. Android 隐式意图的配置

    本文地址:http://www.cnblogs.com/wuyudong/p/5677473.html,转载请注明源地址. <Android 显示意图激活另外一个Actitity>一文介绍 ...

  9. android deep link(深度链接)与自定义协议!

    此自定义仅供参考! 首先打开androidManifest.xml 在MainActivity中添加如下内容: <activity android:name=".MainActivit ...

随机推荐

  1. alt和title的用法区别

    经常用到这两个属性,但是一直没有总结他们的区别.现在我对他们两个的用法做一下总结: 相同点:他们都会飘出一个小浮层,显示文本内容. 不同点: 1.alt只能是元素的属性,而title即可以是元素的属性 ...

  2. asp.net mvc 页面缓存

    在任务中需要实现点击浏览器back按钮,加载的前一页面需要强制刷新. 想要在前端通过js来绑定数据实现,但是觉得太麻烦,还是用另一种方式来解决: 不缓存该页面. 简单易懂: Response.Cach ...

  3. C/C++中define的使用

    代码: #include <iostream> using namespace std; #define a 10 void foo(); void bar(); void foo(){ ...

  4. C语言中固定大小的数据类型的输入和输出

    在使用C语言时,对数据的大小要求比较严格时,例如要使用32位的整数类型,这时要使用 int32_t,无论平台如何变化,数据大小仍然是32位,固定位数的数据类型还有 uint32_t.uint64_t ...

  5. 什么是dtd文件,为什么需要dtd

    DTD为英文Document Type Definition,中文意思为"文档类定义".DTD肩负着两重任务:一方面它帮助你编写合法的代码,另一方面它让浏览器正确地显示器代码.也许 ...

  6. Liunx+C编程一站式学习

    Liunx+C编程一站式学习这本书有什么特点?面向什么样的读者?这本书最初是为某培训班的嵌入式系统Linux工程师就业班课程量身定做的教材之一.该课程是为期四个月的全日制职业培训,要求学员毕业时具备非 ...

  7. 在VS里面查看lua堆栈

     extern std::string get_lua_stack(void); std::string stack = get_lua_stack();    std::string get_lua ...

  8. Canvas Path 绘制柱体

    public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceS ...

  9. 《Programming WPF》翻译 第5章 2.内嵌样式

    原文:<Programming WPF>翻译 第5章 2.内嵌样式 每一个“可样式化”的WPF元素都有一个Style属性,可以在内部设置这个属性--使用XAML属性-元素的语法(在第一章讨 ...

  10. openwrt下和云端通讯的例程,

    openwrt下和云端通讯的例程 ibcurl 官方文档请参考这里 http://curl.haxx.se/libcurl/c/curl_easy_setopt.html 刚接触 libcurl的时候 ...