zoukankan      html  css  js  c++  java
  • Android之內置、外置SDCard

    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;
        }
  • 相关阅读:
    自己编译linux内核
    codeblocks中文输入及控制台乱码
    c快速学习代码
    二分法求方程解
    苹果公司前任首席执行官乔布斯语录
    html5特性
    lamp server快速搭建
    poj 1247 Magnificent Meatballs 解题报告
    Ural 1005 Stone Pilet 解题报告
    Ural 1020 Rope 解题报告
  • 原文地址:https://www.cnblogs.com/niray/p/4251309.html
Copyright © 2011-2022 走看看