Apps independientes para Wear OS

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

La recomendación predeterminada es que una app para Wear OS funcione independientemente de un teléfono para que los usuarios puedan completar tareas en un reloj sin acceder a un teléfono con Android o iOS. Sin embargo, si tu app requiere una interacción telefónica para que la app de reloj funcione, debes marcar tu app de Wear OS como dependiente.

Planifica tu app

Puedes usar Android App Bundle a fin de generar automáticamente APKs optimizados para la configuración del dispositivo de cada usuario en la misma ficha de aplicación. Esto permite a los usuarios descargar solo el código y los recursos que necesitan para ejecutar tu app.

A fin de obtener información sobre cómo configurar tu app para su distribución mediante Google Play Store, consulta Cómo empaquetar y distribuir apps de Wear OS y la Guía de introducción de Android App Bundle.

Por lo general, el nivel mínimo de API para una app de Wear OS es 25 (Wear OS 2.0). El nivel de API de objetivo debe ser 28 o un nivel superior (más información). Te recomendamos que configures targetSdkVersion en el nivel de API 30 (Wear OS 3) para asegurarte de que tu app funcione bien en la versión más reciente de la plataforma.

Para obtener información sobre las solicitudes de red y el acceso a redes de ancho de banda alto, consulta Acceso a la red y sincronización en Wear OS.

Define una app como app para Wear OS

Debes definir la etiqueta <uses-feature> en el archivo de manifiesto de Android en tu app. Por ejemplo, indica que es una app para reloj, como se muestra en el siguiente ejemplo:

  <manifest>
  ...
  <uses-feature android:name="android.hardware.type.watch" />
  ...
  </manifest>
  

Identifica una app como independiente

Las apps para Wear OS deben establecer el elemento meta-data com.google.android.wearable.standalone como true o false en el archivo de manifiesto de Android.

El elemento indica si tu app para reloj es una app independiente que no requiere otro dispositivo para ofrecer su funcionalidad principal. En ese caso, debes establecer la configuración del elemento en true.

Una app para reloj puede ser de una de estas maneras:

  • Independiente: Es una app completamente independiente que no requiere una app para teléfonos a fin de ofrecer sus funciones principales, incluida la autenticación. Una app para teléfonos solo brindaría funciones opcionales.
  • No independiente: Es una app dependiente que requiere una app para teléfonos u otro dispositivo a fin de ofrecer sus funciones principales, incluida la autenticación.

Si una app es completamente independiente, se incluye en la categoría independiente. Para indicar esta categorización en Google Play Store, establece el valor del elemento meta-data en true:

<application>
...
  <meta-data
    android:name="com.google.android.wearable.standalone"
    android:value="true" />
...
</application>

Si una app para reloj no es independiente, establece el valor del elemento meta-data anterior en false. Establecer el elemento en false implica que la app para reloj requiere otro dispositivo, pero eso no afectará la promoción de tu app en Google Play Store.

Nota: Incluso si el valor es false, la app de reloj puede instalarse antes que la app para teléfonos. Por lo tanto, si una app de reloj detecta que un teléfono vinculado no tiene la app para teléfonos necesaria, debería solicitarle al usuario que la instale.

Código compartido y almacenamiento de datos

El código se puede compartir entre una app para Wear OS y una app para teléfonos. De manera opcional, el código específico de un factor de forma puede estar en un módulo separado.

Por ejemplo, el código común para la red puede estar en una biblioteca compartida.

Puedes usar las API de almacenamiento estándar de Android a fin de almacenar datos localmente, como lo harías en un teléfono. Por ejemplo, puedes usar las API de SharedPreferences o la biblioteca de persistencias de Room.

Detecta tu app en otro dispositivo

Tu app de reloj puede detectar si la app para teléfonos correspondiente está disponible y viceversa.

Tu app para teléfonos o de reloj puede usar CapabilityClient para anunciar la presencia de la app en un dispositivo vinculado. Puede hacerlo de forma estática y dinámica. Cuando una app está en un nodo de una red de Wear OS del usuario (como en un teléfono, un reloj vinculado o la nube), el elemento CapabilityClient habilita otra app para detectar si está instalada. Para obtener más información, consulta Cómo anunciar funciones.

Si una de tus apps no puede detectar la otra, puedes permitirle a un usuario abrir la ficha de Play Store en su dispositivo remoto. Esta es una solución para las apps de reloj que requieren la app para teléfonos complementaria a fin de funcionar correctamente. Un requisito previo es verificar la existencia de Play Store en el dispositivo remoto.

Ten en cuenta que no todos los teléfonos admiten Play Store (como los iPhones, etcétera).

En esta sección, se describen las prácticas recomendadas para las siguientes situaciones:

  • Tu app para relojes independiente necesita tu app para teléfonos.
  • Tu app para teléfonos necesita tu app de reloj independiente.

Consulta el ejemplo en GitHub que muestra esta funcionalidad. Para obtener más información sobre las clases que se describen a continuación, consulta la referencia de la API de Wear OS. En esa referencia, también se incluye información sobre la clase PhoneDeviceType, que contiene un método getPhoneDeviceType() que habilita tu app de Wear OS para verificar si el teléfono vinculado es un dispositivo Android o iOS.

Especifica nombres de funciones para detectar las apps

En la app que corresponde a cada tipo de dispositivo (reloj o teléfono), especifica una string única para el nombre de la función en el archivo res/values/wear.xml.

Por ejemplo, en el módulo para dispositivos móviles, el archivo wear.xml podría incluir lo siguiente:

