Austin Huang
4 years ago
No known key found for this signature in database
GPG Key ID: 84C23AA04587A91F
1 changed files with 76 additions and 0 deletions
@ -0,0 +1,76 @@ |
|||
package awais.instagrabber.utils; |
|||
|
|||
import android.os.Build; |
|||
import android.os.Environment; |
|||
|
|||
import java.io.File; |
|||
import java.util.Collections; |
|||
import java.util.HashSet; |
|||
import java.util.Set; |
|||
import java.util.regex.Pattern; |
|||
|
|||
public class DirectoryUtils { |
|||
private static final Pattern DIR_SEPORATOR = Pattern.compile("/"); |
|||
|
|||
/** |
|||
* From: https://stackoverflow.com/a/18871043/1436766 |
|||
* |
|||
* Returns all available SD-Cards in the system (include emulated) |
|||
* <p> |
|||
* Warning: Hack! Based on Android source code of version 4.3 (API 18) |
|||
* Because there is no standard way to get it. |
|||
* TODO: Test on future Android versions 4.4+ |
|||
* |
|||
* @return paths to all available SD-Cards in the system (include emulated) |
|||
*/ |
|||
public static Set<String> getStorageDirectories() { |
|||
// Final set of paths |
|||
final Set<String> rv = new HashSet<>(); |
|||
// 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_SEPORATOR.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; |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue