Контроллер разрешений Android что это за программа

Содержание

Права доступа (permission) в Android

Права доступа (permission) в Android

Одним из интереснейших методов безопасности операционной системы Андроид является система разрешений (permissions), используемых приложениями. Когда OS ANDROID только появилась, её разработчики придумали – выделить все возможные функции, доступ к которым необходим приложению, и позволить пользователю их контролировать. Было это реализовано довольно интересно.

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

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

Разрешения для приложений на телефоне Андроид: как предоставить или убрать?

Ещё во время создания программы разработчик выделяет все функции, которые потребуются его программе. Этот список прописывается в файле AndroidManifest.xml, который на этапе сборки программы помещается в его APK-файл. Когда пользователь Андроид устройства будет устанавливать очередное приложение, то вышеупомянутый список, заданный его создателем, будет отображаться на экране. И только после того, как пользователь согласится дать все эти права устанавливаемому приложению, оно будет установлено. Считается, что именно на этом этапе большинство пользователей избежит вирусов, заподозрив программу в плохом поведении и отклонив установку.

С технической точки зрения, обойти существующий механизм прав доступа приложений к функциональности системы Андроид очень непросто. Так как менеджмент разрешений осуществляется на самом низком уровне ядром Linux, программе обязательно нужны права рут , чтобы повлиять на это. Хорошо формализованная система permissions облегчает реализацию инструментов безопасности сторонними разработчиками. Перспективным направлением является создание программ, которые позволяют пользователям тонко настраивать права доступа каждого отдельного приложения, предотвращая любые утечки информации с устройства.

Права доступа (permission) на папки и файлы в Андроид

Права доступа разделяются на две группы зто:
1.Права доступа к файлам
2.Права доступа к папке (директории)

Права доступа к файлам могут иметь такие атрибуты:
r — право на чтение данных. (read)
w — право на изменение содержимого или запись, но не удаление. (write)
x — право на исполнение файла. (xxxxxx)

Права доступа к папке (директории):
r — право на чтение папки (директории).
w — право на изменение содержимого директории можно создавать и удалять объекты в этой директории.
x — право, которое позволяет вам войти в директорию.

Сами права доступа подразделяются на три категории:
«user» — u владелец файла.
«group» — g член той же группы, к которой принадлежит владелец.
«world» — o все остальные.

Порядок записи прав доступа:
сначала права для владельца — «u»
затем для группы — «g»
и в конце права для всех остальных — «o»

Например: предположим что у вас на работе есть компьютер, вы его владелец, он состоит в локальной сети (группа) а есть пользователи, которые хотят что либо на вашем компьютере сделать. По всем этим категориям задаются права на файлы и папки в виде RWX которые дают какие либо права на выполнение чего либо, если в заданных правах RWX присутствует знак «-» то это означает что право отсутствует.
Например: rwx r— r— означает что владелец файла имеет все права: право на чтение, запись в него и исполнение, а все остальные пользователи только право на чтение.

Права доступа (permission) в Android

Права доступа (permission) в Android

Права доступа (permission) в Android

Помимо буквенных выражений есть числовые выражения:
r — (читать) это 4
w (запись) это 2
x (исполнение) это 1
«-» ничего не делать тоесть знак дефиса, 0
И их сумма означает конечные права
7 (rwx) = 4 + 2 +1 (полные права)
5 (r-x)= 4 + 0 + 1 (чтение и выполнение)
6 (rw-) = 4 + 2 + 0 (чтение и запись)
4 (r—) =4 + 0 + 0 (только чтение)

Права доступа (permission) в Android

Права доступа (permission) в Android

Часто используемые параметры:
400 (-r———) — владелец будет иметь право чтения, никто кроме него не имеет права выполнять никакие действия.
644 (-rw-r—r—) — все пользователи имеют право чтения, а владелец может редактировать.
660 (-rw-rw—-) — владелец и группа могут читать и редактировать, все остальные не имеют никаких прав.
664 (-rw-rw-r—) — все пользователи имеют право чтения, а владелец и группа могут редактировать.
666 (-rw-rw-rw-) — все пользователи могут читать и редактировать.
700 (-rwx——) — владелец может читать, записывать и запускать на выполнение, у других нет права выполнять никакие действия.
744 (-rwxr—r—) — все пользователи могут читать, а владелец имеет право редактировать и запускать на выполнение.
755 (-rwxr-xr-x) — каждый пользователь может читать и запускать на выполнение, владелец может редактировать.
777 (-rwxrwxrwx) — каждый пользователь может читать, редактировать и запускать на выполнение.
sudo passwd root — пароль суперпользователя root.

