Apps do Wear OS independentes ou não independentes

Recomendamos que os apps do Wear OS funcionem de maneira independente de smartphones para que os usuários possam realizar tarefas no relógio sem precisar ter um smartphone Android ou iOS. Caso seu app do Wear OS precise de interação com o smartphone para funcionar, marque esse app como dependente e adote medidas para garantir que o usuário tenha acesso à versão para smartphone.

Planejar seu app

Você pode usar o Android App Bundle para gerar automaticamente pacotes de aplicativo Android (APKs) otimizados para a configuração de cada dispositivo com as mesmas informações de produto. Isso permite que o usuário faça o download apenas do código e dos recursos necessários para executar seu app.

Para mais informações sobre como configurar seu app para distribuição na Google Play Store, consulte Empacotar e distribuir apps do Wear e o guia de introdução dos Android App Bundles.

Geralmente, o nível de API mínimo para um app para Wear OS é 25 (Wear OS 2.0). O nível desejado da API precisa ser 28 ou mais recente. Para mais informações, consulte Atender ao requisito de nível desejado da API do Google Play. Defina o targetSdkVersion como o nível 30 da API (Wear OS 3) para garantir que o app funcione bem na versão mais recente da plataforma.

Para informações sobre solicitações de rede e acesso a redes de alta largura de banda, consulte Acesso à rede e sincronização no Wear OS.

Definir um app como app para Wear OS

Defina a tag <uses-feature> no arquivo de manifesto do Android do app. Para indicar que esse é um app para smartwatch, adicione uma entrada como esta:

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

Identificar um app como independente ou dependente

Um app para smartwatch pode ser considerado independente ou dependente:

  • Independentes: apps que não precisam de uma versão para smartphone para executar os recursos principais, incluindo autenticação. Se disponível, o app para smartphone oferece mais recursos.
  • Dependente: apps que dependem do app instalado no smartphone ou em outro dispositivo para executar os recursos principais, incluindo autenticação.

Para declarar que o app do Wear OS é independente ou dependente, defina o valor de com.google.android.wearable.standalone do elemento meta-data no arquivo de manifesto do Android.

Se o app para smartwatch for completamente independente, transmita essa informação à Google Play Store, definindo o valor de com.google.android.wearable.standalone como true:

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

Se o app para smartwatch for dependente e precisar de outro para executar os recursos principais, defina o valor de com.google.android.wearable.standalone como false. Isso indica que o app para smartwatch precisa de outro dispositivo para funcionar, mas não afeta a promoção do app na Google Play Store.

Observação: mesmo que o valor de com.google.android.wearable.standalone seja false, o app para smartwatch pode ser instalado antes do app para smartphone. Assim, se o app para smartwatch detectar que o app necessário não está instalado no telefone associado, conforme descrito nesta página, ele vai pedir para o usuário instalar a versão para smartphone.

Código compartilhado e armazenamento de dados

É possível compartilhar código entre um app do Wear OS e um app para smartphone. Por exemplo, o código comum para redes pode ficar em uma biblioteca compartilhada.

Se preferir, você pode colocar os códigos específicos de cada formato em módulos separados.

É possível usar APIs de armazenamento padrão do Android para armazenar dados localmente, da mesma forma que em um smartphone. Por exemplo, você pode usar as APIs SharedPreferences ou a biblioteca de persistência Room.

Detectar seu app em outro dispositivo

Seu app para smartwatch pode detectar se o app para smartphone correspondente está disponível e vice-versa.

Seu app para smartphone ou smartwatch pode usar o CapabilityClient para anunciar ao dispositivo pareado que a versão correspondente está instalada. Isso pode ser feito de modo estático ou dinâmico.

Quando um app está em um nó na rede do Wear OS de um usuário (como em um smartphone, um relógio pareado ou na nuvem), o CapabilityClient permite que ele seja detectado. Para mais informações, consulte Anunciar recursos.

Se um dos seus apps não puder detectar o outro, solicite que o usuário abra a página "Detalhes do app" na Play Store no dispositivo que não foi detectado. Essa é uma solução para apps para smartwatches que só funcionam adequadamente com a presença do app para smartphones associado.

É necessário verificar se a Play Store está disponível no dispositivo, já que nem todos os smartphones (como iPhones) usam a Play Store.

As próximas seções descrevem as práticas recomendadas para dois casos:

  • O app independente para smartwatch precisa do app para smartphone.
  • O app para smartphone precisa do app independente para smartwatch.

Consulte também o app de exemplo (link em inglês) no GitHub, que demonstra como esse recurso funciona. Para mais informações sobre as classes descritas na próxima seção, consulte a Referência da API Wear OS. Essa referência também inclui informações sobre a classe PhoneTypeHelper, que contém um método getPhoneDeviceType() que permite que o app do Wear OS confira se o telefone associado é um dispositivo Android ou iOS.

Especificar nomes de recursos para detectar apps

Especifique uma string exclusiva para o nome do recurso no arquivo res/values/wear.xml do app correspondente a cada tipo de dispositivo (relógio ou smartphone).

