public class StorageUtils { private static String TAG="123"; // 獲取主存儲卡路徑 內置內存卡路徑 public static String getPrimaryStoragePath(Context context) { try { StorageManager sm = (StorageManager) context.getSystemService(context.STORAGE_SERVICE); Method getVolumePathsMethod = StorageManager.class.getMethod("getVolumePaths"); String[] paths = (String[]) getVolumePathsMethod.invoke(sm); // first element in paths[] is primary storage path return paths[0]; } catch (Exception e) { Log.e(TAG, "getPrimaryStoragePath() failed", e); } return null; } //獲取可用的全部外置內存卡路徑 public static List<String> getSecondaryStoragePath(Context context) { try { List<String> sdPaths=new ArrayList<>(); StorageManager sm = (StorageManager) context.getSystemService(context.STORAGE_SERVICE); Method getVolumePathsMethod = StorageManager.class.getMethod("getVolumePaths"); String[] paths = (String[]) getVolumePathsMethod.invoke(sm);//獲取全部sd卡路徑 if(paths.length>=1){ for (int i = 1; i <paths.length ; i++) { if(getStorageState(context,paths[i])){ sdPaths.add(paths[i]); } } } return sdPaths; } catch (Exception e) { Log.e(TAG, "getSecondaryStoragePath() failed", e); } return null; } // 判斷存儲卡的路徑是否可用 public static boolean getStorageState(Context context,String path) { try { StorageManager sm = (StorageManager) context.getSystemService(context.STORAGE_SERVICE); Method getVolumeStateMethod = StorageManager.class.getMethod("getVolumeState", new Class[] {String.class}); String state = (String) getVolumeStateMethod.invoke(sm, path); if(state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)||state.equals(Environment.MEDIA_MOUNTED)){ return true; } return false; } catch (Exception e) { Log.e(TAG, "getStorageState() failed", e); return false; } } }