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 getSecondaryStoragePath(Context context) {

try {

List 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

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;

}

}

}