Solicitar permisos en Wear OS

La solicitud de permisos en Wear OS es similar a la solicitud de permisos en dispositivos móviles, con algunos casos de uso adicionales. En este documento, se asume que comprendes el funcionamiento de los permisos de Android. Si no es así, consulta el modo en que funcionan los permisos en Android.

Al igual que en una app para dispositivos móviles, el usuario debe otorgar permisos a una app para Wear para acceder a ciertas funcionalidades. En tus apps para Wear, proporciona funcionalidades significativas sin solicitar ningún permiso.

Situaciones de permisos

Hay varias situaciones que puedes atravesar cuando solicitas permisos peligrosos en Wear OS:

  • La app para Wear solicita permisos para una app que se ejecuta en el dispositivo wearable.

  • La app para Wear solicita permisos para una app que se ejecuta en el teléfono.

  • La aplicación para teléfonos solicita permisos para una app que se ejecuta en el dispositivo wearable.

  • La aplicación para teléfonos solicita varios permisos que se pueden usar solo mientras el dispositivo wearable está conectado.

Para ver todas estas situaciones en una app funcional, consulta el ejemplo ExcersizeSampleCompose en GitHub.

En las siguientes secciones, se explican cada una de estas situaciones. Para obtener información detallada sobre la solicitud de permisos, consulta la sección Patrones de solicitud de permisos.

La app para Wear solicita permiso para wearable

Cuando la app para Wear solicita un permiso para una app que se ejecuta en el dispositivo wearable, el sistema muestra un diálogo para informar al usuario sobre ese permiso. En tu app, solicita permisos solo cuando sea claro para el usuario el motivo por el que se necesitan los permisos para realizar una operación determinada.

Consulta los principios de permisos para asegurarte de brindarles la mejor experiencia a los usuarios y no olvides consultar shouldShowRequestPermissionRationale() y brindar información adicional si es necesario.

Si una app o una cara de reloj solicita más de un permiso a la vez, las solicitudes aparecen una después de otra.

Varias pantallas de permisos, una después de otra.
Figura 1: Pantallas de permisos que aparecen en sucesión

Una app para Wear solicita permiso de teléfono

Cuando la app para Wear solicita un permiso de teléfono (por ejemplo, cuando una app para wearables desea acceder a fotos o datos sensibles en la versión para dispositivos móviles de la app), la app para Wear debe solicitar al usuario que acepte el permiso en el teléfono. Allí, la aplicación para teléfonos puede proporcionar información adicional al usuario con una actividad. En la actividad, incluye dos botones: uno para otorgar el permiso y otro para denegarlo.

La app para Wear solicita al usuario que otorgue el permiso en el teléfono.
Figura 2: Solicitud para que el usuario otorgue el permiso en el teléfono

La aplicación para teléfonos solicita un permiso para wearable

Si el usuario usa una aplicación para teléfonos y esta solicita un permiso para wearable (por ejemplo, para precargar música en caso de que el teléfono se desconecte) la app debe solicitar al usuario que acepte el permiso en el dispositivo wearable. La versión de la app para wearables usa el método requestPermissions() para activar el diálogo de permisos del sistema.

La app para teléfono solicita al usuario que otorgue el permiso en el wearable.
Figura 3: Solicitud para que el usuario otorgue el permiso en el wearable

La aplicación para teléfonos solicita varios permisos a la vez

Figura 4: Diálogo de permisos que usa el perfil de un dispositivo complementario para solicitar varios permisos en una sola solicitud.

Las apps de socios en Android 12 (nivel de API 31) y versiones posteriores pueden usar perfiles de dispositivos complementarios cuando se conectan a un reloj. Usar un perfil simplifica el proceso de inscripción, ya que se agrupa en un solo paso el otorgamiento de un conjunto de permisos específicos del tipo de dispositivo.

Los permisos agrupados se le otorgan a la app complementaria una vez que se conecta el dispositivo y solo duran el tiempo en el que esté asociado. Borrar la app o quitar la asociación elimina los permisos. Para obtener más información, consulta AssociationRequest.Builder.setDeviceProfile().

Patrones de solicitud de permisos

