/**获取TF卡路径*/
public static String getTFDir(Context context) {
String sdcardDir = null;
StorageManager storageManager = (StorageManager) context.getApplicationContext().getSystemService(Context.STORAGE_SERVICE);
Class<?> volumeInfoClazz = null;
Class<?> diskInfoClazz = null;
try {
diskInfoClazz = Class.forName("android.os.storage.DiskInfo");
Method isSd = diskInfoClazz.getMethod("isSd");
volumeInfoClazz = Class.forName("android.os.storage.VolumeInfo");
Method getType = volumeInfoClazz.getMethod("getType");
Method getDisk = volumeInfoClazz.getMethod("getDisk");
Field path = volumeInfoClazz.getDeclaredField("path");
Method getVolumes = storageManager.getClass().getMethod("getVolumes");
List<Class<?>> result = (List<Class<?>>) getVolumes.invoke(storageManager);
for (int i = 0; i < result.size(); i++) {
Object volumeInfo = result.get(i);
if ((Integer) getType.invoke(volumeInfo) == 0) {
Object disk = getDisk.invoke(volumeInfo);
if (disk != null) {
if ((Boolean) isSd.invoke(disk)) {
sdcardDir = (String) path.get(volumeInfo);
break;
}
}
}
}
if (sdcardDir == null) {
Log.w(TAG, "sdcardDir null");
return null;
} else {
Log.i(TAG, "sdcardDir " + sdcardDir + File.separator);
return sdcardDir + File.separator;
}
} catch (Exception e) {
Log.i(TAG, "sdcardDir e " + e.getMessage());
e.printStackTrace();
}
Log.w(TAG, "sdcardDir null");
return null;
}
/**获取USB的路径*/
public static String getUsbDir(Context context) {
String sdcardDir = null;
StorageManager storageManager = (StorageManager) context.getApplicationContext().getSystemService(Context.STORAGE_SERVICE);
Class<?> volumeInfoClazz = null;
Class<?> diskInfoClazz = null;
try {
diskInfoClazz = Class.forName("android.os.storage.DiskInfo");
Method isUsb = diskInfoClazz.getMethod("isUsb");
volumeInfoClazz = Class.forName("android.os.storage.VolumeInfo");
Method getType = volumeInfoClazz.getMethod("getType");
Method getDisk = volumeInfoClazz.getMethod("getDisk");
Field path = volumeInfoClazz.getDeclaredField("path");
Method getVolumes = storageManager.getClass().getMethod("getVolumes");
List<Class<?>> result = (List<Class<?>>) getVolumes.invoke(storageManager);
for (int i = 0; i < result.size(); i++) {
Object volumeInfo = result.get(i);
Log.w(TAG, "disk path " + path.get(volumeInfo));
if ((Integer) getType.invoke(volumeInfo) == 0) {
Object disk = getDisk.invoke(volumeInfo);
Log.w(TAG, "is usb " + isUsb.invoke(disk));
if (disk != null) {
if ((Boolean) isUsb.invoke(disk)) {
sdcardDir = (String) path.get(volumeInfo);
break;
}
}
}
}
if (sdcardDir == null) {
Log.w(TAG, "usbpath null");
return null;
} else {
Log.i(TAG, "usbpath " + sdcardDir + File.separator);
return sdcardDir + File.separator;
}
} catch (Exception e) {
Log.i(TAG, "usbpath e " + e.getMessage());
e.printStackTrace();
}
Log.w(TAG, "usbpath null");
return null;
}
Android获取TF卡的路径和USB的路径
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 内部存储路径/data/data/youPackageName/,在程序安装的时候创建,在卸载的时候被删除。 1....
- 获取存储卡路径的接口大家都很熟悉,一般是通过 Environment 接口来获取: 偶尔开发中会遇到需要获取外置存...
- 就是利用反射原理。5.1 6.0 基本都一样。 8.1外置Sd卡路径 7.0 外置SD卡大小
- 最近做项目有获取手机存储和内存的需求,查了各种方法都不太如人意,手机存储倒是能正常获取,但是获取SD卡的时候却总是...