Oreo проблема в создании каталога на внешнем хранилище - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь создать папку в Android внешнем хранилище.Я пробую много примеров, но все не работает.Я установил разрешения во время выполнения для чтения и записи во внешнее хранилище.Это работает на Android API 6, 7. но не работает на Android Oreo.

File f = new File(Environment.getExternalStorageDirectory(), "MyDir");
    if (!f.exists()) {
        try {
            boolean is_seccess = f.mkdirs();
            if (is_seccess) {
                Toast.makeText(this, "create", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "not create", Toast.LENGTH_SHORT).show();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

I Проверено, доступно ли внешнее хранилище для чтения и записи, оно возвращает true.

public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

Я даю разрешения ниже, я также даю разрешение во время выполнения и разрешаю его.

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

Просто Android Oreo не работает, другое устройство работает идеально.В чем проблема в моем коде?

1 Ответ

0 голосов
/ 08 апреля 2019

Приложение запрашивает READ_EXTERNAL_STORAGE, и пользователь предоставляет его.Если приложение предназначено для уровня API 25 или ниже, система также предоставляет WRITE_EXTERNAL_STORAGE одновременно, поскольку оно принадлежит к той же группе разрешений STORAGE и также зарегистрировано в манифесте.Если приложение предназначено для Android 8.0 (уровень API 26), система предоставляет только READ_EXTERNAL_STORAGE в это время;однако, если приложение позже запрашивает WRITE_EXTERNAL_STORAGE

Запрос разрешения времени выполнения, как показано ниже:

private boolean checkAndRequestPermissions() {
    int permissionReadStorage = ContextCompat.checkSelfPermission(this,
            Manifest.permission.READ_EXTERNAL_STORAGE);
    int permissionCamera = ContextCompat.checkSelfPermission(this,
            Manifest.permission.CAMERA);
    int permissionWriteStorage = ContextCompat.checkSelfPermission(this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE);

    List<String> listPermissionsNeeded = new ArrayList<>();
    if (permissionCamera != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.CAMERA);
    }
    if (permissionReadStorage != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
    }
    if (permissionWriteStorage != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
    }

    if (!listPermissionsNeeded.isEmpty()) {
        ActivityCompat.requestPermissions((Activity) this,
                listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),
                REQUEST_ID_MULTIPLE_PERMISSIONS);
        return false;
    }
    return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...