Здесь представлен онлайн калькулятор , и программа которая может задавать права на файл Root Explorer
Бывает что права состоят из 4х цифр это означает что помимо владельца, группы, остальных есть еще и SUPERUser (Супер Админ)
тогда список будет выглядеть вот так:
«SuperUser» — SuperUser
«user» — u владелец файла
«group» — g член той же группы, к которой принадлежит владелец
«world» — o все остальные

Источник: upgrade-android.ru

Как дать и изменить разрешения для приложений системы Android, опасность

Как дать и изменить разрешения для приложений системы Android, опасность

У всех приложений в смартфонах есть собственная структура, архитектура и способы взаимодействия с ОС. На ранних этапах создания ПО разработчик продумывает его архитектуру и логику, чтобы оно работало быстро и стабильно. От этих параметров зависит то, где приложение будет получать данные и как обработает. Когда приложение попадает на телефон, ему нужны специальные разрешения для работы. Мы расскажем, зачем нужны разрешения для каждого приложения на Android.

Для чего это нужно?

Как мы упомянули выше, единственный способ взаимодействия приложения с ОС Android – это интерфейс разрешений. Если их не выдать, то программа не сможет выполнить никаких действий либо будет одноразовой. Почему это так работает – спросит читатель. Дело в том, что разрешения отвечают за то, насколько полный доступ к данным ОС, функционалу и файловой системе получит программа.

Например, ПО без разрешений не сможет записать даже служебные файлы вне своей папки, закроется при сворачивании и сломается при попытке сделать фото без доступа к камере. screenshot_1Разрешения – это очень важная составляющая Android, так как защищает от порчи данных и их саботирования.

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

Это суждение ложно, так как в телефонах используется ОС Android, имеющая открытый исходный код (касается только «чистых» версий). То есть каждый обыватель интернета может скачать репозиторий с кодом и посмотреть его на наличие средств слежки. screenshot_2

Как дать разрешение приложению на Андроид

На процесс предоставления прав мало кто обращает внимание. В современных Android даже не приходится лезть в настройки. Нужные права программа запросит уже при первом запуске. Однако иногда при неправильной настройке приходится менять права вручную.

Основные разрешения

  • Откройте настройки. Для этого кликните по значку шестеренки в строке уведомлений.
  • Перейдите в раздел «Приложения».

screenshot_3

  • Выберите подраздел «Все приложения» или «Установленные».

screenshot_4

  • Найдите нужную программу и кликните по ней.
  • В открывшейся вкладке будет пункт «Разрешения». Кликните по нему.
Читайте также:
Syncables desktop что это за программа

screenshot_8

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

  1. Разрешить.
  2. Разрешить только во время использования.
  3. Запретить.

Изменить текущую конфигурацию прав можно в любой момент.

Специализированные

Права из этой категории имеют более глобальный контент. К ним относятся разрешения на:

  • Отображение поверх других окон.
  • Запуск сторонних приложений и установка.
  • Создание ярлыков.
  • Автостарт.

screenshot_11

В некоторых моделях телефонов эти права можно выдать в том же меню, что и основные. Однако, например, в китайских телефонах для этого необходимо:

  • Снова открыть настройки и перейти в раздел «Приложения».
  • Выбрать подпункт «Разрешения».
  • Перейти во вкладку «Особые».

screenshot_9

Учтите, что программа, работающая поверх других окон, может зависнуть и обездвижить экран. Впрочем, это только одна из опасностей.

Опасность и меры предосторожности

Мы не рекомендуем халатно выдавать полный доступ каждому приложению. При настройке конфигурации разрешений следуйте правилам ниже:

  • Не позволяйте больше, чем нужно. Базовые требования будут запрошены при старте. Но если простой блокнот требует доступ к звонкам, то это повод удалить его либо лишить этого права.
  • По возможности выбирайте параметр «Только во время использования» вместо «Разрешать всегда».
  • Не скачивайте приложения с сомнительным набором требований. Они, кстати, указываются в Play Market.

screenshot_10

В противном случае такая небрежность может привести к утечке персональных данных. Не стоит отнекиваться под предлогом «кому я нужен». Любые данные пользователей на рынке имеют цену.

Благодарим за прочтение.

Источник: it-tehnik.ru

Permissions controller для чего это приложение

Permission Control что это за программа на Андроиде? (com.mediatek.security)

Permissions controller для чего это приложение

При включении смартфона в верхней строке статуса может быть нарисован замочек. При нажатии — выскакивает ошибка, в тексте которой упоминается Permission Control (идентификатор com.mediatek.security).

Постараемся немного разобраться — что это за программа?

Удалось выяснить

По мнению одного юзера, Permission Control — контроль разрешений для приложений. Данный компонент способен вызывать глюки, лаги, нестабильную работу телефона, увеличенный расход батареи. Для отключения необходимо перейти в настройки > безопасность, найти пункт App Permission > отключить.

Опасность отключенного приложения состоит в том, что все программы получат полные разрешения. Рекомендуется перед отключением просканировать смарт на наличие вирусов/троянов. Для проверки можно использовать антивирусы Касперского, Доктора Веба.

Удаление компонента — только на свой страх и риск.

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

Приложение в списке установленных:

Permissions controller для чего это приложение

Также может быть ошибка:

permission control произошла ошибка

Можно попробовать данное приложение заморозить при помощи Titanium Backup. Удалять не стоит — могут быть проблемы. Приложение в Титаниуме:

Permissions controller для чего это приложение

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

Apps will directly get permissions without your confirmation

Сообщение предупреждает — если выключить, тогда приложения будут напрямую получать разрешения без вашего подтверждения.

Также после отключения могут быть проблемы с Play Market (скорее всего связаны с безопасностью).

Еще один человек подтвердил — если вас достает приложение Permission Control, выключите в настройках > безопасность > разрешения для приложений.

Дополнительно удалось выяснить — за запуск сторонних приложений отвечает не только Phone Cleaner (необходим для энергосбережения), но и плагин Permission Control.

Если Permission Control заморозить Титаниумом тогда автостарт в настройках станет неактивным.

По непроверенной информации Permission Control это тоже самое что и Privacy Protect.

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

Другой пользователь написал свой способ отключения

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

Странный косяк — когда приложение пытается использовать GPS, то пермиссион контрол отображает GPS как Bluetooth.

Permission Control: что это за программа на Андроид и как отключить?

01.12.2020 8 Просмотры

Операционная система Андроид является сложной структурой, за безопасность которой отвечает специальная система разрешений (permissions). Разработчики все выстроили так, что доступ к различным опциям имеют отдельные приложения, а функции контроля доступны пользователю. Список прав определен специалистами Google и закреплен в протоколах. В настоящий момент разработана Permission Control – специальная программа на Андроид. Некоторые считают ее лишней и энергозатратной, поэтому ищут вариант, как отключить.

Что это

Permissions controller для чего это приложение

Permission Control – специальная служба Андроид, которая контролирует подлинность заявленных разрешений установленных на устройстве. Главная задача этого софта сводится к анализу имеющейся информации с целью запретить приложениям возможность получения стороннего доступа, если об этом не было данных в момент установки.

Как отключить

Permissions controller для чего это приложение

В случае необходимости Permission Control допускается временно деактивировать. Пользователь может сделать все самостоятельно с помощью стандартного меню настроек Андроид.

Владелец гаджета должен перейти в раздел «Настройки». Следующий шаг – вкладка «Безопасность», где требуется перейти в раздел «Права приложений» или «Разрешения приложений» (в зависимости от версии формулировка может отличаться!). Последнее действие – «Отключить».

Permissions controller для чего это приложение

Работа системы – слаженный механизм, каждый шаг которого подчиняется строгим регламентам. Permission Control стоит на страже несанкционированных действий и позволяет приложениям выполнять сторонние операции, которые ему не свойственны или не заявлены при установке. В ряде случаев, когда компонент permissions негативно влияет на функционал гаджета – увеличенный расход батареи, ошибки, зависания, его можно отключить.

App Permissions — что это на Андроид

Сейчас персональная информация очень часто попадает в руки общественности. Истории звонков, ваше месторасположение, данные о серфинге в интернете и многое другое. Но теперь, начиная с Android 3.1, все можно изменить. Современное приложение «App Ops» готово спасти все личные данные от хищения сторонними лицами. Мы расскажем что это такое App Permissions в телефоне или планшете на Андроид и почему не нужно путать его с уведомлениями «App permission management is closed».

Что это такое?

App Permissions Manager (или App ops) – это менеджер уровня разрешений, работающий c ОС Android 4.3 и выше. Приложение создает свою картотеку всего софта на смартфоне. По отдельности может блокировать доступ приложений к разной запрашиваемой информации, к примеру: данным GPS, истории браузера, хранящимся текстовым сообщениям и т.д. Очень удобный интерфейс позволяет в один клик запрещать передачу данных сторонним ресурсам, что очень эффективно против разных шпионских программ.