Hay diferentes patrones para solicitar permisos de los usuarios. En orden de prioridad, son los siguientes:

  • Solicitud en contexto: Cuando el permiso sea claramente necesario para una funcionalidad específica, pero no sea necesario para que la app pueda ejecutarse.

  • Información en contexto: Cuando el motivo para solicitar el permiso no sea evidente y el permiso no sea necesario para que la app pueda ejecutarse.

Estos patrones se explican en las siguientes secciones.

Solicitud en contexto

Solicita permisos cuando sea claro para el usuario el motivo por el que se los necesita para realizar una operación determinada. Es más probable que los usuarios otorguen un permiso cuando comprendan la conexión con la función que quieran usar.

Por ejemplo, una app podría requerir la ubicación del usuario para mostrar lugares de interés cercanos. Cuando el usuario toca para buscar sitios cercanos, la app puede solicitar de inmediato el permiso de ubicación, ya que hay una relación clara entre la búsqueda de lugares cercanos y la necesidad del permiso de ubicación. La obviedad de esta relación evita la necesidad de que la app muestre pantallas informativas adicionales.

La app solicita permiso cuando la necesidad es obvia.
Figura 5: Solicitud de un permiso en contexto.

Información en contexto

En la figura 6, se muestra un ejemplo del informe en contexto. La app no requiere permisos para poder iniciar el cronómetro, pero una indicación informativa integrada muestra que parte de la actividad (detección de ubicación) está bloqueada. Cuando el usuario presiona la indicación, aparece una pantalla de solicitud de permisos que le permite desbloquear la detección de ubicación.

Usa el método shouldShowRequestPermissionRationale() para ayudar a tu app a decidir si debe proporcionar más información. Para obtener más detalles, consulta Cómo solicitar permisos de la app. También puedes examinar cómo la aplicación de ejemplo de la bocina en GitHub controla la forma de mostrar información.

Cuando se presenta la necesidad de un permiso, la app explica por qué este se necesita.
Figura 6: Información en contexto.

Control de los rechazos

Si un usuario rechaza un permiso solicitado que no es crítico para una actividad prevista, no evites que den continuidad a la actividad. Si la denegación del permiso inhabilita ciertas partes de la actividad, proporciona comentarios visuales e interactivos.

En la figura 7, se muestra el uso de un ícono de bloqueo para indicar que una función está bloqueada porque el usuario no otorgó el permiso para usarla.

Cuando el usuario no otorga un permiso, aparece un ícono de bloqueo al lado de la característica asociada.
Figura 7: Ícono de bloqueo que muestra que una función está bloqueada porque se denegó el permiso.

Cuando aparezca por segunda vez un diálogo de permiso para wearable previamente denegado, se incluirá la opción para denegar y no volver a mostrar. Si el usuario selecciona esta opción, la única manera de otorgar este permiso en el futuro será mediante la app de Configuración del wearable.

El sistema ofrece detener la solicitud de permisos.
Figura 8: El usuario puede acceder a una solicitud de permiso que se denegó dos veces mediante Configuración.

Obtén más información para controlar la denegación de permisos.

Permisos para servicios

Solo una actividad puede llamar al método requestPermissions(), de modo que, si el usuario interactúa con tu app a través de un servicio (por ejemplo, mediante una cara de reloj), el servicio debe abrir una actividad antes de solicitar el permiso. En esta actividad, brinda información adicional sobre el motivo por el que se necesita el permiso.

En general, no solicites permisos para una cara de reloj. En cambio, implementa una complicación y permite que el usuario elija los datos que se mostrarán a través de esta.

Configuración

Un usuario puede cambiar los permisos de una app para Wear en Configuración en cualquier momento. Cuando el usuario intenta realizar algo que requiere un permiso, primero llama al método checkSelfPermission() para comprobar si la app tiene permiso para realizar la operación.

Realiza esta verificación incluso si el usuario otorgó el permiso con anterioridad, ya que pudo haberlo revocado posteriormente.

El usuario puede cambiar los permisos con la app de Configuración.
Figura 9: El usuario puede cambiar los permisos con la app de Configuración.