Пожалуйста, прочитайте весь пост перед повторным голосованием и / или отметьте его как дубликат!
Я работаю над приложением, которое считывает файлы из определенной папки на телефоне пользователя - либо с SD-карты (если есть), либо со встроенного хранилища. Да, «READ_EXTERNAL_STORAGE» упоминается в манифесте, и я также обрабатываю всплывающее окно с разрешениями для API> 23.
Раньше я просто использовал
File folder = new File(Environment.getExternalStorageDirectory(), "myfolder");
, чтобы получить путь к папке, которая хранится во встроенном хранилище (32 ГБ для S7), но теперь я хочу получить путь к SD-карте. Согласно почти каждому результату, который дал мне Google, «Environment.getExternalStorageDirectory ()» должен указывать путь к SD-карте, но для меня это не так (и никогда не было).
Я протестировал следующее с двумя разными Samsung Galaxy S7, оба с Android 7.0, один с SD-картой (+ папка), другой без (+ папка):
Log.d(tag, System.getenv("EXTERNAL_STORAGE"));
Log.d(tag, System.getenv("SECONDARY_STORAGE"));
Log.d(tag, ""+new File(System.getenv("EXTERNAL_STORAGE")+File.separator+"myfolder").isDirectory());
Log.e(tag, ""+new File(System.getenv("EXTERNAL_STORAGE")+File.separator+ordner).getAbsolutePath());
Log.d(tag, Environment.isExternalStorageRemovable());
Log.d(tag, Environment.getExternalStorageDirectory());
Log.d(tag, Environment.getExternalStorageDirectory().getAbsolutePath());
К моему удивлению, оба телефона выводят одну и ту же информацию:
/sdcard
null
true
/sdcard/myfolder
false
/storage/emulated/0
/storage/emulated/0
Согласно приложению файлового менеджера («Мои файлы»), встроенное хранилище называется «Внутреннее хранилище», что имеет еще меньше смысла (я знаю разницу между Внутренним и Внешним хранилищем в Android).
Как получить путь к реальной SD-карте (без ее жесткого кодирования)?