• 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 -- 如何减少IO过程中的CPU copy
    Linux -- 在多线程程序中避免False Sharing
    智能文件选择列表—— bat 批处理
    Windows NTFS 符号链接 与 Linux 软连接
    【2017.12.12】deepin安装U盘制作,支持 BIOS+UEFI,deepin_Recovery+Win PE
    Qt creator中文输入—fctix-qt5 源码编译 libfcitxplatforminputcontextplugin.so
    安装 Qt 及所需 gcc 等
    虚拟机安装 deepin Linux 注意事项
    deepin 常用设置
    VIM常用快捷键
  • 原文地址:https://www.cnblogs.com/niray/p/4251309.html
Copyright © 2020-2023  润新知