Как выставить права на файл в андроид

Обновлено: 18.05.2024

Вопрос разрешения записи на внешнюю SD-карту Android

После недавнего обновления до Android 9.0 я обнаружил, что файловому менеджеру не удалось записать данные на внешнюю SD-карту. File.canWrite() Метод, найденный для возврата false , Обсудив отслеживание и позиционирование, я обнаружил, что это было связано с GoogleизменениеВызванный:

Изменения здесь были удалены WRITE_MEDIA_STORAGE Разрешения, связанные с разрешениями, привели к тому, что внешнее хранилище на SD-карте недоступно для записи.

Затронуто приложение подписи платформы

Эта модификация больше влияет на системные приложения. Для платформ до 9.0 я применил WRITE_MEDIA_STORAGE После разрешения платформы приложение, подписанное платформой, может быть передано java.io.File Интерфейс записан на внешнюю SD-карту. Но после этой модификации, если вы хотите записать на внешнюю SD-карту, вам нужно использовать ее как стороннее приложение. DocumentFile Интерфейс, вы можете прочитать документацию APIСтруктура доступа к хранилищу с участием Использовать доступ к каталогу 。

Порекомендуйте это из Googlebug Приложения платформы, такие как файловый менеджер, камера, галерея и даже MediaProvider, будут иметь внешнюю SD-карту, которую можно только читать и не записывать, то есть проблема сбоя записи, поскольку эти системные приложения не адаптированы. DocumentProvider Способ написания.

DocumentFile адаптационное решение

1. Запросить разрешение на запись на внешнюю SD-карту

Еще в Android 4.4 Android присоединился к структуре доступа к хранилищу. Доступ к внешней SD-карте поддерживается DocumentsUI (com.android.documentsui). После улучшения версии 5.0 и 7.0 в настоящее время существует два вида запросов на внешнюю SD Интерактивный метод разрешения на запись карты:

  • До Android 7.0 используйте ACTION_OPEN_DOCUMENT_TREE, чтобы перейти к интерфейсу выбора хранилища DocumentsUI, а затем пользователь вручную открыл внешнее хранилище и выбрал

 sd

  • Android 7.0 и выше, используйтеStorageVolume.createAccessIntent(null) Перейти к окну приглашения на написание разрешения. (Это окно приглашения также предоставляется DocumentsUI, но оно улучшило предыдущее взаимодействие, чтобы избежать громоздких пользовательских операций)


Проверьте свойства интерфейса разрешений, вы увидите, что окно запроса разрешений на самом деле com.android.documentsui/com.android.documentsui.ScopedAccessActivity

Другими словами, DocumentsUI специально сделал окно запроса разрешения, чтобы упростить процесс запроса разрешения.

ПокаStorageVolume.createAccessIntent(String directoryName) Может передаваться во многих типах медиа, включая музыку, изображения, фильмы, документы и т. Д., Если входящий параметр null , Это означает весь внешний раздел хранения.

Parameters
directoryName String : must be one of Environment.DIRECTORY_MUSIC , Environment.DIRECTORY_PODCASTS , Environment.DIRECTORY_RINGTONES , Environment.DIRECTORY_ALARMS , Environment.DIRECTORY_NOTIFICATIONS , Environment.DIRECTORY_PICTURES , Environment.DIRECTORY_MOVIES , Environment.DIRECTORY_DOWNLOADS , Environment.DIRECTORY_DCIM , or Environment.DIRECTORY_DOCUMENTS , or null to request access to the entire volume.
Returns
Intent intent to request access, or null if the requested directory is invalid for that volume.

Запрос на разрешение и обработка

Запрос разрешения должен быть инициирован в Деятельности или Фрагменте, и в то же время onActivityResult Захвачено в Uri ,Вот этот Uri Это может быть сохранено в локальном хранилище для легкого вызова. Запрошенный код инкапсулируется следующим образом:

Вот rootPath Корневой каталог внешней SD-карты, переданный в контексте, такой как /storage/0000-0000 Такой путь можно пройти context.getExternalFilesDirs("external") Метод. DocumentsUtils Ниже приведен метод реализации класса инструмента.

2. Пакет операций с файлами DocumentFile

Поскольку предыдущее приложение использовалось java.io.File Интерфейс работает с внешними файлами SD-карты, и ожидается минимальное количество изменений кода, тогда наилучшим способом является File Сделайте упаковку снова.

