本文章亲测有效,有部分参考自网络后测试改动,雷同请告知
获取全部存储设备信息封装对象
//通过过滤日志输出可发现,内外存储的removable:true---state:unmounted是存在变化的我们可以通过 该removable为true state为 mounted 判断出外置存储是否挂载详情见下面函数isStorageMounted()
//
/* 2019-06-19 17:55:51.004 2330-2330/com.dami.filemanager D/LHW: path:/storage/emulated/0----removable:false---state:mounted
2019-06-19 17:55:51.004 2330-2330/com.dami.filemanager D/LHW: path:/storage/03DB-0FEC----removable:true---state:unmounted
2019-06-19 17:55:51.064 2330-2330/com.dami.filemanager D/LHW: path:/storage/emulated/0----removable:false---state:mounted
2019-06-19 17:55:51.064 2330-2330/com.dami.filemanager D/LHW: path:/storage/03DB-0FEC----removable:true---state:unmounted*/
}
public static void testVolume(Context context){
ArrayList<Volume> list_volume =getVolume(context);
for (int i = 0; i < list_volume.size(); i++) {
LogUtils.D("LHW", "path:" + list_volume.get(i).getPath() + "----" + "removable:" + list_volume.get(i).isRemovable() + "---" + "state:" + list_volume.get(i).getState());
}
/*
获取全部存储设备信息封装对象
*/
public static ArrayList<Volume> getVolume(Context context) {
ArrayList<Volume> list_storagevolume = new ArrayList<Volume>();
StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
try {
Method method_volumeList = StorageManager.class.getMethod("getVolumeList");
method_volumeList.setAccessible(true);
Object[] volumeList = (Object[]) method_volumeList.invoke(storageManager);
if (volumeList != null) {
Volume volume;
for (int i = 0; i < volumeList.length; i++) {
try {
volume = new Volume();
volume.setPath((String) volumeList[i].getClass().getMethod("getPath").invoke(volumeList[i]));
volume.setRemovable((boolean) volumeList[i].getClass().getMethod("isRemovable").invoke(volumeList[i]));
volume.setState((String) volumeList[i].getClass().getMethod("getState").invoke(volumeList[i]));
list_storagevolume.add(volume);
} catch (IllegalAccessException e) {