Разрешения во время выполнения

    Всем доброго!

    Вот мы и добрались теперь и до мобильных: стартовал набор на курс «Разработчик Android». Очередная небольшая веха и совершенно новое направление. Наш преподаватель — Семён Пилунц делится по этому поводу некоторыми своими размышлениями о разреще.

    Если ваше приложение будет работать на Android 6.0 (API-уровне 23) или выше, и вам требуются некоторые особые разрешения, то вам нужно будет проделать еще немного работы, чтобы использовать их. Начиная с Marshmallow, пользователи предоставляют разрешения для приложений во время работы приложения, а не при установке приложения (в версиях, предшествующих Marshmallow, вы можете просто объявить, какое разрешение вы будете использовать в файле манифеста). Новая концепция была названа разрешениями во время выполнения. Этот подход упрощает процесс установки приложения, поскольку пользователю не нужно предоставлять разрешения при установке или обновлении приложения. Она также дает пользователю больше контроля над функциональностью приложения; например, пользователь может выбрать доступ к камере в приложения для съёмки, но не к местоположению устройства. Пользователь может отменить разрешения в любое время, перейдя на экран настроек приложения. Идея, лежащая в их основе, заключается в том, чтобы информировать пользователя о том, какие разрешения вы будете использовать, потому что многие приложения используют много ненужных разрешений.



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

    Системные разрешения делятся на две категории: обычные и опасные:

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


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

    • Если устройство работает под управлением Android 5.1 или ниже, или целевой SDK вашего приложения составляет 22 или ниже: если вы укажете опасное разрешение в манифесте, пользователь должен предоставить разрешение при установке приложения; если он не предоставляют разрешения, система вообще не установит приложение.
    • Если устройство работает под управлением Android 6.0 или выше, а целевой SDK вашего приложения — 23 или выше: приложение должно отображать разрешения в манифесте, и должно запрашивать каждое опасное разрешение, в котором оно нуждается, пока приложение работает. Пользователь может предоставлять или отклонять каждое разрешение, и приложение может продолжать работать с ограниченными возможностями, даже если пользователь отклоняет запрос на разрешение.


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

    Чтобы проверить, есть ли у вас разрешение, вызовите метод ContextCompat.checkSelfPermission (). Например, этот фрагмент показывает, как проверить, имеет ли действие разрешение на запись в календарь:

    *ФРАГМЕНТ КОДА>*

    Если приложение имеет разрешение, метод возвращает PackageManager.PERMISSION_GRANTED, и приложение может продолжить операцию. Если приложение не имеет разрешения, метод возвращает PERMISSION_DENIED, и приложение должно явно запрашивать у пользователя разрешение.

    Если ваше приложение еще не имеет необходимого разрешения, приложение должно вызвать один из методов requestPermissions (), чтобы запросить соответствующие разрешения. Ваше приложение передает необходимые ему разрешения, а также код целочисленного запроса, который вы указываете для идентификации этого запроса на разрешение. Что такое код запроса? Когда мы обрабатываем реакцию пользователей на наш запрос, мы можем попросить несколько разрешений несколько раз в одном и том же действии, поэтому нам нужно выбрать эти запросы, и мы делаем это по коду запроса. Итак, как мы обрабатываем ответы пользователей на наши запросы? Когда ваше приложение запрашивает разрешения, система предоставляет пользователю диалоговое окно. Когда пользователь отвечает, система вызывает метод onRequestPermissionsResult () вашего приложения, передавая ему ответ пользователя. Ваше приложение должно переопределить этот метод, чтобы узнать, было ли предоставлено разрешение. Обратный вызов передается тем же кодом запроса, который вы передали requestPermissions (). Когда система просит пользователя предоставить разрешение, пользователь имеет возможность сообщить системе не запрашивать это разрешение снова. В этом случае, в любое время, когда приложение использует requestPermissions (), чтобы снова запросить это разрешение, система немедленно отклоняет запрос. Система вызывает ваш метод обратного вызова onRequestPermissionsResult () и передает PERMISSION_DENIED, так же, как если бы пользователь явно отклонил ваш запрос. Это означает, что когда вы вызываете requestPermissions (), вы не можете предположить, что имело место какое-либо прямое взаимодействие с пользователем.

    THE END

    Как всегда ждём ваши отзывы и вопросы здесь или на открытом уроке, где ознакомит разберём знакомство со средой разработки Android Studio и Android Virtual Device (AVD) Manager и ее возможностями.
    • +10
    • 2,2k
    • 5
    Отус 247,32
    Профессиональные онлайн-курсы для разработчиков
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 5
    • 0
      Статья мягко говоря сыровата
      • 0
        Это, скорее, часть один. Дальше чуть больше развернём тему. Ну и плюс поделимся другим интересным.
        • 0
          А что мешало в одной статье всё написать отказавшись, например, от большей части «воды»?
          • 0
            материала мало, последний абзац просто не отформатирован, куда-то делись фрагменты кода. Вы читали перед отправкой или нет? Как я должен захотеть попасть к вам на курс после этого?
        • +1
          Где-то пару лет назад была тут от меня статья habrahabr.ru/post/278945 раскрывает все довольно широко :)

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое