В общем есть у меня простая рисовалка. Можно рисовать простые фигуры на canvas, и сохранять полученный результат в галерею в папку Pictures. Вот именно с сохранением и возникают проблемы. На андроид 5 и ниже все работает хорошо, а вот начиная с 6 и выше сохранить картинку не получается, нет доступа к внутреннему хранилищу. Читал где что данная проблема связана с тем, что в андроид 6 изменилась модель разрешений для доступа к файловой системе. Но решения я так и не нашел. В манифесте прописано разрешение на запись в EXTERNAL STORAGE
. При попытке сохранить картинку на андроиде выше 6 (Пробовал на реальном устройстве с андроид 7, и на эмуляторе с 6) в логах пишет permission denied
.
Перед сохранением изображения Вам нужно проверить, разрешен ли приложению доступ к карте памяти на запись. Если доступ разрешен, то все ок, если нет – то необходимо запросить это разрешение у пользователя:
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;
}
}
}
Более подробную информацию можно найти в официальной документации.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть определенная кнопкаКогда пользователь нажимает на нее, должен открыться определенный текстовый файл
Допустим, мы хотим нарисовать что-либоМы переопределяем DrawView и в нём уже что-то рисуем
У меня проект Компас, в начале проекта включается анимация ImageView и работает постоянноХочу прикрепить к ImageView еще одну Animation,что бы ImageView опустился...