До Android 9.0 системные приложения могут передаваться по умолчанию java.io.File Интерфейс записывается на внешнюю SD-карту, но если это стороннее приложение открытого рынка, оно не может быть записано после 4.4, и некоторые производители настраивают версию Android 9.0. Внешнюю SD-карту также можно записывать напрямую без интерфейса DocumentFile, интерфейса DocumentFile ни java.io.File эффективный.

Упакованные инструменты DocumentsUtils Описание метода,Не совместимы Указывает, что операция DocumentFile не инкапсулирована:

Всякая всячина, которую дядюшка Раджа находит в интернете и хочет поделиться с читателями.

Об авторе

Архив блога

Мой блог смотрят

13 февраля 2012

Как заменять системные APK-файлы на Android?


Это опять я и мои инструкции для чайников и кофейников с картинками.

На этот раз я подробно расскажу о замене системных компонентов ОС Android на примере установки модификации строки состояния.

Android - это маленький Linux. В нём надо соблюдать ряд правил при замене файлов, чтобы телефон не превратился в кирпич, оживить который поможет только полная перепрошивка с потерей всех данных из внутренней памяти устройства. Внутренние разделы отформатированы в файловую систему отличную от FAT32 на флешках. В свойствах файла кроме всего прочего хранятся разрешения для разных групп пользователей (хозяин файла, группа хозяина файла, остальные пользователи). При операции с системными файлами их надо сохранять, потому что при загрузке система просто может не суметь получить к ним доступ и не загрузиться нормально.
Начнем с инструментария.

  • Менеджер файлов, который умеет работать с root-правами и разрешениями файлов. Лучше всего подойдет Root Explorer (Вы же его купили, да?)
  • Сам модифицированный файл, который мы хотим положить наместо системного (ссылка в конце статьи).

Для начала нужно найти и сохранить резервную копию заменяемого файла.
Для этого запускаем Root Explorer и переходим в каталог " /system/app " и в списке находим нужный файл.


Теперь используем одну из удобных функций Root Explorer. Сделаем долгий тап по нужному файлу, чтобы вызвать контекстное меню



Нажимаем кнопкй "Stay", чтобы остаться в папке и сделать еще кое-что.

Теперь всё готово для замены файла.
Я уже говорил про права доступа у каждого файла. Чтобы их воссоздать на новом файле, надо сначала посмотреть их у старого. Они представлены рядом символов " rwxrwxrwx ". 1-я триада - права владельца, 2-я - группы владельца, 3-я - всех остальных пользователей. У нашего файла права "rw-r--r--".


Теперь переходим на SD-карту, находим там модифицированный файл и из его контекстного меню выбираем пункт "Copy", но не торопимся выбирать сразу папку " /system/app ", потому что мы тут же повредим систему. Вместо этого копируем файл в специальную папку для временных файлов " /data/local/tmp ", чтобы привести файл в вид, который примет система.
Для начала вызовем контекстное меню файла и выберем пункт "Rename" и введем имя файла " SystemUI.apk ". Именно так, потому что в Linux регистр букв в имени имеет значение, т.е. " systemui.apk " и " SystemUI.apk " - это разные файлы.
Далее надо изменить права на файл, потому что сейчас они почти наверняка выставлены неправильно. Для этого опять вызываем контекстное меню файла долгим тапом и выбираем пункт "Permissions". Для нашего значени "rw-r--r--" флажки надо расставить так:


Нажимаем "OK" и снова вызываем контекстное меню. Теперь надо изменить владельца и группу для этого приложения. Для этого выбираем пункт "Изменить владельца". Появится окно с информацией о текущем владельце файла.
Тут надо сделать маленькое отступление.
В папке " /system/app " всеми файлами владеет пользователь "root" (uid=0) и группа "root" (gid=0), а в папке " /system/framework " властвует пользователь "system" (gid=1000) и группа "system" (gid=1000).
Исходя из вышесказанного, выставляем нужные значения и нажимаем "OK".
И в третий раз вызываем контекстное меню для файла и в нем выбираем пункт "Copy" и в диалоге копирования переходим в папку " /system/app ". Теперь смело нажимаем "Paste" и читаем дальше внимательно.
Практически сразу система сообщит, что процесс строки состояния внезапно завершился, и предложит его запустить. Всё попытки будут неудачными. Между появлениями окон надо успеть сделать ряд действий. Перед нажатием кнопки надо вызвать меню выключения аппарата, оно окажется под предупреждением. Теперь надо расположить палец примерно в левой стороне кнопки. Теперь надо очень быстро щелкнуть три раза пальцем, что успеть закрыть предупреждение, выбрать пункт выключения и подтвердить свои намерения.
Теперь ждем выключения телефона, заново его запускаем и наслаждаемся результатом или не наслаждаемся и ищем ошибки.

Ни для кого не секрет, что операционная система Android широко распространена в мобильном мире.

Защита Google для OS Android

Такое повсеместное использование детища от Google провоцирует и рост числа хакерских атак на данную платформу. В целях борьбы с этим неприятным моментом IT-гигант пытается вводить новые функции, нацеленные на повышение безопасности владельцев устройств с системой Андроид, но некоторые из этих функций могут стать источником дополнительных неудобств. О том, как устранить одно из таких неудобств, и пойдёт речь ниже

Содержание статьи:

Ограничение доступа к карте памяти

В теме Память на Android. Все разделы памяти Андроид устройств мы уже касались вопроса памяти мобильной операционной системы. Многие пользователи смартфонов на базе Android версий 4.4 и старше столкнулись с ситуацией, когда программы от сторонних разработчиков не имеют доступ в корень карты памяти . Причём возникает данная проблема и у тех, кто приобрёл новый аппарат уже с Android KitKat и выше на борту, и у тех, кто обновился до новой системы уже после покупки.

Почему программы Андроид не имеют доступ в корень sd-карты?
Дело в том, что открытый доступ в корень накопителя - это большая дыра в безопасности всей операционной системы . Делая попытки обезопасить пользователей от злоумышленников, компания Google пошла на такой шаг, как ограничение доступа к карте памяти.

Говоря простым языком, во многих прошивках на базе Android 4.4 и выше программы от сторонних разработчиков больше не могут записывать данные в корень карты памяти. Возможность записи в каталоги, расположенные на флеш-карте, сохранилась. Усугубляется ситуация тем, что данное ограничение затронуло все приложения без исключения, в том числе и файловые менеджеры.

Такое положение дел устраивает далеко не всех, поэтому ниже мы рассмотрим способ вернуть сторонним программам доступ к корню карты памяти.

Программа SDFix от компании NextApp

Сразу отметим, что для решения проблемы нам необходимо наличие рут-прав у пользователя в системе Андроид. В статье Убираем рекламу на Android. Файл hosts мы уже касались этого определения. Приведём ниже небольшую выдержку:

root - это права суперпользователя в UNIX-подобных системах. Если быть более точным, то root - это аккаунт, владелец которого обладает привилегированными правами доступа и изменения файловой системы

Итак, у нас, по сути, есть два варианта действий:

  • программный (в автоматическом режиме);
  • ручной (редактированием системных файлов).

Для использования программного метода нам необходимо скачать на свой аппарат приложение SDFix: KitKat Writable MicroSD от компании NextApp из магазина Google Play или из прикреплённого к этой статье файла: nextapp.sdfix

Установить программу и запустить её, дав разрешение на root-доступ

Запуск программы SDFix на Андроид

Выполнение программы SDFix на Андроид

Кроме того, перед внесением изменений программа SDFix создаёт резервную копию редактируемых файлов, которая сохраняется по пути

В случае необходимости мы всегда сможем восстановить исходный файл, предварительно удалив окончание .original-pre-sdfix в его имени. Замена файла производится по аналогии с его изменением, этот процесс описан ниже.

Ручное предоставление доступа к карте памяти на Андроид

Устранение проблем записи на внешнюю SD-карту в Android 4.4+ возможно и в ручном режиме .
Стоит понимать, что вышеупомянутая программа SDFix всего лишь выполняет одну функцию, которую вполне можно воспроизвести и самостоятельно.

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

Приведём пошаговую инструкцию по редактированию файла platform.xml

В итоге у нас должен получиться следующий фрагмент кода:

На этом всё. После того, как ваше устройство загрузится, сторонние приложения смогут записывать свои данные в корень нашей флеш-карты.

Не для всех: как управлять доступом к файлам и приложениям на Android

Наверно, каждый взрослый пользователь доверяет своим гаджетам информацию личного характера. Финансовые тайны, пикантные фото, откровенные переписки — да все что угодно. Ну кто захочет делиться такими подробностями с посторонними? Но не сводить с устройства глаз и вырывать его из рук родственников или знакомых не под стать джентльменам и леди. Тем более, когда существуют другие методы, удобные и достаточно эффективные. Некоторые из них, возможно, вам уже известны, другие узнаете из этой статьи. Лишь уточню, что все перечисленные мной средства защиты не являются серьезной преградой для технических специалистов. Зато они оградят оцифрованные секреты от большинства лиц, которые имеют физический доступ к вашим смартфонам и планшетам на Android.

Блокировка экрана

Не для всех: как управлять доступом к файлам и приложениям на Android -2

Блокировка экрана предотвращает нежелательный доступ к личным данным и основным функциям устройства. Владелец аппарата задает в настройках PIN-код, пароль или графический ключ (опустим распознавание лиц и другие нестандартные варианты) — то, что считает удобным. В результате система перестает допускать к своим элементам без ввода заданной комбинации. В зависимости от настроек блокировка срабатывает автоматически или после нажатия соответственной кнопки.

Это, пожалуй, самый популярный метод защиты, который наверняка известен и вам. Но он не лишен нюансов. Допустим, ребенок желает поиграть на вашем смартфоне или знакомый просит показать новые фотографии — приходится снимать блок и передавать уже беззащитное устройство в другие руки. В такие моменты встает вопрос о более тонком контроле доступа к системе.

Блокировка профиля

Не для всех: как управлять доступом к файлам и приложениям на Android -3

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

Блокировка в приложениях

Не для всех: как управлять доступом к файлам и приложениям на Android -4

Блокировка в галерее — простой способ показать свои фотографии, не опасаясь за остальные данные. Аналогичным образом — блокируя на время все, кроме одной нужной программы — вы можете избирательно предоставлять доступ к контактам, музыкальным композициям и другой информации. Но что, если вам нечего оберегать, кроме одного-двух приложений? В таком случае проще заблокировать именно их, а все остальные программы оставить общедоступными. Об этом пойдет речь ниже.

Блокировка приложений

Не для всех: как управлять доступом к файлам и приложениям на Android -5

Блокировка приложения ограничивает допуск к любым данным и функциям устройства через это приложение. Такую возможность не обеспечивают стандартные средства Android (хотя смена профилей позволяет скрывать определенные программы), но широкий ассортимент программ-блокировщиков в Google Play сглаживает этот недостаток системы. Последние разрешают устанавливать графический ключ или пароль на запуск выбранных приложений.

Smart App Lock или аналогичная программа после запуска попросит настроить пароль или графический ключ, ввод которых она будет требовать для доступа к заблокированным приложениям. Затем вам предложат выбрать, какие программы следует защитить. Неважно, что за блокировщик вы используете, главное — отнеситесь внимательно к его настройке: обязательно запретите удаление приложений и заблокируйте вход в Play Market и настройки системы. Это прикроет лазейки в защитном механизме.

Таким образом, блокировщик приложений — это несложный и эффективный инструмент. Благодаря ему вы защитите только те программы, к возможностям которых не хотите допускать посторонних. Но не забывайте, что блокировка приложения не всегда препятствует доступу к файлам, с которыми оно работает. Например, если установить пароль на вход в галерею, ваши снимки все еще смогут увидеть в файловом менеджере и множестве других программ. Как с этим быть — рассказываю далее.

Блокировка файлов

Не для всех: как управлять доступом к файлам и приложениям на Android -6

Блокировка файла предотвращает нежелательный доступ к этому файлу из любой программы. Эта возможность входит в арсенал некоторых блокировщиков приложений, но есть и отдельные утилиты, целиком предназначенные именно для защиты файлов. К последним относится бесплатная GalleryVault , которая приглянулась мне больше остальных. Ее главное достоинство — поддержка множества форматов: фото, видео, аудио и прочих. Работа этого и других блокировщиков сводится к следующей схеме: прятать выбранные файлы во всех приложениях и допускать к ним только через защищенное хранилище.

Как видите, каждый из вышеперечисленных методов предлагает уникальный механизм контроля. Какой из них задействовать — зависит от конкретного случая. Определитесь, что именно стоит оградить от посторонних, и уже на этом основании подберите для себя индивидуальную схему защиты. Экспериментируйте с комбинациями методов, но не переусердствуйте. В любом случае не забывайте про банальную внимательность и не поддавайтесь паранойе.

Подписывайтесь на наш нескучный канал в Telegram, чтобы ничего не пропустить.


Операционная система Android устроена таким образом, что для выполнения некоторых операций или доступа к определенным ресурсам, приложение должно иметь разрешение на это.

Разрешения могут быть двух типов: normal и dangerous. Отличие между ними в том, что dangerous разрешения опасны, т.к. могут быть использованы для получения ваших личных данных или информации о вас, или еще каким-то способом могут навредить вам. Примеры dangerous разрешений - это доступ к контактам или смс.

Полный список существующих разрешений можно посмотреть здесь. Характеристика Protection level подскажет насколько опасно это разрешение. А здесь можно сразу просмотреть весь список normal разрешений.

Если приложению необходимо получить какое-либо разрешение, то оно должно быть указано в AndroidManifest.xml, в корневом теге . Тег разрешения - .

Вот пример манифеста с разрешениями:

Здесь мы указываем, что приложению понадобятся разрешения на работу с интернет, контактами, bluetooth, локацией, камерой и смс. Пользователю необходимо будет подтвердить, что он предоставляет приложению эти разрешения.

В этом материале мы подробно рассмотрим, как происходит это подтверждение.

До Android 6

До выхода Android 6 все было просто и легко. Когда пользователь устанавливал приложение с манифестом, который мы рассмотрели чуть выше, то он видел такой экран:


Система показывает разрешения, которые были прописаны в манифесте. Сначала те, которые могут быть опасными с точки зрения приватности (отправка смс, доступ к камере/местоположению/контактам), а затем - обычные (интернет, bluetooth).

Таким образом пользователь видит, на что претендует приложение, и может примерно понять все ли в порядке. Если, например, приложение калькулятор при установке просит у вас доступ к контактам и смс, то скорее всего, что-то не так с этим приложением и оно может быть опасным для ваших данных.

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

Если же в манифесте не указать разрешение READ_CONTACTS, то его не будет и в списке тех разрешений, которые подтверждает пользователь. Соответственно, система не предоставит этому приложению доступ к контактам. И при попытке получить список контактов, будет ошибка:
java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2

Android 6

С выходом Android 6 механизм подтверждения поменялся. Теперь при установке приложения пользователь больше не видит списка запрашиваемых разрешений. Приложение автоматически получает все требуемые normal разрешения, а dangerous разрешения необходимо будет программно запрашивать в процессе работы приложения.

Т.е. теперь недостаточно просто указать в манифесте, что вам нужен, например, доступ к контактам. Когда вы в коде попытаетесь запросить список контактов, то получите ошибку SecurityException: Permission Denial. Потому что вы явно не запрашивали это разрешение, и пользователь его не подтверждал.

Перед выполнением операции, требующей разрешения, необходимо спросить у системы, есть ли у приложения разрешение на это. Т.е. подтверждал ли пользователь, что он дает приложению это разрешение. Если разрешение уже есть, то выполняем операцию. Если нет, то запрашиваем это разрешение у пользователя.

Давайте посмотрим, как это выглядит на практике.

Проверка текущего статуса разрешения выполняется методом checkSelfPermission

На вход метод требует Context и название разрешения. Он вернет константу PackageManager.PERMISSION_GRANTED (если разрешение есть) или PackageManager.PERMISSION_DENIED (если разрешения нет).

Если разрешение есть, значит мы ранее его уже запрашивали, и пользователь подтвердил его. Можем получать список контактов, система даст нам доступ.

Если разрешения нет, то нам надо его запросить. Это выполняется методом requestPermissions. Схема его работы похожа на метод startActivityForResult. Мы вызываем метод, передаем ему данные и request code, а ответ потом получаем в определенном onResult методе.

Добавим запрос разрешения к уже имеющейся проверке.

Проверяем разрешение READ_CONTACTS. Если оно есть, то читаем контакты. Иначе запрашиваем разрешение READ_CONTACTS методом requestPermissions. На вход метод требует Activity, список требуемых разрешений, и request code. Обратите внимание, что для разрешений используется массив. Т.е. вы можете запросить сразу несколько разрешений.

