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