分辨手机内外置SDCard的路径

移动开发 码拜 8年前 (2016-05-16) 1342次浏览
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存储这三者的存储路径
解决方案

40

Android源生代码确实是数组第一个为内置卡的路径,当有的系统经过定制,便不再遵循这个规律,你可以尝试检查路径下能否有只有内置卡才存在的路径来判断他能否是内置卡,不知道有没有更好的方法,期待

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明分辨手机内外置SDCard的路径
喜欢 (0)
[1034331897@qq.com]
分享 (0)