Я пытаюсь создать папку во внешнем хранилище 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();
        }
    }

Я проверил, доступно ли внешнее хранилище для чтения и записи, оно вернуло 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 не работает, другое устройство работает идеально. В чем проблема в моем коде?

0
Faxriddin Abdullayev 5 Окт 2018 в 14:14

1 ответ

Лучший ответ

Приложение запрашивает 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;
}
0
Faxriddin Abdullayev 8 Апр 2019 в 10:53