Android Path
外置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的更多相关文章
- [转]Android Path里FillType功能
对于简单的封闭图形(路径无相交的现象),图形的外部和内部和容易判断,但如果路径有相交的情况,对应重叠的部分,使用不同的填充模式,内部和外部的定义有所不同.填充模式可以分为两类: EVEN_ODD 意味 ...
- Android Path Time ScrollBar(Path 时间轴)
版本号:1.0 日期:2014.4.22 版权:© 2014 kince 转载注明出处 这是仿Path2.0UI的一个demo的截图,我最早是在农民伯伯的这篇博客中看到的[Andorid X 项目 ...
- Android Path路径设置,针对error opening trace file:No such file or directory
对于android的开发者来说,首先要做的就是环境变量的配置.学习过java的人都知道,java是须要配置环境变量的,那么android开发是否也须要我们配置环境变量呢?当然,安卓的环境变量须要我们配 ...
- Android业务组件化之子模块SubModule的拆分以及它们之间的路由Router实现
前言: 前面分析了APP的现状以及业务组件化的一些探讨(Android业务组件化之现状分析与探讨),以及通信的桥梁Scheme的使用(Android业务组件化之URL Scheme使用),今天重点来聊 ...
- Android业务组件化之URL Scheme使用
前言: 最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在 ...
- NDK开发历程(一):android native code的调试方法
引用:http://www.cnblogs.com/ychellboy/archive/2013/02/22/2922683.html 使用NDK在android上做开发是一件“痛并快乐着”的差事,之 ...
- Android二维码功能实现,在程序内嵌入ZXing项目
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9526247 最近二维码真是越来越火了,随便电视上.网络上.商场里,到处都是二维码. ...
- Android 隐式意图的配置
本文地址:http://www.cnblogs.com/wuyudong/p/5677473.html,转载请注明源地址. <Android 显示意图激活另外一个Actitity>一文介绍 ...
- android deep link(深度链接)与自定义协议!
此自定义仅供参考! 首先打开androidManifest.xml 在MainActivity中添加如下内容: <activity android:name=".MainActivit ...
随机推荐
- Sass@规则
@importSass 支持所有 CSS3 的 @ 规则, 以及一些 Sass 专属的规则,也被称为“指令(directives)”.Sass 扩展了 CSS 的 @import 规则,让它能够引入 ...
- 二维码生成 - QrCodeNet
下载QrCodeNet /// <summary> /// 生成QR码 /// </summary> /// <param name="output_path& ...
- poj1562 DFS入门
K - 搜索 Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:10000KB 64bit I ...
- Mac系统cocos2dx + android 开发环境配置
Mac系统cocos2dx + android 开发环境配置 /****************************************************** 这遍文章主要转载自:htt ...
- PCL编译历程
boost 编译安装包下载地址: http://boost.teeks99.com/ boost安装:http://blog.sina.com.cn/s/blog_7c48b0f10102v0zj.h ...
- beini系列_2_beini装入虚拟机
- [JS]九种网页弹窗代码
[1.最基本的弹出窗口代码] 其实代码非常简单: <SCRIPT LANGUAGE="javascript"><!--window.open ("pag ...
- 1172: 单词接龙(XCOJ 暴力DFS)
1172: 单词接龙 时间限制: 1 Sec 内存限制: 128 MB提交: 12 解决: 5 标签提交统计讨论版 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词 ...
- 迁移笔记:对ob_start()的总结
1.Flush:刷新缓冲区的内容,输出. 函数格式:flush() 说明:这个函数经常使用,效率很高. 2.ob_start :打开输出缓冲区 函数格式:void ob_start(void) 说明: ...
- C语言 中缀转后缀
给定字符串型的算术表达式,实现中缀转后缀并运算得出结果: #ifndef STACK_H_INCLUDED #define STACK_H_INCLUDED #include <stdio.h& ...