该工具类说明:获取手机存储设备如手机本身存储以及插入的外置SD卡存储信息,包括根路径,是否可以移除,以及是否为挂载状态,可根据是否可移除来判断是否是机身存储以及是否是插入的外置SD卡。
package com.dh.lenovo.mysdcrd;
import android.content.Context;
import android.os.storage.StorageManager;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
public class IsHaveOtherSdcard {
public ArrayList<HashMap<String,Object>> getSdcardStatus(Context context){
ArrayList<HashMap<String,Object>> list = new ArrayList<>();
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.length>=1){
for(int i=0;i<volumeList.length;i++){
HashMap<String,Object> map = new HashMap<>();
//存储根路径
map.put("path", (String) volumeList[i].getClass().getMethod("getPath").invoke(volumeList[i]));
//存储挂载状态mounted为挂载状态
map.put("state",(String) volumeList[i].getClass().getMethod("getState").invoke(volumeList[i]));
//是否可移除,可移除表示外置Sd卡,不可移除表示手机机身存储
map.put("isRemovable",(boolean) volumeList[i].getClass().getMethod("isRemovable").invoke(volumeList[i]));
list.add(map);
}
return list;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}