-
-
Save AbreuY/468c7e02e8ada9f27c3a4d5f7b2a772b to your computer and use it in GitHub Desktop.
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
public static String[] getStorageDirectories() { | |
final Pattern DIR_SEPARATOR = Pattern.compile("/"); | |
// Final set of paths | |
final Set<String> rv = new HashSet<String>(); | |
// Primary physical SD-CARD (not emulated) | |
final String rawExternalStorage = System.getenv("EXTERNAL_STORAGE"); | |
// All Secondary SD-CARDs (all exclude primary) separated by ":" | |
final String rawSecondaryStoragesStr = System.getenv("SECONDARY_STORAGE"); | |
// Primary emulated SD-CARD | |
final String rawEmulatedStorageTarget = System.getenv("EMULATED_STORAGE_TARGET"); | |
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 { | |
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[0]); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment