Runtime Permissions

126
24 июня 2021, 17:40

Пытаюсь сделать скриншот по нажатию кнопки следующим образом:

 private void takeScreenshot() {
    Date now = new Date();
    android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);
    try {
        // image naming and path  to include sd card  appending name you choose for file
        String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg";
        // create bitmap screen capture
        View v1 = getWindow().getDecorView().getRootView();
        v1.setDrawingCacheEnabled(true);
        Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
        v1.setDrawingCacheEnabled(false);
        File imageFile = new File(mPath);
        FileOutputStream outputStream = new FileOutputStream(imageFile);
        int quality = 100;
        bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
        outputStream.flush();
        outputStream.close();
        //openScreenshot(imageFile);
    } catch (Throwable e) {
        // Several error may come out with file handling or DOM
        e.printStackTrace();
    }
}

Выдает следующую ошибку:

W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Thu Aug 29 10:42:39 GMT 2019.jpg: open failed: EACCES (Permission denied)

Про runtime permissions в курсе, запрашиваю их следующим образом используя dexter:

private void requestPermissions(){
    Dexter.withActivity(this)
            .withPermissions(
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
            ).withListener(new MultiplePermissionsListener() {
        @Override public void onPermissionsChecked(MultiplePermissionsReport report) {openMultipleThings();}
        @Override public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {}
    }).check();
}

Не могу понять в чем проблема, разрешения имеются, как на эмуляторе, так и на физ.устройстве, дислокацию записи изображений менять тоже пробовал.

Answer 1

Проблема в Environment.getExternalStorageDirectory()

String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
String fileName = "myFile.txt";
File f = new File(baseDir + File.separator + fileName);
READ ALSO
Как заполнить ArrayList массивами?

Как заполнить ArrayList массивами?

Есть текстовый файл, в который записаны числа (каждое с новой строки) в таком формате: 1075 5018 6542 1456 и тд Хочу создать ArrayList массивов и каждый...

115
Поиск по enum. Java

Поиск по enum. Java

Всем привет! У меня есть два EnumВ одном написана стоимость, в другом предмет

255
Лямбда выражения, странности с телом лямбд

Лямбда выражения, странности с телом лямбд

Вопрос написал ниже в комментах кодаДа там два вопроса, но второй не отдельный вопрос, а лишь уточнение первого вопроса

72
Bootstrap + BootstrapVue. Как оптимизировать?

Bootstrap + BootstrapVue. Как оптимизировать?

Мы вроде бы избавляемся от jQuery и должны получить меньший размерjs файла, но в итоге он у меня получается ещё больше

105