From:http://blog.csdn.net/u011290399/article/details/10363881

在项目中,发现通过Android提供的API获取外置SDCard的操作一直不能成功,一直没有太多的时间解决该问题

昨天週末,终于可以抽空研究了一下这个问题了

在网上搜索下,结果百度的搜索引擎怎麽搜索也未能给我满足需求的搜索结果

不过,搜索出的内置SDCard与外置SDCard互换操作给出了思路

先看看SDCard的路径:/storage/extSdCard、/storage/sdcard0、/storage/sdcard0/external-sdcard、/storage/external-sdcard等等路径

网络上给出的很多比较挫的方法:

1、通过Android的API获取其父路径的File对象,然后获得File对象内的文件路径字符串数组,遍历、寻找出外置SDCard路径,看上面给出的SDCard路径就发现不能完全实现

2、通过StorageManager类反射获得getVolumePaths的结果集,测试一部手机通过,不过没太多的保障

3、写死路径…… 尼玛,这个能是一个程序员说出的话,小爷当时看到都诅咒说出这句话的家伙

4、根据网上搜索出来外置、内置SDCard互换操作,想到是否可以读取vold.fstab文件,直接获得外置SDCard路径,结果发现好多手机上找不到vold.fstab文件……

虽然找不到vold.fstab文件,但是该文件内的信息还是存放在手机的内存中的,所以,方法就来了。

//    private static String cmd = "mount";    private static String cmd = "cat /proc/mounts";    private static String format = "sdcard";    private static String sdCard = Environment.getExternalStorageDirectory().getAbsolutePath();
    /**     * 獲取外置SDCard的絕對路徑     * @return     */    public static String getExternalPath() {        BufferedReader read = null;        String external_SDCard = sdCard;        Runtime runtime = Runtime.getRuntime();        try {            Process process = runtime.exec(cmd);            read = new BufferedReader(new InputStreamReader(process.getInputStream()));            String line;            while ((line = read.readLine()) != null) {//                if (line.toLowerCase().contains(format) && line.contains(".android-secure")) {                if (line.toLowerCase().contains(format)) {                    String[] array = line.split(" ");                    if (array != null && array.length >= 5) {                        String temp = array[1].replace("/.android_secure", "");                        if (!sdCard.equals(temp)) {                            external_SDCard = temp;                        }                    }                }            }        } catch (Exception e) {            external_SDCard = sdCard;            e.printStackTrace();        } finally {            IOUtils.freeResource(read, null);        }        return external_SDCard;    }

更多相关文章

  1. Linux 下Android(安卓)开发环境搭建
  2. libcurl库编译生成不带版本的设置方法
  3. 文件修改如何简单修改Android的so文件
  4. 【整理】Android对Linux内核的改动你知道多少?
  5. 初学Android,使用Drawable资源之使用StateListDrawable资源(十三
  6. android init进程分析 基本流程
  7. 图片布局在android中资源文件夹中添加一个新的图片资源
  8. Android(安卓)studio 配置Git (第一次提交代码)
  9. android通过反射代替R来获取控件对象

随机推荐

  1. 【Android 内存优化】Bitmap 图像尺寸缩
  2. Android本地缓存和远程图片获取的实现
  3. 警惕rapidxml的陷阱(二):在Android上默认内
  4. Android项目从Eclipse增加支持Android St
  5. Android(安卓)使用RxJava+Retrofit 2.0合
  6. 用activity实现半透明的、淡入的menu【原
  7. 傳聞 Android 版 Chrome 即將推出
  8. 【Android】Android Crash之异常信息反馈
  9. jni开发之一
  10. Android进阶自定义控件之滑动开关