Чтение/запись съемной SD-карты (эмулятор Android)

Каждый раз, когда я пытаюсь прочитать информацию о SD-карте (съемное хранилище), я получаю android.system.ErrnoException: statvfs failed: EACCES (отказано в доступе)

Я добавил разрешения в файл манифеста:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Как minSdkVersion> 23

   public static void verifyStoragePermissions(Activity activity) {
    // Check if we have write permission
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permission != PackageManager.PERMISSION_GRANTED) {
        // We don't have permission so prompt the user
        ActivityCompat.requestPermissions(
                activity,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    }
}

Вышеупомянутый метод вызывается при создании активности (он показывает всплывающее окно, и я разрешаю доступ)

Но когда я пытаюсь получить доступ к устройству: (Путь = /mnt/media_rw/13F4-1C18)

StatFs stat = new StatFs(path);

Я получил эту ошибку:

java.lang.IllegalArgumentException: Invalid path: /mnt/media_rw/13F4-1C18
                                                          at android.os.StatFs.doStat(StatFs.java:46)
                                                          at android.os.StatFs.<init>(StatFs.java:39)
.....
Caused by: android.system.ErrnoException: statvfs failed: EACCES (Permission denied)
                                                          at libcore.io.Posix.statvfs(Native Method)
                                                          at libcore.io.BlockGuardOs.statvfs(BlockGuardOs.java:304)
                                                          at android.system.Os.statvfs(Os.java:506)
                                                          at android.os.StatFs.doStat(StatFs.java:44)
                                                          at android.os.StatFs.<init>(StatFs.java:39) 

У вас есть идеи, как разрешить доступ к REMOVABLE DEVICE?

Спасибо !


person Mohamed    schedule 24.07.2017    source источник
comment
Какую информацию вы хотите прочитать? И это не похоже на путь к сд карте.   -  person greenapps    schedule 24.07.2017
comment
Размер устройства (общий, доступный размер)   -  person Mohamed    schedule 24.07.2017
comment
А что ты хочешь написать?   -  person greenapps    schedule 24.07.2017


Ответы (1)


SD-карта (внешнее хранилище)

Съемное хранилище не является внешнее хранилище.

Я добавил разрешения в файл манифеста

Эти разрешения не имеют ничего общего со съемным хранилищем.

я получил эту ошибку

У вас нет прямого доступа файловой системы к произвольным местам на съемном носителе.

У вас есть идеи, как разрешить доступ к ВНЕШНЕЙ SD-КАРТЕ?

Либо:

  • На Android 4.4+ используйте getExternalFilesDirs(), getExternalCacheDirs() и/или getExternalMediaDirs() (обратите внимание на форму множественного числа в именах методов) на Android 4.4+, чтобы получить доступ к уникальным для вашего приложения каталогам на съемном носителе. Вам не нужны никакие разрешения для работы с этими каталогами.

  • На Android 4.4+ перестаньте думать о съемных носителях и используйте хранилище Платформа доступа. Это позволяет пользователю указать, где находится контент, который может быть на внешнем хранилище, на съемном носителе, на Google Диске и т. д.

  • На Android 7.0+ используйте StorageManager и его StorageVolume API.

person CommonsWare    schedule 24.07.2017