Permissions controller для чего это приложение

Приложение App Permissions Manager для Андроид

Преимущества менеджера

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

Также к огромным плюсам можно отнести работу в реальном времени. Зайдя в «App Permissions» и отключая разные характеристики, они тут же вступают в силу. Не нужно производить перезагрузку девайса, все уже будет применено на деле. А процесс запрета происходит посредством перетаскивания ползунка с одной стороны в другую.

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

Интерфейс

Весь интерфейс состоит из списка приложений, где возможно установить ограничение на доступ к личной информации. Вверху имеется навигационное меню: Device, Personal, Location, Messaging. Никаких дополнительных настраиваемых меню больше нет.

Замечание

Внимание! Не стоит путать работу этого приложения со всплывающими уведомлениями в версии Андроид 6.0 и выше — «App Permission Management is running» (настройки APM активированы) и «App Permission Management is closed» (настройки APM отключены). Убрать (отключить) уведомления можно в «Настройках» — «Безопасность» (листаем вниз) — перемещаем ползунок против «Разрешения приложений». Если уведомление появляется при запуске определенного приложения, тогда войдите в его сведения в Диспетчере приложений и там в пункте «Разрешения» активируйте или снимите все ползунки.

Permissions controller для чего это приложение

Уведомление App Permission Management is running

Как инсталлировать в смартфон

Распространяется «App Permissions Manager» официально через Google Play. Он совершенно бесплатный, поэтому нет смысла скачивать его с других источников в интернете. Сам процесс установки ничем не отличается от стандартного приложения, всего в пару кликов все уже будет инсталлировано к вам в телефон. Аналогов также предостаточно в Маркете, но качество их не всегда лучшее.

Permission Control: что это за программа на Андроид

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

Читайте также:
Что за программа mount blade

Что это

Permissions controller для чего это приложение

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

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

Как отключить

Permissions controller для чего это приложение

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

Владельцу гаджета необходимо перейти в раздел «Настройки». Следующим шагом является вкладка «Безопасность», где необходимо перейти в раздел «Права доступа» или «Права доступа» (в зависимости от версии, формулировка может отличаться!). Последнее действие — «Отключить».

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

Permissions controller для чего это приложение

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

Контроллер разрешений на Android: что это такое, как отключить?

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

Что это такое

Permissions controller для чего это приложение

Контроллер разрешений (Permission Control) – это служба на телефонах Android, которая следит за разрешениями, выданными различным приложениям. Главной задачей утилиты является не дать другим приложениям получить доступ к данным смартфона без разрешения пользователя .

Во время установки практически любого софта на экране смартфона появляется уведомление. Во всплывающем сообщении обычно просят предоставить доступ к:

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

Permissions controller для чего это приложение

На заметку! Периодически на экране можно увидеть уведомления о работе Permission Control. Это говорит о том, что она выполнила блокировку получения прав другим приложением.

Инструкция для отключения

Для отключения службы на телефоне Android требуется:

После деактивации утилита не удаляется с мобильного устройства. Её всегда можно активировать аналогичным образом.

Частые причины деактивации:

Важно! Несмотря на возможность отключения, разработчики не советуют прибегать к таким мерам.

Permissions controller для чего это приложение

Почему не стоит отключать

Если пользователь отключит службу Permission Control, то она не сможет защитить устройство от неправомерного получения доступа к данным смартфона. Приложения смогут без разрешения активировать нужные им функции и настройки. Это может негативно сказаться на работоспособности телефона.

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

Источник: tanchiki-dendy.ru

Android runtime permissions. Почему, зачем и как

Часто при установке приложения на Android нам приходилось видеть, что оно запрашивает какое-то немыслимое количество разрешений. Например:

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

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

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

Общая информация

Разрешения делятся на два типа (есть и другие, но они нас не интересуют):

  • обычные (normal);
  • опасные (dangerous).

Можно увидеть, что доступ к интернету не считается опасным. Все, кто использует рекламу в своих программах, могут вздохнуть с облегчением: отключить её, просто отобрав разрешение, не получится (все еще можно просто отключить интернет, но факт остается фактом).

Взаимодействие с пользователем

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

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

  • важные разрешения запрашиваем при запуске, вторичные — при первом использовании соответствующей функции;
  • если понять, зачем нужно разрешение тяжело, предоставляем объяснение.

Код

