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 más 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 Play Store en el 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 y de destino para una app independiente, y 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 tiempo de ejecución para las apps independientes.

Para 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 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 indica si tu app para relojes es una app independiente y, por lo tanto, su funcionamiento no requiere una app para teléfonos Android. Si la configuración del elemento es true, tu app podrá estar disponible en Play Store para relojes sincronizados 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 sincronizado 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 completamente independiente o parcialmente independiente, se considera dentro de la categoría independiente. Debes establecer el valor del elemento meta-data en true para indicar esta categorización en Google Play Store:

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

Como una app independiente (es decir, independiente o parcialmente independiente) puede ser instalada por un usuario de iPhone o de Android que no tenga Play Store, la app para relojes debe poder usarse sin la app para teléfonos.

Si una app para relojes depende de una app para teléfonos, establece el valor del elemento meta-data que se muestra arriba en false. Establecerlo en false implica que la app para relojes debe instalarse solo en un reloj que esté sincronizado con un teléfono con Play Store.

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

Define una app como app para Wear

Asegúrate de que la etiqueta <uses-feature> esté definida en el archivo de manifiesto de Android en tu app. Esta debe indicar que es una app de watch, por ejemplo, android:name="android.hardware.type.watch" de la siguiente manera:

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

Código compartido y almacenamiento de datos

Una app para Wear puede compartir código con una para teléfonos. De manera opcional, el código que es específico de un factor de forma puede estar en un módulo independiente.

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 para relojes puede detectar si la app para teléfonos correspondiente está disponible y viceversa.

Tu app para teléfonos o relojes puede usar CapabilityClient a fin de anunciar la presencia de la app en un dispositivo sincronizado. 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 sincronizado o la nube), el CapabilityClient habilita otra app para detectar si está instalada. Para obtener más información, consulta Funciones de publicidad.

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 para relojes independiente.

Revisa el ejemplo en el que se 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 complementario 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 string única para el nombre de la capacidad 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>
        <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 capacidad, como el siguiente:

    <resources>
        <string-array name="android_wear_capabilities">
            <item>verify_remote_example_wear_app</item>
        </string-array>
    </resources>
    

Para obtener más información, consulta Funciones de publicidad.

Detecta apps y abre una URL desde un reloj

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

  1. Usa CapabilityClient a fin de verificar si tu app para teléfonos está instalada en el teléfono sincronizado. 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 dispositivo 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). En el iPhone, abre App Store llamando a RemoteIntent.startRemoteActivity() en 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 descripta 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 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á sincronizado 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 complementario es un dispositivo iOS.
DEVICE_TYPE_ERROR_UNKNOWN Se produjo un error al determinar el tipo de teléfono sincronizado; 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. Mediante NodeClient, busca todos los relojes conectados al teléfono del usuario. Para obtener más información, consulta el ejemplo.
  2. Mediante 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 sincronizados con iPhones

En el caso de los relojes sincronizados 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 de Android y SpeedTracker de Android también muestran el uso de las API explicadas en esta página.