外置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. ListVeiw新增记录及 滚动条移动到指定位置

    C# 自带的ListView控件的滚动条移动到指定位置. lvwList为ListView控件 lvwList.EnsureVisible(lvwList.Items.Count - 1); 新增记录 ...

  2. .net简单页面后台绑定下拉框,按钮,分页 后台cs文件

    二.cs文件 using System;using System.Collections.Generic;using System.Web.UI;using System.Web.UI.WebCont ...

  3. Web项目中用模板Jsp页面引入所有静态样式脚本文件(js,css等)

    这样的好处是不需要再每个页面中都添加太多的外链接(不会减少请求数量),但对开发会更快捷,如果更改这些文件的位置或名称,只需要更改模板文件,不需要一个一个页面复制粘贴:同时可以为不同jsp页面组创建不同 ...

  4. 使用ES6进行开发的思考

    ECMAScript6已经于近日进入了RC阶段,而早在其处于社区讨论时,我就开始一直在尝试使用ES6进行开发的方案.在Babel推出后,基于ES6的开发也有了具体可执行的解决方案,无论是Build还是 ...

  5. 阅读书目_2014H1

    1.<程序员修炼之道 专业程序员必知的33个技巧>(完成) 注:更多是面向程序员全工作流程的. 2.linux shell脚本攻略 适合初学,但不方便作为参考手册查阅. 3.编写可读代码的 ...

  6. 深入理解Azure自动扩展集VMSS(1)

    前文中已经详细介绍了如何配置和部署Azure的虚拟机扩展集VMSS进行自动扩展,但在实际使用过程当中,用户会出现更进一步使用的一些问题,VMSS基本扩展原理及怎么简单调试?如何进行手动扩展?怎么使用自 ...

  7. iOS中构造函数与析构函数

    一.构造函数 在OC中凡是已init开头的函数我们都称之为构造函数,在声明构造函数的时候,不带参数的一般直接声明为“-(id)init”,带参数的一般声明为“-(id)initWith...”. 1 ...

  8. 开心菜鸟系列学习笔记------------javascript(6)

    一.作用域链            1)函数的生命周期:            函数的生命周期分为创建和激活阶段(调用时),让我们详细研究它.            作用域链与一个执行上下文相关,变量 ...

  9. (转载)解决WPF动画属性锁死问题

    此文来自: 马开东博客 转载请注明出处 网址:http://www.makaidong.com 一般锁死问题都是出在后台代码写的动画中,以下为转载的解决方案! 方法一:将动画的 FillBehavio ...

  10. WPF用样式实现TextBox的虚拟提示效果

    [版权声明]本文为博主原创,未经允许禁止用作商业用途,如有转载请注明出处. 话说好多软件和网站都能实现虚拟提示,好吧这个名词是我自己起的,因为我也不知道这么形容这个效果. 效果描述:在TextBox没 ...