Запрос разрешений в Wear OS аналогичен запросу разрешений в мобильных приложениях, но с несколькими дополнительными вариантами использования. В этом документе предполагается, что вы понимаете, как работают разрешения Android. Если нет, ознакомьтесь с тем, как работают разрешения на Android .
Как и в мобильном приложении, пользователь должен предоставить приложению Wear разрешения на доступ к определенным функциям. Обеспечьте значимую функциональность в своих приложениях Wear, не запрашивая никаких разрешений.
Сценарии разрешений
Существует несколько сценариев, с которыми вы можете столкнуться при запросе опасных разрешений в Wear OS:
Приложение Wear запрашивает разрешения для приложения, работающего на носимом устройстве.
Приложение Wear запрашивает разрешения для приложения, работающего на телефоне.
Приложение телефона запрашивает разрешения для приложения, работающего на носимом устройстве.
Приложение телефона запрашивает несколько разрешений, которые можно использовать только при подключенном носимом устройстве.
Чтобы увидеть все эти сценарии в работающем приложении, просмотрите образец ExcersizeSampleCompose на GitHub.
В следующих разделах описывается каждый из этих сценариев. Более подробную информацию о запросе разрешений см. в разделе Шаблоны запросов разрешений .
Приложение Wear запрашивает разрешение на носимое устройство
Когда приложение Wear запрашивает разрешение для приложения, работающего на носимом устройстве, система отображает диалоговое окно с запросом у пользователя этого разрешения. В вашем приложении запрашивайте разрешения только тогда, когда пользователю понятно, почему разрешения необходимы для выполнения определенной операции.
Ознакомьтесь с принципами разрешений , чтобы убедиться, что вы обеспечиваете наилучшие условия для своих пользователей, и не забудьте проверить shouldShowRequestPermissionRationale()
и предоставить дополнительную информацию по мере необходимости.
Если приложению или циферблату требуется несколько разрешений одновременно, запросы на разрешения отображаются один за другим.
![Несколько экранов разрешений, один за другим.](https://developer.android.com/static/images/training/wear/multiple_permissions.png?hl=ru)
Приложение Wear запрашивает разрешение телефона
Когда приложение Wear запрашивает разрешение телефона (например, носимое приложение хочет получить доступ к фотографиям или другим конфиденциальным данным в мобильной версии приложения), приложение Wear должно отправить пользователя на телефон, чтобы принять разрешение. Там приложение для телефона может предоставить пользователю дополнительную информацию, используя действие. Включите в действие две кнопки: одну для предоставления разрешения и одну для его отклонения.
![Приложение Wear отправляет пользователя на телефон, чтобы предоставить разрешение.](https://developer.android.com/static/images/training/wear/open_on_phone.png?hl=ru)
Приложение для телефона запрашивает разрешение на носимое устройство
Если пользователь находится в приложении для телефона и приложению требуется разрешение на носимое устройство (например, для предварительной загрузки музыки в случае отключения телефона), приложение для телефона отправляет пользователя на носимое устройство для принятия разрешения. Носимая версия приложения использует метод requestPermissions()
для вызова диалогового окна системных разрешений.
![Приложение для телефона отправляет пользователя на носимое устройство для предоставления разрешения.](https://developer.android.com/static/images/training/wear/phone_requests_wear.png?hl=ru)
Приложение для телефона запрашивает несколько разрешений одновременно
![](https://developer.android.com/static/images/training/wear/companion-device-profile.png?hl=ru)
Партнерские приложения на Android 12 (уровень API 31) и выше могут использовать профили сопутствующих устройств при подключении к часам. Использование профиля упрощает процесс регистрации, объединяя предоставление набора разрешений для конкретного типа устройства в один шаг.
Пакетные разрешения предоставляются сопутствующему приложению после подключения устройства и действуют только до тех пор, пока устройство связано. Удаление приложения или удаление связи приводит к удалению разрешений. Дополнительные сведения см. в AssociationRequest.Builder.setDeviceProfile()
.
Шаблоны запросов разрешений
Существуют разные шаблоны запроса разрешений у пользователей. В порядке приоритета это:
Спрашивайте в контексте, когда разрешение очевидно необходимо для определенной функции, но не является необходимым для запуска приложения в целом.
Обучайте в контексте, когда причина запроса разрешения не очевидна и разрешение не требуется для запуска приложения в целом.
Эти шаблоны объяснены в следующих разделах.
Спросите в контексте
Запрашивайте разрешения, когда пользователю понятно, почему разрешение необходимо для выполнения определенной операции. Пользователи с большей вероятностью дадут разрешение, если поймут, что оно связано с функцией, которую они хотят использовать.
Например, приложению может потребоваться указать местоположение пользователя, чтобы показать близлежащие достопримечательности. Когда пользователь нажимает кнопку для поиска мест поблизости, приложение может немедленно запросить разрешение на определение местоположения, поскольку существует четкая связь между поиском мест поблизости и необходимостью разрешения на определение местоположения. Очевидность этой взаимосвязи делает ненужным отображение экранов дополнительного образования в приложении.
![Приложение запрашивает разрешение, когда это очевидно необходимо.](https://developer.android.com/static/images/training/wear/ask_in_context.png?hl=ru)
Обучение в контексте
На рисунке 6 показан пример контекстного обучения. Приложению не требуются разрешения для запуска таймера, но встроенная обучающая подсказка показывает, что часть действия — определение местоположения — заблокирована. Когда пользователь нажимает на сигнал, появляется экран запроса разрешения, позволяющий пользователю разблокировать определение местоположения.
Используйте метод shouldShowRequestPermissionRationale()
чтобы помочь вашему приложению решить, предоставлять ли дополнительную информацию. Дополнительные сведения см. в разделе Запрос разрешений для приложения . Кроме того, вы можете проверить, как пример приложения динамика на GitHub обрабатывает отображение информации .
![Когда возникает необходимость в разрешении, приложение объясняет, почему оно необходимо.](https://developer.android.com/static/images/training/wear/educate_in_context.png?hl=ru)
Обработка отклонения
Если пользователь отказывает в запрошенном разрешении, которое не имеет решающего значения для предполагаемого действия, не блокируйте ему продолжение действия. Если определенные части действия отключены из-за отказа в разрешении, предоставьте наглядную и полезную обратную связь.
На рис. 7 показано использование значка замка, указывающего на то, что функция заблокирована, поскольку пользователь не предоставил разрешение на ее использование.
![Когда пользователь отказывает в разрешении, рядом со связанной функцией отображается значок замка.](https://developer.android.com/static/images/training/wear/deny.png?hl=ru)
Когда диалоговое окно разрешения на носимое устройство, которому ранее было отказано, появляется во второй раз, оно включает параметр «Запретить, больше не показывать» . Если пользователь выберет этот вариант, то единственный способ предоставить ему это разрешение в будущем — это зайти в приложение «Настройки» носимого устройства.
![Система предлагает прекратить запрашивать разрешение.](https://developer.android.com/static/images/training/wear/ask_again.png?hl=ru)
Узнайте больше о том, как справиться с отказом в разрешении .
Разрешения на услуги
Только действие может вызывать метод requestPermissions()
, поэтому, если пользователь взаимодействует с вашим приложением с помощью службы (например, через циферблат), служба должна открыть действие, прежде чем запрашивать разрешение. В этом задании предоставьте дополнительную информацию о том, почему необходимо разрешение.
В общем, не запрашивайте разрешения для циферблата. Вместо этого реализуйте усложнение и позвольте пользователю выбирать, какие данные отображать с помощью этого усложнения.
Настройки
Пользователь может изменить разрешения приложения Wear в настройках в любое время. Когда пользователь пытается сделать что-то, требующее разрешения, сначала вызовите метод checkSelfPermission()
, чтобы узнать, есть ли у приложения разрешение на выполнение этой операции.
Выполните эту проверку, даже если пользователь ранее предоставил разрешение, поскольку впоследствии пользователь мог его отозвать.
![Пользователь может изменить разрешения через приложение «Настройки».](https://developer.android.com/static/images/training/wear/for_settings.png?hl=ru)
Рекомендуется для вас
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Запросить разрешения во время выполнения
- Разрешения Bluetooth
- Общайтесь в фоновом режиме