Логичным вопросом будет: а что же произойдет, если запустить ваше неадаптированное под runtime разрешения приложение на Android Marshmallow? Ответ зависит от того осмелились ли вы изменить targetSdk на 23 версию (compileSdk и buildTools нас в данном случае не интересуют). Если да, то у меня не лучшие новости для вас: очень вероятно, что вы получите SecurityException.

Это не обязательно будет так, возможно где-то вы получите null вместо запрошенной информации, но вероятность далеко не нулевая. Если же вы используете targetSdk версии 22 и ниже, то все разрешения будут, как и прежде выданы приложению при установке, включая опасные. Это не отменяет того, что пользователь может отозвать любое из них после установки. При этом он получит предупреждение, что приложение не адаптировано под runtime разрешения и может работать некорректно. Насколько некорректно оно будет работать, полностью зависит от вас, то есть если вы проверяли возвращаемые значения на null или были готовы к нулю вместо вменяемого значения, то ничего страшного не произойдет: приложение просто не будет полноценно функционировать (что выглядит все же лучше чем падение из-за NullPointerException).

Но даже если у вас все хорошо с проверками и нет возможности заниматься внедрением новых возможностей, стоит перепроверить, все ли правильно работает, потому что иногда можно получить null не там, где его ожидаешь. Так, например, при использовании Environment.getExternalStorageDirectory() без наличия разрешения из группы Storage, мы получим File, но list() вернет нам заветный null. В документации такой исход описан, но для ситуации, когда File не является директорией. Так что проверка в любом случае лишней не будет.

Есть возможность добавить разрешение только для Android M и выше. Для это в манифесте нужно использовать новый тег (ранее называвшийся ). Его синтаксис аналогичен обычному . Это может быть полезно, если вы хотите добавить в существующее приложение возможность, которая требует дополнительного разрешения. Как вы помните, если новая версия программы требует дополнительных прав, пользователь должен вручную подтвердить ее обновление. Этого можно избежать, если новая функция не очень важна, отключив ее для более ранних версий системы, используя описанный ранее тег. В таком случае это разрешение будет вовсе отсутствовать.

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

Читайте также:
Программа riot что это

adb shell pm grant adb shell pm revoke

И еще несколько полезных команд, смысл которых ясен из названия:

adb shell pm reset-permissions adb shell pm list permission-groups adb shell pm list permissions

Перейдем к непосредственной реализации (предварительно не забудем обновить compileSdkVersion и targetSdkVersion до версии 23).

До момента, когда Marshmallow станет минимальной версией андроида для ваших приложений, еще далеко, поэтому нужно позаботиться об обратной совместимости. Конечно, можно делать проверки версии sdk, но зачем, если все реализовано за нас в support library v4 (ActivityCompat) и v13 (FragmentCompat). Если все же вам понадобятся оригинальные методы, то найти их не составит труда.

Во всех примерах используется ActivityCompat, так как они были сделаны для activity. Для fragment нужно использовать FragmentCompat. Если вы по какой-то причине не используете activity и fragment из support библиотек, то вам нужно реализовать интерфейс ActivityCompat.OnRequestPermissionsResultCallback или FragmentCompat.OnRequestPermissionsResultCallback соответственно.

Каждый раз, когда мы хотим использовать метод, требующий опасного разрешения, необходимо проверить есть ли оно у нас. Для этого используем метод ContextCompat.checkSelfPermission(Context context, String permission), который возвращает нам одно из int значений: PackageManager.PERMISSION_GRANTED в случае если разрешение есть или PackageManager.PERMISSION_DENIED если его нет. Именем разрешения является одна из констант класса Manifest.permission.

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

Стоит упомянуть, что если разрешения находятся в одной permission group, то запросить достаточно одно из них, так как все остальные элементы этой группы станут также доступны. Но так делать не нужно. Потому что в будущем состав групп может поменяться, поэтому при запросе разрешений не нужно делать предположений относительно того находятся ли они в одной группе или нет.

UPD будто в подтверждение предыдущего параграфа, начиная с Android 8.0 разрешения из одной permission group не выдаются сразу — каждое разрешение нужно запрашивать отдельно, но все разрешения из одной группы будут выданы автоматически, без участия пользователя при первом же их запросе.

UPD2 это же поведение было замечено на Android 7.0 — если часть разрешений из группы выдана (не могу сказать с уверенностью, имеет ли значение какие именно), то остальные будут выдаваться по запросу сразу же без показа диалога. Это может вызвать проблемы, если ваше приложение объясняет пользователю зачем ей нужно то или иное разрешение еще до его запроса. В реальной жизни такое редко когда может возникнуть (только при использовании adb комманд), но стоит учитывать это при отладке приложения.