После вызова метода requestPermissions система покажет следующий диалог


Здесь будет отображено разрешение, которое мы запросили методом requestPermissions. Пользователь может либо подтвердить его (ALLOW), либо отказать (DENY). Если будет запрошено сразу несколько разрешений, то на каждое из них будет показан отдельный диалог. И пользователь может какие-то разрешения подтвердить, а какие-то нет.

Решение пользователя мы получим в методе onRequestPermissionsResult

Проверяем, что requestСode тот же, что мы указывали в requestPermissions. В массиве permissions придут название разрешений, которые мы запрашивали. В массиве grantResults придут ответы пользователя на запросы разрешений.

В итоге схема получения разрешения состоит из трех действий:
- проверка текущего состояния разрешения
- запрос на получение разрешения, если оно еще не было получено
- обработка ответа на запрос

Далее поговорим про некоторые дополнительные возможности, нюансы и прочие мелочи.

Манифест

При использовании новой схемы разрешений вам все равно необходимо указывать разрешение в манифесте. Если его там не указать и сделать запрос на это разрешение, то вам просто сразу придет отказ без всякого диалога.

Всегда проверяйте разрешение

Каждый раз (а не только первый) перед выполнением операции, требующей определенного разрешения, необходимо проверять, что это разрешение есть. Потому что, даже если пользователь уже давал это разрешение, он всегда может зайти в настройки приложения и отменить его. И если вы после этого не выполните проверку, то получите ошибку при выполнении операции.

Don’t ask again

Когда вы первый раз делаете запрос на какое-либо разрешение, пользователь может отказать. При последующих запросах этого же разрешения, в диалоге появится чекбокс Don’t ask again


Если пользователь включит этот чекбокс, то при последующих ваших запросах диалог не будет отображаться, а в onRequestPermissionsResult сразу будет приходить отказ.

Объяснение для пользователя

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

Диалог, который показывается при запросе разрешения, - системный, вы не можете менять его содержимое и добавлять туда свой текст. Но вы можете сделать свой диалог или что-то подобное и показать его перед тем, как будете делать запрос разрешения.

Есть метод shouldShowRequestPermissionRationale, который может быть полезен в данной ситуации. Передаете ему название разрешения, а он вам в виде boolean ответит, надо ли показывать объяснение для пользователя.

Т.е. вы сначала проверяете наличие разрешения. Если его нет, то вызываете shouldShowRequestPermissionRationale, чтобы решить, надо ли показывать объяснение пользователю. Если не надо, то делаете запрос разрешения. А если надо, то показываете ваш диалог с объяснением, а после этого диалога делаете запрос разрешения.

Алгоритм работы метода shouldShowRequestPermissionRationale прост.

Если вы еще ни разу не запрашивали это разрешение, то он вернет false. Т.е. перед первым запросом разрешения ничего объяснять не надо.

Если вы ранее уже запрашивали это разрешение и пользователь отказал, то метод вернет true. Т.е. пользователь не понимает, почему он должен давать это разрешение, и надо ему это объяснить.

Если пользователь ставил галку Don’t ask again, то метод вернет false. Запрос полномочий все равно не будет выполнен. Объяснять что-то не имеет смысла.

Разумеется, вы можете показывать дополнительную информацию согласно вашим правилам и не использовать метод shouldShowRequestPermissionRationale.

Группы

Dangerous разрешения собраны в группы. Список групп можно посмотреть здесь. Если вы запросили одно разрешение из группы и пользователь предоставил вам его, то вы автоматически получаете все разрешения этой группы.

Например, разрешения READ_CONTACTS и WRITE_CONTACTS принадлежат группе CONTACTS. И если пользователь уже подтверждал разрешение на READ_CONTACTS, то при проверке WRITE_CONTACTS вы получите PERMISSION_GRANTED.

Android 6 и targetSdkVersion 23

Схема работы разрешений зависит от версии Android, на которой запущено приложение и от параметра targetSdkVersion приложения.

Новая схема будет работать, если версия Android >= 6 И targetSdkVersion >= 23.

В остальных случаях, т.е. когда targetSdkVersion

- в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

- ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

- новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Читайте также: