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 ...
随机推荐
- 让DIV垂直居中的几种办法
1.使用CSS3 的伸缩盒布局 <!doctype html> <html> <head> <meta charset="utf-8"&g ...
- (转) 值不能为空。参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explorer)
打开MSSQL 2008 R2的时候,展开数据库都显示以下的错误提示: 值不能为空.参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explo ...
- sql 2000 分页
create PROCEDURE [dbo].[Proc_GetPageList] ( @Tables varchar(1000), --表名 @PK varchar(100 ...
- View not attached to window manager
java.lang.IllegalArgumentException: View not attached to window manager 在用ProgressDialog的时候,任务结束后Dis ...
- mysql中常用的语句整理
mysql中常用的语句: 1:创建带自增长的主键的表 DROP TABLE IF EXISTS user_login ; CREATE TABLE user_login ( user_id INT ...
- Java中list<Object>集合去重实例
一:Java中list去重的方法很多,下面说一下其中一种方法:把list里的对象遍历一遍,用list.contain(),如果不存在就放入到另外一个list集合中: 二:实例 这里需要注意的是:使用c ...
- ECshop使用财付通接口支付时出现“[3006]您的请求无效,请重新再试
ECshop使用财付通接口支付时出现“[3006]您的请求无效,请重新再试.”解决方案\includes\modules\payment\tenpay.php 行 104原来的为 $bill_no = ...
- 函数:我的地盘听我的 - 零基础入门学习Python019
函数:我的地盘听我的 让编程改变世界 Change the world by program 函数与过程 在小甲鱼另一个实践性超强的编程视频教学<零基础入门学习Delphi>中,我们谈到了 ...
- web后台获取不到session中的值(loading sessions from persistent storage),后改用JS传值
线上的程序似乎从session中取不到domain数据,重启了一下tomcat查看log日志发现,居然有报错.错误信息如下 22-Sep-2016 00:52:16.562 SEVERE [local ...
- IOS 保存图片至相册
IOS 保存图片至相册 应用中有时我们会有保存图片的需求,如利用UIImagePickerController用IOS设备内置的相机拍照,或是有时我们在应用程序中利用UIKit的 UIGraphi ...