Для запроса используется метод ActivityCompat.requestPermissions(Activity activity, String[] permissions, int requestCode). Массив permissions соответственно содержит названия разрешений, которые вы хотите запросить. Отсюда видно, что одновременно можно запрашивать несколько разрешений. requestCode — значение, по которому в дальнейшем можно будет определить, на какой запрос разрешения вам пришел ответ подобно тому как мы получаем результат от activity, используя startActivityForResult. Кстати, если посмотреть на код requestPermission, то обнаружится, что это всего лишь особая версия startActivityForResult.

public void requestMultiplePermissions() < ActivityCompat.requestPermissions(this, new String[] < Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_SMS >, PERMISSION_REQUEST_CODE); >

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

Размер массива grantResults проверяется для того, чтобы удостовериться, что запрос разрешения не был прерван (в этом случае permissions и grantResults не будут содержать элементов). Такую ситуацию следует рассматривать не как запрет разрешения, а как отмену запроса на него.

Never ask again

Одной из проблем может стать опция “Never ask again”, которая появляется при повторном запросе разрешения, после того как пользователь уже отказал ранее. Как видно из названия, при её выборе диалог запроса не будет больше появляться. shouldShowRequestPermissionRationale будет выдавать false, а в onRequestPermissionsResult будет получен результат PackageManager.PERMISSION_DENIED. И получим разрешение мы, только если включить его непосредственно через настройки приложения в разделе Permissions.

Что с этим можно сделать? В первую очередь, конечно, сообщить пользователю, что для выполнения действия нет нужных прав. Далее возможным действием может быть предложение перейти в настройки и предоставить это разрешение вручную. Не лучший вариант, но лучше чем ничего. Реализовать это можно вновь с использованием Snackbar с кнопкой действия.

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

В примере используются startActivityForResult и onActivityResult чтобы определить, что пользователь вернулся из activity настроек обратно в приложение и попробовать выполнить действие, которое нельзя было сделать без нужного разрешения. В методе showExtDirFilesCount нужно снова проверить есть ли разрешение для уверенности, что пользователь его все-таки выдал.

Здесь может возникнуть ситуация, которая не особенно мешает, если вы используете Snackbar для показа rationale, но портит UX, если вы решили использовать диалоги (причины этого решения мы не затрагиваем). А именно двойное появление rationale, до запроса разрешения и после него. Как это может произойти? У нас всего два метода, по которым мы можем судить о состоянии разрешения.

Проблема в том, что до запроса разрешения ситуация, когда мы еще никогда не запрашивали это разрешение, и ситуация, когда пользователь ранее выбрал “Never ask again”, абсолютно одинаковы по значениям. А именно checkSeflPermission возвращает нам PERMISSION_DENIED, a shouldShowRequestPermissionRationale — false.

Значит, показывать диалог для открытия настроек мы будем в onRequestPermissionsResult, где значение shouldShowRequestPermissionRationale точно будет разным для этих двух ситуаций. Все отлично? Не совсем. В этом callback’e никак нельзя определить была ли показана rationale или нет.

Поэтому если вы показываете причину запроса, а далее пользователь просит больше его не спрашивать об этом разрешении, после нажатия на кнопку DENY он получит очередной rationale диалог, приглашающий его в настройки программы. Хорошие программы так себя не ведут.

Что делать в такой ситуации? В сети есть пара не очень красивых решений: одно из них — сохранять в SharedPreferences информацию о том имеется ли разрешение или нет, другое — хранить флаг о том была показана rationale или нет внутри класса. Первое решение не хорошо тем, что пока приложение не работает, пользователь может изменить настройки разрешений и информация в preferences будет неактуальной. Второй же способ не особо красивый.

Хорошим вариантом (на мой взгляд) будет завести два requestCode для каждого запроса, один для использования в rationale другой в остальных случаях. Этот способ так же не идеален и не особенно красив, но помогает придерживаться существующих методов, не внося ничего нового.

Intent

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

В качестве самого показательного примера чаще всего вспоминают камеру. Используйте стандартное приложение камеры (или другие приложения, умеющие это делать), если вам нужно всего лишь сделать фотографию без какой-то особой логики. В этом вам помогут Intent’ы (подробнее).

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

Заключение

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

  • Java
  • Разработка мобильных приложений
  • Разработка под Android

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru