方法定义
public static String getUPath(boolean isUsb) {
String path = "";
StorageManager mStorageManager = (StorageManager) MyApplication.getInstance().getSystemService(Context.STORAGE_SERVICE);
Class<?> volumeInfoClazz;
Class<?> diskInfoClaszz;
try {
volumeInfoClazz = Class.forName("android.os.storage.VolumeInfo");
diskInfoClaszz = Class.forName("android.os.storage.DiskInfo");
Method StorageManager_getVolumes = Class.forName("android.os.storage.StorageManager").getMethod("getVolumes");
Method VolumeInfo_GetDisk = volumeInfoClazz.getMethod("getDisk");
Method VolumeInfo_GetPath = volumeInfoClazz.getMethod("getPath");
Method DiskInfo_IsUsb = diskInfoClaszz.getMethod("isUsb");
Method DiskInfo_IsSd = diskInfoClaszz.getMethod("isSd");
List<Object> List_VolumeInfo = (List<Object>) StorageManager_getVolumes.invoke(mStorageManager);
assert List_VolumeInfo != null;
for (int i = 0; i < List_VolumeInfo.size(); i++) {
Object volumeInfo = List_VolumeInfo.get(i);
Object diskInfo = VolumeInfo_GetDisk.invoke(volumeInfo);
if (diskInfo == null) continue;
boolean sd = (boolean) DiskInfo_IsSd.invoke(diskInfo);
boolean usb = (boolean) DiskInfo_IsUsb.invoke(diskInfo);
File file = (File) VolumeInfo_GetPath.invoke(volumeInfo);
if (isUsb == usb) {//usb
assert file != null;
path = file.getAbsolutePath();
} else if (!isUsb == sd) {//sd
assert file != null;
path = file.getAbsolutePath();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return path;
}
方法调用
获取U盘路径(返回值为空时,则表示无U盘插入)
String uPath = FileHelper.getUPath(true);
获取SD卡路径(返回值为空时,则表示无SD卡插入)
String sdPath = FileHelper.getUPath(false);