Как сохранить изображение в галерее

466
18 мая 2017, 10:09

В общем есть у меня простая рисовалка. Можно рисовать простые фигуры на canvas, и сохранять полученный результат в галерею в папку Pictures. Вот именно с сохранением и возникают проблемы. На андроид 5 и ниже все работает хорошо, а вот начиная с 6 и выше сохранить картинку не получается, нет доступа к внутреннему хранилищу. Читал где что данная проблема связана с тем, что в андроид 6 изменилась модель разрешений для доступа к файловой системе. Но решения я так и не нашел. В манифесте прописано разрешение на запись в EXTERNAL STORAGE. При попытке сохранить картинку на андроиде выше 6 (Пробовал на реальном устройстве с андроид 7, и на эмуляторе с 6) в логах пишет permission denied.

Answer 1

Перед сохранением изображения Вам нужно проверить, разрешен ли приложению доступ к карте памяти на запись. Если доступ разрешен, то все ок, если нет – то необходимо запросить это разрешение у пользователя:

if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
        // Здесь отображаете диалог с объяснением -- зачем
        // Вашему приложению требуется данное разрешение.
        // По кнопке "Ок" диалога запрашиваете разрешение.
    } else {
        ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_CODE);
    }
}

Далее, в методе onRequestPermissionsResult(...) получаете решение пользователя:

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_CODE: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Пользователь разрешил доступ
                // Сохраняете картинку на диск
            } else {
                // Пользователь запретил доступ
            }
            return;
        }
    }
}

Более подробную информацию можно найти в официальной документации.

READ ALSO
Как открыть текстовый файл, нажав на кнопку?

Как открыть текстовый файл, нажав на кнопку?

Есть определенная кнопкаКогда пользователь нажимает на нее, должен открыться определенный текстовый файл

269
Android. Нарисовать овал поверх Activity

Android. Нарисовать овал поверх Activity

Допустим, мы хотим нарисовать что-либоМы переопределяем DrawView и в нём уже что-то рисуем

203
Две Animation в одном

Две Animation в одном

У меня проект Компас, в начале проекта включается анимация ImageView и работает постоянноХочу прикрепить к ImageView еще одну Animation,что бы ImageView опустился...

204