Last active
December 7, 2015 12:43
-
-
Save be1/6d641165c6b6dfea7ba7 to your computer and use it in GitHub Desktop.
getting sdcards path list on android
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private static String[] getSdcards() { | |
// Final set of paths | |
final Set<String> rv = new HashSet<String>(); | |
// Primary physical SD-CARD (not emulated) | |
final String rawExternalStorage = System.getenv("EXTERNAL_STORAGE"); | |
verboseDebug("EXTERNAL_STORAGE env is: " + rawExternalStorage); | |
// All Secondary SD-CARDs (all exclude primary) separated by ":" | |
final String rawSecondaryStoragesStr = System.getenv("SECONDARY_STORAGE"); | |
verboseDebug("SECONDARY_STORAGE env is: " + rawSecondaryStoragesStr); | |
// Primary emulated SD-CARD | |
final String rawEmulatedStorageTarget = System.getenv("EMULATED_STORAGE_TARGET"); | |
verboseDebug("EMULATED_STORAGE_TARGET env is: " + rawEmulatedStorageTarget); | |
if (TextUtils.isEmpty(rawEmulatedStorageTarget)) { | |
// Device has physical external storage; use plain paths. | |
if (TextUtils.isEmpty(rawExternalStorage)) { | |
// EXTERNAL_STORAGE undefined; falling back to default. | |
rv.add("/storage/sdcard0"); | |
} else { | |
rv.add(rawExternalStorage); | |
} | |
} else { | |
// Device has emulated storage; external storage paths should have | |
// userId burned into them. | |
final String rawUserId; | |
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { | |
rawUserId = ""; | |
} else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { | |
rawUserId = "legacy"; | |
} else { | |
final String path = Environment.getExternalStorageDirectory().getAbsolutePath(); | |
final String[] folders = DIR_SEPARATOR.split(path); | |
final String lastFolder = folders[folders.length - 1]; | |
boolean isDigit = false; | |
try { | |
Integer.valueOf(lastFolder); | |
isDigit = true; | |
} catch (NumberFormatException ignored) { | |
} | |
rawUserId = isDigit ? lastFolder : ""; | |
} | |
// /storage/emulated/0[1,2,...] | |
if (TextUtils.isEmpty(rawUserId)) { | |
rv.add(rawEmulatedStorageTarget); | |
} else { | |
rv.add(rawEmulatedStorageTarget + File.separator + rawUserId); | |
} | |
} | |
// Add all secondary storages | |
if (!TextUtils.isEmpty(rawSecondaryStoragesStr)) { | |
// All Secondary SD-CARDs splited into array | |
final String[] rawSecondaryStorages = rawSecondaryStoragesStr.split(File.pathSeparator); | |
Collections.addAll(rv, rawSecondaryStorages); | |
} | |
return rv.toArray(new String[rv.size()]); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment