试了好多种办法,拿不到移动硬盘的地址,最后通过反射得到。。。。
public void getDiskInfo() {
StorageManager mstorageManager = (StorageManager) this.getApplicationContext().getSystemService(Context.STORAGE_SERVICE);
try {
//DiskInfo
Class<?> diskIndoClass = Class.forName("android.os.storage.DiskInfo");
Method isUsb = diskIndoClass.getMethod("isUsb");
Method isSd = diskIndoClass.getMethod("isSd");
//VolumeInfo
Class<?> volumeClass = Class.forName("android.os.storage.VolumeInfo");
Method volumeDisk = volumeClass.getMethod("getDisk");
Method fsUuid = volumeClass.getMethod("getFsUuid");
Method path = volumeClass.getMethod("getPath");
Method getVolumes = StorageManager.class.getDeclaredMethod("getVolumes");
List volumeInfoList = (List) getVolumes.invoke(mstorageManager);
for(int i= 0 ;i<volumeInfoList.size();i++){
//反射得到diskInfo,并判断是不是usb
if(volumeDisk.invoke(volumeInfoList.get(i)) != null && (boolean)isUsb.invoke(volumeDisk.invoke(volumeInfoList.get(i)))){
String path_usb = "mnt/media_rw/"+fsUuid.invoke(volumeInfoList.get(i));
Log.e("willie","usb path::"+path_usb);
// Log.e("willie","sdcard path_path::"+path.invoke(volumeInfoList.get(i)));
tv_msg.setText("usb:"+path_usb);
Log.e("willie","fsUuid::"+fsUuid.invoke(volumeInfoList.get(i)));
} else if(volumeDisk.invoke(volumeInfoList.get(i)) != null && (boolean)isSd.invoke(volumeDisk.invoke(volumeInfoList.get(i)))){
String path_sdcard =""+path.invoke(volumeInfoList.get(i));
Log.e("willie","sdcard path::"+path_sdcard);
tv_msg1.setText("sdcard:"+path_sdcard);
Log.e("willie","fsUuid::"+fsUuid.invoke(volumeInfoList.get(i)));
} else{
Log.e("willie","other::"+path.invoke(volumeInfoList.get(i)));
}
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}