Apps para Wear OS independientes frente a no independientes

Recomendamos que las apps para Wear OS funcionen 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. Si tu app de reloj requiere interacción con un teléfono, debes marcar tu app para Wear OS como no independiente y tomar medidas para asegurarte de que el usuario cuente con la aplicación para teléfonos.

Planifica tu app

Puedes usar Android App Bundle para generar automáticamente paquetes de aplicaciones para Android (APK) para la configuración del dispositivo de cada usuario en la misma ficha de aplicación. Esto permite que los usuarios descarguen solo el código y los recursos que necesitan para ejecutar tu app.

Si quieres obtener información para configurar tu app para distribuirla por medio de Google Play Store, consulta cómo empaquetar y distribuir apps para Wear OS y la guía para comenzar a usar paquetes Android App Bundle.

Por lo general, el nivel mínimo de API para una app para Wear OS es 25 (Wear OS 2.0). El nivel de API objetivo debe ser 28 o uno superior. Para obtener más información, consulta Cumple con los requisitos de nivel de API objetivo de Google Play. Establece la 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 de tu app. Para indicar que se trata de una app de reloj, agrega una entrada como la siguiente:

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

Identifica una app como independiente o no independiente

Una app de reloj puede ser independiente o no independiente:

  • Independiente: Es una app completamente independiente que no requiere una aplicación para teléfonos para usar sus funciones principales, incluida la autenticación. Si está disponible, una aplicación para teléfonos solo proporciona funciones opcionales.
  • No independiente: Es una app dependiente que requiere una aplicación en un teléfono o en otro dispositivo para usar las funciones principales, incluida la autenticación.

En tu app para Wear OS, establece el valor del elemento meta-data com.google.android.wearable.standalone en el archivo de manifiesto de Android para declarar si tu app es independiente o no.

Si tu app de reloj es completamente independiente, indícalo en Google Play Store estableciendo el valor de com.google.android.wearable.standalone en true:

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

Si tu app de reloj depende de otra app para usar las funciones principales, establece el valor de com.google.android.wearable.standalone en false. Esto implica que la app de reloj requiere otro dispositivo, pero eso no afecta la promoción de la aplicación en Google Play Store.

Nota: Incluso si el valor de com.google.android.wearable.standalone es false, la app de reloj puede instalarse antes que la aplicación para teléfonos. Por lo tanto, si tu app de reloj detecta que un teléfono vinculado no tiene la aplicación para teléfonos necesaria, como se describe en esta página, pídele 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 aplicación para teléfonos. Por ejemplo, el código común para la red puede estar en una biblioteca compartida.

De manera opcional, el código que es específico de un factor de forma puede estar en un módulo independiente.

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

Detecta tu app en otro dispositivo

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

Ambas apps pueden usar el CapabilityClient para anunciar su presencia en un dispositivo vinculado. Pueden hacerlo de forma estática o 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 CapabilityClient permite que otras apps la detecten. Para obtener más información, consulta Cómo anunciar funciones.

Si una de tus apps no puede detectar la otra, puedes pedirle al usuario que abra la ficha de Play Store en el dispositivo afectado. Esta es una solución para las apps de reloj que requieren la aplicación para teléfonos complementaria para funcionar correctamente.

Debes comprobar si Play Store está disponible en el dispositivo, ya que no todos los teléfonos son compatibles con este servicio, como es el caso de los teléfonos iPhone.

En las siguientes secciones, se describen las prácticas recomendadas para dos situaciones:

  • Tu app de reloj independiente necesita tu aplicación para teléfonos.
  • Tu aplicación para teléfonos necesita tu app de reloj independiente.

También puedes revisar la app de ejemplo en GitHub que demuestra esta funcionalidad. Para obtener más información sobre las clases descritas en la siguiente sección, consulta la referencia de la API de Wear OS. En esa referencia, también se incluye información sobre la clase PhoneTypeHelper, que contiene un método getPhoneDeviceType() que permite que la app para Wear OS compruebe si el teléfono vinculado es un dispositivo Android o iOS.

Especifica nombres de capacidades para detectar tus apps

En la app que corresponde a cada tipo de dispositivo (reloj o teléfono), especifica una cadena ú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 incluye 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 aplicación para teléfonos. Sigue estos pasos:

  1. Usa el CapabilityClient para comprobar si la aplicación para teléfonos está instalada en el teléfono vinculado. Si deseas obtener más información, consulta la app de ejemplo en GitHub.
  2. Si no está instalada tu aplicación para teléfonos, usa el método PhoneDeviceType.getPhoneDeviceType() para verificar el tipo de teléfono. Consulta la siguiente sección para obtener más detalles.
  3. Si se devuelve 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 Play Store en el teléfono. Usa el URI de mercado de tu aplicación para teléfonos, que puede ser diferente del URI de tu app para Wear. Por ejemplo, usa un URI de mercado como: market://details?id=com.example.android.wearable.wear.finddevices.
  4. Si se devuelve PhoneDeviceType.DEVICE_TYPE_IOS, significa que el teléfono es un dispositivo iOS sin Play Store disponible. Abre App Store en el iPhone llamando a RemoteActivityHelper.startRemoteActivity() desde el dispositivo para Wear OS. Puedes especificar la URL de iTunes de tu app, como https://itunes.apple.com/us/app/yourappname.

    Desde Wear OS, no es posible determinar de manera programática si tu aplicación para teléfonos está instalada en un dispositivo iOS. Como práctica recomendada, proporciónale un mecanismo al usuario para abrir App Store manualmente.

Nota: Usa la API de RemoteActivityHelper descrita con anterioridad para especificar que se puede abrir cualquier URL en el teléfono desde el reloj y que no se requiere ninguna aplicación para teléfonos.

Detalles para detectar el tipo de teléfono sincronizado

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 Description
DEVICE_TYPE_ANDROID El teléfono complementario es un dispositivo Android.
DEVICE_TYPE_IOS El teléfono complementario es un dispositivo iOS.
DEVICE_TYPE_UNKNOWN El teléfono vinculado es un dispositivo desconocido.
DEVICE_TYPE_ERROR 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 el dispositivo Wear OS de un usuario tiene tu app de reloj. Sigue estos pasos:

  1. Con NodeClient, busca todos los relojes conectados al teléfono del usuario. Si deseas obtener más información, consulta la app de ejemplo en GitHub.
  2. Con CapabilityClient, verifica en cuál de los relojes del usuario está instalada tu app.
  3. Si tu app no está instalada en todos los relojes del usuario, permite que este abra Play Store en los dispositivos Wear OS restantes desde el teléfono a través del método RemoteActivityHelper.startRemoteActivity(). Usa el URI de mercado de la app para Wear OS (que puede diferir del URI de la aplicación 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 sincronizados con iPhones

En el caso de los relojes vinculados a teléfonos iPhone, usa el Proveedor de ubicación combinada (FLP) para obtener los datos de ubicación en el reloj. Si deseas obtener más información, consulta Detección de la ubicación en Wear OS.

Si el teléfono vinculado está disponible, el 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 de bajo consumo, 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 que sigas estos pasos:

  • Audita tus solicitudes de red y respuestas de datos adicionales que solo se necesiten para una aplicación 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.