Как проверить внутреннюю и внешнюю память, если есть
Как я могу узнать, есть ли внутренняя и внешняя память в Android прагматично? Кто-нибудь, как знать, как проверить как внутреннюю, так и внешнюю память
заранее спасибо
5 ответов
Это уже объясняется в документации Android.
Код взят из документации
boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// We can read and write the media
mExternalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
// We can only read the media
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
} else {
// Something else is wrong. It may be one of many other states, but all we need
// to know is we can neither read nor write
mExternalStorageAvailable = mExternalStorageWriteable = false;
}
Я написал небольшой класс для проверки состояния хранилища. Может быть, это вам пригодится.
ОБНОВЛЕНИЕ: Очистил код, удалил комментарии и сделал класс статическим.
import android.os.Environment;
public class StorageHelper {
private static boolean externalStorageReadable, externalStorageWritable;
public static boolean isExternalStorageReadable() {
checkStorage();
return externalStorageReadable;
}
public static boolean isExternalStorageWritable() {
checkStorage();
return externalStorageWritable;
}
public static boolean isExternalStorageReadableAndWritable() {
checkStorage();
return externalStorageReadable && externalStorageWritable;
}
private static void checkStorage() {
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
externalStorageReadable = externalStorageWritable = true;
} else if (state.equals(Environment.MEDIA_MOUNTED) || state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
externalStorageReadable = true;
externalStorageWritable = false;
} else {
externalStorageReadable = externalStorageWritable = false;
}
}
}
Код из документации, которая была немного упрощена после предыдущих ответов:
/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}
У меня получилось, если кто-то ищет это.... это поможет:D
try {
File dir = new File("/mnt/");
File[] dirs = dir.listFiles();
for (File _tempDIR : dirs) {
String sdCard = _tempDIR.getAbsolutePath().toString();
File file = new File(sdCard + "/"
+ Environment.DIRECTORY_DOWNLOADS);
File[] files = file.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
String _temp = files[i].getAbsoluteFile().getName()
.toString();/*Your code, and what you want to find, from all the Sdcard, internal and external. Everything mounted will be found :D*/
File f = new File("/mnt/sdcard/ext_sd");
if (f.exists()) {
// Do Whatever you want sdcard exists
}
else{
Toast.makeText(MainActivity.this, "Sdcard not Exists", Toast.LENGTH_SHORT).show();
}