Created
December 22, 2015 14:10
-
-
Save relict007/ba7b38bf615044619f83 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 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[rv.size()]); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment