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()));
        }
    }`

0 ответов

Другие вопросы по тегам