关于SD卡兼容问题

原创 2016年08月29日 20:43:14
#最新发现,国内外机型SD卡路径问题简直时可怕,各种无法兼容,目前根据网上资料

现已修改兼容一下版本:
-4.4,5.0,5.1,6.0版本,其中国内只测国5.1版本的,其他为国外机型,需要自测!

  String currentDir;
  String storagePath;
  // 6.0以上版本进行测试路径
        if (Build.VERSION.SDK_INT >Build.VERSION_CODES.LOLLIPOP_MR1) {
            if (storagePath == null) {
                //内置路径
                currentDir =Environment.getExternalStorageDirectory().getAbsolutePath();
            } else {
                //外置路径
                storagePath=getStoragePath(mActivity, true);
            }
        } else {
        //6.0一下版本
            if ( getPath().equals("/mnt/shell/emulated")) {
                //内置路径
                currentDir =Environment.getExternalStorageDirectory().getAbsolutePath();
            } else {
                storagePath=getPath();
           }
        }



##return 有外置sd卡返回/mnt/media_rw/sdcard1,无外置返回/mnt/shell/emulated!
 public  String getPath() {
        String sdcard_path = null;
        String sd_default = Environment.getExternalStorageDirectory()
                .getAbsolutePath();
        if (sd_default.endsWith("/")) {
            sd_default = sd_default.substring(0, sd_default.length() - 1);
        }
        // 得到路径
        try {
            Runtime runtime = Runtime.getRuntime();
            Process proc = runtime.exec("mount");
            InputStream is = proc.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            String line;
            BufferedReader br = new BufferedReader(isr);
            while ((line = br.readLine()) != null) {
                if (line.contains("secure"))
                    continue;
                if (line.contains("asec"))
                    continue;
                if (line.contains("fat") && line.contains("/mnt/")) {
                    String columns[] = line.split(" ");
                    if (columns != null && columns.length > 1) {
                        if (sd_default.trim().equals(columns[1].trim())) {
                            continue;
                        }
                        sdcard_path = columns[1];
                    }
                } else if (line.contains("fuse") && line.contains("/mnt/")) {
                    String columns[] = line.split(" ");
                    if (columns != null && columns.length > 1) {
                        if (sd_default.trim().equals(columns[1].trim())) {
                            continue;
                        }
                        sdcard_path = columns[1];
                    }
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return sdcard_path;
    }


public  String getStoragePath(Context mContext, boolean is_removale) {
        StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);
        Class<?> storageVolumeClazz = null;
        try {
            storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");
            Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");
            Method getPath = storageVolumeClazz.getMethod("getPath");
            Method isRemovable = storageVolumeClazz.getMethod("isRemovable");
            Object result = getVolumeList.invoke(mStorageManager);
            final int length = Array.getLength(result);
            for (int i = 0; i < length; i++) {
                Object storageVolumeElement = Array.get(result, i);
                String path = (String) getPath.invoke(storageVolumeElement);
                boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement);
                if (is_removale == removable) {
                    return path;
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

前端面试题....HTML和CSS方面的题....以及一些兼容性问题.....

各种兼容性问题.....
  • qq_35770417
  • qq_35770417
  • 2017年09月01日 16:36
  • 474

移动端开发兼容性总结

每次h5开发,总会遇到一些兼容性bug,现在总结下,供大家参考。1)定位问题:ios 2)写背景图时最好加上top left 或者0 0 不然写运动效果时容易出现跳 3)防止手机中网页放大和缩小: 4...
  • xkweiguang
  • xkweiguang
  • 2017年02月07日 11:14
  • 2143

css字体大小兼容性问题

针对低版本chrome谷歌浏览器设置一个校准字体大小样式: -webkit-text-size-adjust:none 用法: body{-webkit-text-size-adjust:none...
  • echo_Ae
  • echo_Ae
  • 2017年10月30日 10:12
  • 201

关于Window7/8/10 兼容层与钩子系统兼容问题

Win7 以来,微软增加了安全性 ..... 此处省略一万字 同时增加了一个叫兼容层的东西 , 简单来说,就是由一些钩子处理程序,目的是为了兼容老程序在新系统上运行. 更简单的说法,WIN7 增加了些...
  • yuzehome
  • yuzehome
  • 2016年11月17日 23:23
  • 293

android 格式化SD卡

1,在设置界面点击>存储->格式化内部存储将会执行packages/apps/Settings/src/com/android/settings/deviceinfo/Memory.javaif (p...
  • Nio96
  • Nio96
  • 2015年09月15日 15:56
  • 568

CSS常见兼容问题解决方案

1.怪异模式问题:漏写DTD声明,Firefox仍然会按照标准模式来解析网页,但在IE中会触发怪异模式。为避免怪异模式给我们带来不必要的麻烦,最好养成书写DTD声明的好习惯。 2.IE6双边距问题:在...
  • lysunnyrain
  • lysunnyrain
  • 2016年03月23日 13:36
  • 2722

关于scrollTop的兼容问题

1、各浏览器下 scrollTop的差异
  • rui0838
  • rui0838
  • 2016年11月17日 10:16
  • 103

关于joomla模板兼容问题

昨天,在找joomla模板的时候,找到一些joomla 1.0的模板,而我的joomla后台却是1.5版本,加载了1.0的模板在后台无法预览,原来是1.5版本不支持1.0的模板。经过研究,解决了这个问...
  • lotharli
  • lotharli
  • 2010年08月24日 09:51
  • 383

关于JDK兼容问题

我们经常会遇到这样的需求,改动原有Java项目的一部分,再将其部署到Tomcat中。如果改动部分不是很多,我们完全可以用重新编译之后的class文件替换到之前项目中对应的class文件,然后重启Tom...
  • he_world
  • he_world
  • 2017年02月22日 22:11
  • 129

关于JS特效的兼容问题。

前言: 我们如果想实现一个JS特效(比如有n行记录,每行都有一个checkbox,选择行变颜色,不选中时颜色消失) 最简单的方法不是自己写,而是去网上复制一份下来。 ...
  • sxzlc
  • sxzlc
  • 2011年10月31日 23:36
  • 492
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于SD卡兼容问题
举报原因:
原因补充:

(最多只允许输入30个字)