Не удалось создать каталог в Android Oreo (API 26)

Я уже прочитал документацию по поведению и изменениям Android Oreo.

Я знаю, что существует другая процедура для создания каталога файлов для Android Oreo (API 26)

Код:

 File mediaStorageDir = null;

    if (Build.VERSION.SDK_INT >= 26) {
        mediaStorageDir = new File(Environment.getExternalStorageDirectory().toString(), "MyDirectory");
        Log.v("HEREEEEE","YES");
    } else {
        mediaStorageDir = new File(Environment.getExternalStorageDirectory().toString()
                + File.separator + "MyDirectory");
    }

    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Toast.makeText(RecordVideoActivity.this, "Failed to create directory MyDirectory.",
                    Toast.LENGTH_LONG).show();
            return null;
        }
    }

Но каждый раз, когда я получаю тост Не удалось создать каталог MyDirectory, я также могу Log.v("HEREEEEE","YES");, но не знаю, что он не создает каталог.

Расширенная помощь будет оценена по достоинству.!


person Piyush    schedule 10.11.2017    source источник
comment
ПОЧЕМУ у вас это есть, если Build.VERSION проверяется? Конструктор File(File, String) существует вплоть до Android 1.   -  person Gabe Sechan    schedule 10.11.2017
comment
Во-первых, я не проверял это. Но я получал ошибку. так что я пробовал этот способ   -  person Piyush    schedule 10.11.2017
comment
@GabeSechan Можете ли вы предложить мне, что я должен изменить или почему возникает эта ошибка ??   -  person Piyush    schedule 10.11.2017
comment
Скорее всего проблема с разрешениями. У вас есть WRITE_EXTERNAL_STORAGE?   -  person Gabe Sechan    schedule 10.11.2017
comment
Да, я уже применил все необходимые разрешения   -  person Piyush    schedule 10.11.2017
comment
there is different procedure to create file directory for Android Oreo (API 26). Нет. Вовсе нет. Но начиная с Android 6 вам нужно во время выполнения запрашивать у пользователя подтверждение запрошенных разрешений.   -  person greenapps    schedule 10.11.2017
comment
Да, я знаю, что мы должны применить разрешение во время выполнения для API 23>=.. Я уже применил private static final String[] VIDEO_PERMISSIONS = { Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE, }; Но при внесении изменений в код и выполнении отмены это было удалено Manifest.permission.WRITE_EXTERNAL_STORAGE случайно. Значит была проблема.   -  person Piyush    schedule 10.11.2017


Ответы (1)


Опубликовать Lollipop вы должны спросить разрешения, вы можете найти ответ в этом сообщении здесь

public  boolean isStoragePermissionGranted() {
    if (Build.VERSION.SDK_INT >= 23) {
        if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED) {
            Log.v(TAG,"Permission is granted");
            return true;
        } else {

            Log.v(TAG,"Permission is revoked");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            return false;
        }
    }
    else { //permission is automatically granted on sdk<23 upon installation
        Log.v(TAG,"Permission is granted");
        return true;
    }
}

Обратный вызов результата разрешения:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
        Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
        //Create your Directory here
    }
}
person Gautam Chibde    schedule 10.11.2017