Apps para Wear independientes

Una app para Wear OS puede funcionar independientemente de un teléfono; los usuarios pueden realizar tareas en un reloj sin acceder a un teléfono Android o iOS.

Consulta los siguientes recursos relacionados:

Planifica tus apps

Puedes usar la función de varios APK de Google Play para publicar más de un APK en la misma ficha de aplicación. Un APK de reloj debe distribuirse mediante esa función; no incorpores uno en un APK de teléfono. Para obtener información sobre cómo configurar tu app para distribuirla por Google Play Store, consulta Empaquetado y distribución de apps de Wear y Cómo funcionan varios APK.

Nota: A fin de que tu app califique para su promoción en Google Play Store en Wear (es decir, en la Play Store del reloj), esta debe funcionar de manera independiente del teléfono. Además, se requiere compatibilidad con iOS y Android.

Por lo general, el nivel de API mínimo deseable para una app independiente, y para Wear 2.0, es el 25. El nivel de SDK mínimo puede ser 23 solo si usas el mismo APK para Wear 1.0 y 2.0 (y, por lo tanto, tienes un APK de Wear 1.0 incorporado).

Nota: Debido al problema de latencia que afecta la disponibilidad de una app en relojes con Wear 1.x, si compilas un APK de Wear 2.0 independiente y quieres mantener un APK de Wear 1.0, debes hacer lo siguiente:

  • Proporcionar una versión independiente del APK de Wear
  • Seguir incorporando una versión del APK de Wear en tu teléfono APK

Precaución: Si publicas una actualización para tu APK de teléfono de producción existente en la que quitaste un APK de Wear incorporado, los usuarios de la versión de producción que actualicen el APK de teléfono antes de instalar tu APK de Wear independiente perderán su app para Wear existente y sus datos. Si publicas una actualización para tu APK de teléfono de producción existente, sigue incorporándole el APK de reloj.

Se requieren permisos de entorno de ejecución para las apps independientes.

A fin de obtener información sobre las solicitudes de red y el acceso a redes de ancho de banda alto, consulta Sincronización y acceso a redes.

Identifica una app como independiente

Las apps para Wear deben tener un elemento meta-data en el archivo de manifiesto de Android como elemento secundario del elemento <application>. El nombre del elemento meta-data es com.google.android.wearable.standalone y su valor debe ser true o false. Este elemento indica si tu app de reloj es independiente y, por lo tanto, funciona sin una app para teléfonos Android. Si la configuración del elemento es true, tu app podrá estar disponible en Play Store para relojes vinculados con iPhones, siempre y cuando el valor de tus APK activos en todos los canales (p. ej., en el canal Beta) esté establecido en true. Si no todos los APK (Alfa, Beta y producción) que se publican actualmente a los usuarios tienen la configuración anterior, tu app no estará disponible cuando la busquen en un reloj vinculado con un iPhone.

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

  • Completamente independiente de una app para teléfonos
  • Parcialmente independiente (no se requiere una app para teléfonos, y esta solo proporciona funciones opcionales)
  • Dependiente de una app para teléfonos

Si una app es completa o parcialmente independiente, se considera dentro de 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>
    

Como los usuarios de un iPhone o de teléfonos Android sin Play Store pueden instalar una app que sea total o parcialmente independiente, la app de reloj se debe poder usar sin la app para teléfonos.

Si una app de reloj depende de una aplicación para teléfonos, establece el valor del elemento meta-data anterior en false. Establecerlo en false implica que la app de reloj debe instalarse solo en un reloj que esté vinculado con un teléfono con Play Store.

Nota: Incluso si el valor es false, la app de reloj se puede instalar 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 necesaria, debería solicitarle al usuario que la instale.

Define una app como app para Wear

Debes asegurarte de que la etiqueta <uses-feature> esté definida en el archivo de manifiesto de Android en tu app y que indica que es una app watch, por ejemplo, android:name="android.hardware.type.watch", como se muestra a continuación:

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

Código compartido y almacenamiento de datos

El código se puede compartir entre una app para Wear 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 para 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 aplicación 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 del usuario (es decir, 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 para 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.

Revisa el ejemplo que muestra esta funcionalidad. Para obtener más información sobre las clases que se describen debajo, consulta Referencia de la API de Wear. En esa referencia, también se incluye información sobre la clase PhoneDeviceType, que contiene un método getPhoneDeviceType() que habilita tu app para Wear a fin de 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, 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.
  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 RemoteIntent.startRemoteActivity() en el dispositivo Wear para abrir la tienda de aplicaciones 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). Para abrir la App Store en el iPhone, llama a RemoteIntent.startRemoteActivity() desde el dispositivo 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 RemoteIntent que se describió anteriormente, 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 vinculado 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 el dispositivo Wear de un usuario tiene tu app para relojes 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.
  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 (compara los resultados del Paso 1 con los del Paso 2), permite que el usuario abra Play Store en los dispositivos Wear restantes desde el teléfono mediante el método RemoteIntent.startRemoteActivity(). Específicamente, usa el URI de mercado de la app para Wear (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 con iPhones, los desarrolladores deberían usar el Proveedor de ubicación combinada (FLP) para obtener los datos de ubicación en un reloj. Consulta Cómo detectar la ubicación en Wear.

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

Obtén solo los datos necesarios

Por lo general, cuando obtienes datos desde 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 baja energía, 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.

Códigos de ejemplo adicionales

Los ejemplos de WearVerifyRemoteApp y SpeedTracker demuestran aún más el uso de las API incluidas en esta página.

demuestran aún más el uso de las API incluidas en esta página.