AVD: не может получить доступ к съемному хранилищу из Java
Я почти на месте, но мне нужна последняя помощь: как получить доступ к съемному хранилищу из Java, работающему на AVD. Я хочу получить доступ к базе данных sqlite3, расположенной там.
Мой путь пока
- создать изображение нужного размера с помощью mksdcard -> OK
- смонтировать его в хост-системе (Ubuntu) с помощью sudo mount -o loop -o rw,utf8,umask=0000,uid=1000,gid=1000 sdcard.img /mnt/avd_sdcard/ -> OK
- передать необходимые файлы, включая базу данных-> ОК
- umount -> ОК
- В AVD Manager подключите новое виртуальное устройство к этому образу с помощью radio_button "Внешний файл" -> ОК.
- Когда AVD работает, я вижу файлы в файловом менеджере и могу открыть файлы из файлового менеджера-> OK
- В SDK я могу просмотреть изображение в проводнике файлов устройства -> ОК
- В Java я могу получить доступ к обычным местам хранения (Изображения, ..) после того, как я включил разрешение (WRITE_EXTERNAL_STORAGE) в манифест, перезапустил AVD и принял запрос разрешения в устройстве -> OK
Мне потребовалось некоторое время, чтобы добраться сюда, так как я новичок в Java и т. Д. Но, похоже, никакое кодирование в java не дает мне доступ к этим файлам. Я старался:
- Файл l0 = новый файл ("/storage/emulated/0"); -> показывает DCIM, фильмы, т.е. external_storage, но не файлы на устройстве img
- Файл l0=Environment.getExternalStoragePublicDirectory("top"), где "top" - это каталог верхнего уровня в img; -> нет результатов
- Также Environment.getDataDirectory() или Environment.getDownloadCacheDirectory() или Environment.getExternalStorageDirectory() не дают желаемого результата.
- В DeviceFileExplorer в SDK я нахожу данные в "/mnt/media_rw/100B-2803/top". Когда я вставляю это в Java: файл l0 = новый файл ("/mnt/media_rw/100B-2803/top") не дает результатов.
Мой основной код указан внизу.
Не могли бы вы указать мне решение:
- У меня проблема с разрешением?
- Мои настройки неверны?
- Могу ли я решить мою проблему в Java?
Моя среда выглядит следующим образом: Android Studio 3.1, сборка #AI-173.4670197, построена 22 марта 2018 г. JRE: 1.8.0_152-release-1024-b01 amd64 JVM: 64-битная виртуальная машина OpenJDK от JetBrains sro Linux 4.13.0-37-генерической
AVD (планшет): Oreo: 8.1 x86, API уровень 27
`File l0=new File("/mnt/media_rw/100B-2803/top");
Log.d(TAG, l0.getAbsolutePath());
File[] l1 = l0.listFiles();
if( l1 == null ) {
Log.d(TAG, "null");
}
else {
for ( File f1 : l1 ) {
Log.d(TAG, String.format("L1: %s", f1.getName()));
}
}`