Запрос разрешений на Wear OS

ключевые слова: одежда, разрешения, collection_guideslandingwear image_path: images/training/wear/multiple_permissions.png

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

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

Сценарии разрешений

При запросе опасных разрешений в Wear OS вы можете столкнуться с несколькими сценариями:

  • Приложение Wear запрашивает разрешения у приложения, работающего на носимом устройстве.

  • Приложение Wear запрашивает разрешения у приложения, работающего на телефоне.

  • Приложение на телефоне запрашивает разрешения у приложения, работающего на носимом устройстве.

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

Чтобы увидеть все эти сценарии в работающем приложении, ознакомьтесь с примером ExerciseSampleCompose на GitHub.

В следующих разделах описан каждый из этих сценариев. Более подробную информацию о запросе разрешений см. в разделе « Шаблоны запросов разрешений» .

Приложение Wear запрашивает разрешение у носимого устройства.

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

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

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

Множество экранов с запросами разрешений, один за другим.
Рисунок 1. Экраны запроса разрешений, появляющиеся последовательно.

Приложение Wear запрашивает разрешение у телефона.

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

Приложение Wear перенаправляет пользователя к телефону для предоставления разрешения.
Рисунок 2. Отправьте пользователя на телефон для предоставления разрешения.

Приложение для телефона запрашивает разрешение у носимого устройства.

Если пользователь находится в мобильном приложении, и приложению требуется разрешение для носимого устройства — например, для предварительной загрузки музыки на случай отключения телефона, — мобильное приложение перенаправляет пользователя на носимое устройство для принятия разрешения. Носимая версия приложения использует метод requestPermissions() для запуска диалогового окна запроса системных разрешений.

Мобильное приложение перенаправляет пользователя на носимое устройство для предоставления разрешения.
Рисунок 3. Отправьте пользователя на носимое устройство для предоставления разрешения.

Мобильное приложение запрашивает сразу несколько разрешений.

Рисунок 4. Диалоговое окно разрешений, использующее профиль вспомогательного устройства для запроса нескольких разрешений в одном запросе.

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

Встроенные разрешения предоставляются сопутствующему приложению после подключения устройства и действуют только до тех пор, пока устройство связано с ним. Удаление приложения или разрыв связи приводит к удалению разрешений. Подробнее см. AssociationRequest.Builder.setDeviceProfile() .

Шаблоны запросов на разрешение

Существуют различные схемы запроса разрешений у пользователей. В порядке приоритета они следующие:

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

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

Эти закономерности объясняются в следующих разделах.

Задайте вопрос в контексте.

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

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

Приложение запрашивает разрешение только тогда, когда это явно необходимо.
Рисунок 5. Запрос разрешения в контексте.

Обучение в контексте

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

Используйте метод shouldShowRequestPermissionRationale() , чтобы помочь вашему приложению решить, следует ли предоставлять дополнительную информацию. Дополнительные сведения см. в разделе «Запрос разрешений приложения» . В качестве альтернативы вы можете изучить, как работает демонстрационное приложение для диктора на GitHub при отображении информации .

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

Обработка отклонения

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

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

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

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

Система предлагает прекратить запрашивать разрешение.
Рисунок 8. Пользователь может получить доступ к запросу на разрешение, который ранее дважды был отклонен, через раздел «Настройки».

Узнайте больше о том, как обрабатывать отказ в предоставлении доступа .

Разрешения на предоставление услуг

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

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

Настройки

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

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

Пользователь может изменить разрешения через приложение «Настройки».
Рисунок 9. Пользователь может изменить разрешения с помощью приложения «Настройки».
{% verbatim %} {% endverbatim %} {% verbatim %} {% endverbatim %}