Хорошо, я искал форумы по максимуму и по минимуму и не могу найти приемлемый ответ, чтобы проверить, правильно ли установлена SD-карта и доступна ли ее запись на устройствах Android 7.(Есть много ответов, но ни один из них на самом деле не работает).
Я понимаю, что нужно использовать Environment.getExternalStorageState () , согласно моему коду ниже:
pathName=context.getFilesDir().getAbsolutePath()+"/"+SavePath;
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
pathName= Objects.requireNonNull(context.getExternalFilesDir(SavePath)).getAbsolutePath();
НО ...
Независимо отнезависимо от того, установлена карта SD или нет, это всегда возвращает TRUE, просто потому что карта SD установлена как эмулируемый ресурс, а НЕ как съемный ресурс.
Я могу использовать Environment.isExternalStorageEmulated (), чтобы проверить это состояние, НО он по-прежнему не сообщает мне, доступна ли SD-карта или нет.(то есть: isExternalStorageEmulated () всегда будет возвращать true независимо от того, существует ли SD-карта или нет, потому что она устанавливается файловой системой при запуске и, похоже, не имеет значения, есть ли физическая SD-карта в слоте или нет).
Кроме попыток записи на SD-карту и записи ошибки исключения, если она не существует, есть ли способ узнать, присутствует ли SD-карта или нет, ДО ТОГО, как я пытаюсь записать на нее?
РЕДАКТИРОВАТЬ:
После рассмотрения предлагаемых решений это лучшее, что я могу придумать.Это кажется очень неуклюжим.Любые идеи о том, как улучшить это?
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
if (Environment.isExternalStorageEmulated()){
File[] storage=getExternalFilesDirs(null);
// Find the first non-emulated storage space
for (File file: storage){
if (!file.toString().contains("emulated/"))
System.out.println(file.toString());
}
}
}