Por exemplo, no seu módulo para dispositivos móveis, o arquivo wear.xml pode incluir o seguinte:

<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>

No módulo do Wear OS, o arquivo wear.xml inclui um valor diferente para o nome do recurso, como no exemplo abaixo:

<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 mais informações, consulte Anunciar recursos.

Detecção de app e abertura de um URL em um smartwatch

O app para smartwatch pode detectar se o smartphone associado tem o app para smartphone instalado. Para isso, siga estas etapas:

  1. Use o CapabilityClient para verificar se o app para smartphone está instalado no dispositivo pareado. Para mais informações, consulte o exemplo no GitHub (link em inglês).
  2. Se o app para smartphone não estiver instalado, use o método PhoneDeviceType.getPhoneDeviceType() para verificar o tipo de smartphone. Consulte a próxima seção para mais informações.
  3. Se PhoneDeviceType.DEVICE_TYPE_ANDROID for retornado, significa que o smartphone é Android. Chame RemoteActivityHelper.startRemoteActivity() no dispositivo Wear OS para abrir a Play Store no smartphone. Use o URI comercial do app para smartphone, que pode ser diferente do URI do Wear. Por exemplo, use um URI comercial como: market://details?id=com.example.android.wearable.wear.finddevices
  4. Se PhoneDeviceType.DEVICE_TYPE_IOS for retornado, significa que o smartphone é iOS e não tem a Play Store. Nesse caso, chame RemoteActivityHelper.startRemoteActivity() no dispositivo Wear OS para abrir a App Store no iPhone. Você pode especificar o URL do iTunes do seu app, por exemplo, https://itunes.apple.com/us/app/yourappname.

    No Wear OS, não é possível determinar programaticamente se o app para smartphone está instalado em um iPhone. Como prática recomendada, forneça um mecanismo para que o usuário abra a App Store manualmente.

Observação: use a API RemoteActivityHelper descrita anteriormente para especificar que um comando do relógio abra todos os URLs no smartphone, sem precisar do app para smartphone.

Detalhes para detectar o tipo de smartphone pareado

O snippet abaixo usa o método getPhoneDeviceType() para verificar o tipo de smartphone pareado com o relógio:

Kotlin

var phoneDeviceType: Int = PhoneDeviceType.getPhoneDeviceType(context)

Java

int phoneDeviceType = PhoneDeviceType.getPhoneDeviceType(context);

O valor retornado pelo método getPhoneDeviceType() é um dos seguintes:

Valor de retorno Descrição
DEVICE_TYPE_ANDROID O smartphone complementar é um dispositivo Android.
DEVICE_TYPE_IOS O smartphone complementar é um dispositivo iOS.
DEVICE_TYPE_UNKNOWN O telefone associado é um dispositivo desconhecido.
DEVICE_TYPE_ERROR Ocorreu um erro ao determinar o tipo do smartphone pareado. Faça outra verificação mais tarde.

Detecção de app a partir de um smartphone Android

O smartphone Android pode detectar se os dispositivos Wear OS do usuário têm seu app para smartwatch instalado. Para isso, siga estas etapas:

  1. Com o NodeClient, encontre todos os smartwatches conectados ao smartphone do usuário. Para mais informações, consulte o exemplo no GitHub (link em inglês).
  2. Com o CapabilityClient, verifique qual dos relógios do usuário têm seu app instalado.
  3. Se o app não estiver instalado em todos os relógios do usuário, permita que ele abra a Play Store nos demais dispositivos Wear OS pelo smartphone, usando o método RemoteActivityHelper.startRemoteActivity(). Use o URI comercial do app do Wear OS, que pode ser diferente do URI do app para smartphone. Por exemplo, use um URI comercial como: market://details?id=com.example.android.wearable.wear.finddevices

Dados de localização para smartwatches pareados com iPhones

No caso de relógios pareados com iPhones, use o provedor de localização combinada (FLP) para receber os dados de localização no relógio. Para mais informações, consulte Detectar a localização no Wear OS.

Se o telefone associado estiver disponível, o FLP o usará para acessar os dados de localização.

Coletar apenas os dados necessários

De maneira geral, extraia apenas os dados necessários da Internet. Caso contrário, você pode introduzir latência, uso de memória e uso de bateria desnecessários.

Quando o relógio está conectado via Bluetooth LE, é possível que o app tenha acesso a uma largura de banda de apenas 4 kilobytes por segundo, dependendo do modelo. Portanto, as etapas abaixo são recomendadas:

  • Confira se dados extras, necessários apenas para apps para smartphones, estão sendo coletados nas solicitações e respostas da rede.
  • Reduza imagens grandes antes de enviá-las por uma rede para o relógio.

Para casos em que uma rede de alta largura de banda for necessária, consulte Acesso à rede de alta largura de banda.

Outros exemplos de código

O exemplo WearVerifyRemoteApp (link em inglês) demonstra melhor o uso das APIs abordadas nesta página.