分辨手机内外置SDCard的路径

Environment.getExternalStorageDirectory()
这个得到的是大多数android手机的内置存储卡的路径(就是说有些手机用这个语句会得到外置存储卡的路径)
我用反射得到了手机中所有存储卡的路径代码如下:
public String[] getStorageLocation()
    {
        String[] storageLocations = null;
        try
        {
            //得到我们需要的而androidSDK隐藏的方法
            //getMethod(参数1,参数2); 参数 1 代表方法名字 参数 2 代表方法参数
            Method get_getVolumePaths_byReflect = StorageManager.class.getMethod("getVolumePaths", new Class[0]);
            //            obj - 从中调用底层方法的对象
            //            args - 用于方法调用的参数
            //            如果基础方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null。
            //            如果基础方法所需的形参数为 0,则所提供的 args 数组长度可以为 0 或 null。
            StorageManager storageManager = (StorageManager) this.context.getSystemService(Context.STORAGE_SERVICE);
            //get_getVolumePaths_byReflect.setAccessible(true);
            Object[] obj = new Object[0];
            storageLocations = (String[]) get_getVolumePaths_byReflect.invoke(storageManager, obj);

        }
        catch (NoSuchMethodException e)
        {
            e.printStackTrace();
        }
        catch (IllegalAccessException e)
        {
            e.printStackTrace();
        }
        catch (InvocationTargetException e)
        {
            e.printStackTrace();
        }
        return storageLocations;
    }

问题就在于我得到3个路径
 /storage/emulated/0——【内置卡路径】
 /storage/sdcard1     ——【外置卡路径】
 /storage/usba          ——【OTG路径】
这是我的手机我能分辨,如果应用跑到别的手机上就不能分辨了
看完源码我知道
Environment.getExternalStorageDirectory()
也是用和我相同的方法 “getVolumePaths”得到的存储卡的路径
并且默认返回 数组的第一个( /storage/emulated/0——【内置卡路径】)

所以我的问题是是如何分辨手机内置存储卡、外置存储卡、OTG存储这三者的存储路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值