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存储这三者的存储路径
这个得到的是大多数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存储这三者的存储路径