由于不同芯片设备的外部存储设备不太统一,比如说外部sdcard,u盘等,他们的路径在不同芯片上面的定义是不一样的,所以我们需要动态的去获取机器当前的外部设备mount 的情况
Android 通过 StorageManager 类来管理存储设备的,这个类里面包含一些隐藏的方法:
getVolumeList —–> 返回StorageVolume 类型的数组,包含系统所有的存储设备volume
getVolumePaths—–> 返回String 类型的数组,包含系统所有存储设备的挂在路径
以下以getVolumeList 为例来获取系统所有的可插拔的设备
priavte StorageManager mStorageManager;
private Method getStorageVolumes;
private Method getPath;
mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
try {
getStorageVolumes = mStorageManager.getClass().getMethod("getVolumeList");
StorageVolume[] volumeList = (StorageVolume[]) getStorageVolumes.invoke(mStorageManager);
if(volumeList != null){
for(StorageVolume volume :volumeList){
if(volume.isRemovable() && volume.getState().equals("mounted")){
getPath = volume.getClass().getMethod("getPath");
Log.d("MainActivity", "getPath.invoke(volume.getClass()):" + getPath.invoke(volume));
String mountPoint = (String) getPath.invoke(volume);
}
}
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}