<resources xmlns:tools="http://schemas.android.com/tools"
        tools:keep="@array/android_wear_capabilities">
    <string-array name="android_wear_capabilities">
        <item>verify_remote_example_phone_app</item>
    </string-array>
</resources>

En el módulo de Wear OS, el archivo wear.xml debería incluir un valor diferente para el nombre de la función, como el siguiente:

<resources xmlns:tools="http://schemas.android.com/tools"
        tools:keep="@array/android_wear_capabilities">
    <string-array name="android_wear_capabilities">
        <item>verify_remote_example_wear_app</item>
    </string-array>
</resources>

Para obtener más información, consulta Cómo anunciar funciones.

Detecta apps y abre una URL desde un reloj

Tu app de reloj puede detectar si el teléfono vinculado de un usuario tiene tu app para teléfonos:

  1. Usa CapabilityClient a fin de comprobar si la app para teléfonos está instalada en el teléfono vinculado. Para obtener más información, consulta el ejemplo en GitHub.
  2. Si no está instalada tu app para teléfonos, usa el método PhoneDeviceType.getPhoneDeviceType() a fin de verificar el tipo de teléfono.
  3. Si se muestra PhoneDeviceType.DEVICE_TYPE_ANDROID, significa que el teléfono es un teléfono Android. Llama a RemoteActivityHelper.startRemoteActivity() en el dispositivo Wear OS para abrir la tienda de apps en el teléfono. Usa el URI de mercado de la app para teléfonos (que puede diferir del URI de tu teléfono). Por ejemplo, usa un URI de mercado como: market://details?id=com.example.android.wearable.wear.finddevices
  4. Si se muestra PhoneDeviceType.DEVICE_TYPE_IOS, significa que el teléfono es un dispositivo iOS (Play Store no está disponible). A fin de abrir App Store en el iPhone, llama a RemoteActivityHelper.startRemoteActivity() desde el dispositivo para Wear. Puedes especificar la URL de iTunes de tu app, por ejemplo, https://itunes.apple.com/us/app/yourappname. En un iPhone, no es posible determinar desde Wear OS de manera programática si tu app para teléfonos está instalada. Como práctica recomendada, proporciónale un mecanismo al usuario (p. ej., un botón) para abrir App Store manualmente.

Ten en cuenta que, si usas la API de RemoteActivityHelper que se describió con anterioridad, puedes especificar que se abra cualquier URL en el teléfono desde el reloj, y no se requiere ninguna app.

Detalles para detectar el tipo de teléfono vinculado

A continuación se muestra un fragmento que usa el método getPhoneDeviceType() para verificar el tipo de teléfono con el que está vinculado el reloj:

Kotlin

var phoneDeviceType: Int = PhoneDeviceType.getPhoneDeviceType(context)

Java

int phoneDeviceType = PhoneDeviceType.getPhoneDeviceType(context);

El valor que muestra el método getPhoneDeviceType() es uno de los siguientes:

Valor que se muestra Descripción
DEVICE_TYPE_ANDROID El teléfono complementario es un dispositivo Android.
DEVICE_TYPE_IOS El teléfono vinculado es un dispositivo iOS.
DEVICE_TYPE_ERROR_UNKNOWN Se produjo un error al determinar el tipo de teléfono vinculado; debe volver a verificarse más tarde.

Detección de apps desde un teléfono Android

Tu teléfono Android puede detectar si los dispositivos Wear OS de un usuario tienen tu app de reloj de la siguiente manera:

  1. Con NodeClient, busca todos los relojes conectados al teléfono del usuario. Para obtener más información, consulta el ejemplo en GitHub.
  2. Con CapabilityClient, verifica en qué reloj del usuario está instalada tu app.
  3. Si tu app no está instalada en todos los relojes del usuario (compara los resultados del Paso 1 con los del Paso 2), permite que el usuario abra Play Store en los dispositivos Wear OS restantes desde el teléfono a través del método RemoteActivityHelper.startRemoteActivity(). Específicamente, usa el URI de mercado de la app para Wear OS (que puede diferir del URI de la app para teléfonos). Por ejemplo, usa un URI de mercado como: market://details?id=com.example.android.wearable.wear.finddevices

Datos de ubicación para relojes vinculados con iPhones

En el caso de los relojes vinculados a iPhones, los desarrolladores deberían usar el proveedor de ubicación combinada (FLP) para obtener los datos de ubicación de un reloj. Consulta Detección de la ubicación en Wear OS.

Si el teléfono vinculado está disponible, FLP lo usa para obtener los datos de ubicación.

Obtén solo los datos necesarios

Por lo general, cuando obtienes datos de Internet, debes extraer solo los necesarios. De lo contrario, podrías generar latencia, consumo de memoria y uso de batería innecesarios.

Cuando se conecta un reloj mediante Bluetooth LE, es posible que tu app tenga acceso a un ancho de banda de solo 4 kilobytes por segundo, según el reloj. Por lo tanto, te recomendamos seguir estos pasos:

  • Audita tus solicitudes de red y respuestas de datos adicionales que son exclusivos de una app para teléfonos.
  • Contrae las imágenes grandes antes de enviarlas al reloj por medio de una red.

En los casos en los que se necesita una red de ancho de banda alto, consulta Acceso a redes de ancho de banda alto.

Muestras de código adicionales

En el ejemplo de WearVerifyRemoteApp, se demuestra aún más el uso de las APIs que se abordan en esta página.