The Android Developer Challenge is back! Submit your idea before December 2.

Apps Wear independentes

Um app Wear OS pode funcionar independentemente da presença de um smartphone. Os usuários podem realizar tarefas em um smartwatch, sem acesso a um smartphone Android ou iOS.

Confira os seguintes recursos relacionados:

Planejar seus apps

Você pode usar o recurso de vários APKs (múltiplos APKs) do Google Play para publicar mais de um arquivo APK na mesma listagem de aplicativos. Um APK de smartwatches deve ser distribuído com esse recurso. Não incorpore um APK de smartwatches em um APK de smartphones. Para ver informações sobre como configurar seu app para distribuição na Google Play Store, consulte Empacotar e distribuir apps Wear e Como o recurso de vários APKs funciona.

Observação: para se qualificar para promoção na Google Play Store do Wear (ou seja, na Play Store do smartwatch), seu app precisa funcionar independentemente de um smartphone. É necessário compatibilidade com iOS e Android.

Geralmente, o nível de API mínimo e de destino para um app independente e para o Wear 2.0 é 25. O nível mínimo de SDK só poderá ser 23 se você estiver usando o mesmo APK para Wear 1.0 e 2.0 (e, portanto, tiver um APK do Wear 1.0 integrado).

Observação: devido a um problema de latência que afeta a disponibilidade de um app em smartwatches Wear 1.x, se você criar um APK independente para o Wear 2.0 e continuar a ter um APK para o Wear 1.0, siga estas duas etapas:

  • Forneça uma versão independente do APK do Wear.
  • Continue incorporando uma versão do APK do Wear no APK do seu smartphone.

Cuidado: se você publicar uma atualização para seu APK de smartphones de produção em que um APK do Wear integrado tenha sido removido, usuários de produção que atualizarem o APK de smartphones antes de instalar o APK do Wear independente perderão o app do Wear e todos os dados contidos nele. Se você publicar uma atualização para seu APK de smartphones de produção, continue a integrar o APK de smartwatches no APK de smartphones.

Permissões de tempo de execução são necessárias para apps independentes.

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

Identificar um app como independente

Os apps Wear precisam ter um elemento meta-data no arquivo de manifesto do Android como filho do elemento <application>. O nome do elemento meta-data é com.google.android.wearable.standalone, e o valor precisa ser true ou false. O elemento indica se seu app para smartwatches é um app independente e, portanto, não requer um app Android complementar para funcionar. Se a configuração do elemento for true, seu app poderá ser disponibilizado na Play Store em smartwatches pareados com iPhones, desde que os APKs ativos em todos os canais (por exemplo, no Canal Beta) tenham o elemento definido como true. Se nem todos os APKs (alfa, beta e produção) atualmente oferecidos para o usuário tiverem a configuração descrita acima, seu app ficará indisponível quando o usuário fizer uma pesquisa em um smartwatch pareado com um iPhone.

Um app para smartwatches pode ser considerado uma das seguintes opções:

  • Completamente independente de um app para smartphones
  • Semi-independente, ou seja, um app para smartphones não é necessário e só forneceria recursos opcionais
  • Dependente de um app para smartphones

Se um app para smartwatches for completamente independente ou semi-independente, ele será considerado da categoria independente. Você precisa indicar essa categorização para a Google Play Store definindo o valor desse elemento meta-data como true:

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

Como um app independente ou semi-independente pode ser instalado por um usuário de um iPhone ou de um smartphone Android sem a Play Store, o app para smartwatches precisa ser utilizável sem o app para smartphones.

Se um app para smartwatches depender de um app para smartphones, defina o valor do elemento meta-data acima como false. Definir o elemento como false significa que o app só pode ser instalado em um smartwatch pareado com um smartphone que tenha a Play Store.

Observação: mesmo que o valor seja false, o app para smartwatches pode ser instalado antes do app para smartphones. Desse modo, se um app para smartwatches detectar que um smartphone complementar não possui o app necessário, ele solicitará que o usuário instale o app para smartphones.

Definir um app como um app Wear

Você precisa garantir que a tag <uses-feature> seja definida no arquivo de manifesto do Android no seu app. Ela precisa indicar que ele é um app watch, por exemplo, android:name="android.hardware.type.watch", conforme mostrado a seguir:

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

Código compartilhado e armazenamento de dados

É possível compartilhar código entre um app Wear e um app para smartphones. Opcionalmente, códigos específicos de um formato podem ficar em um módulo separado.

Por exemplo, o código comum para redes pode estar em uma biblioteca compartilhada.

É 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 smartwatches pode detectar se o app para smartphones correspondente está disponível e vice-versa.

Seu app pode usar o CapabilityClient para anunciar a presença de um app para um dispositivo pareado. Isso pode ser feito de modo estático e dinâmico. Quando um app está em um nó em uma rede do Wear de um usuário (por exemplo, em um smartphone, em um smartwatch pareado ou na nuvem), o CapabilityClient permite que outro app detecte se ele está instalado. Para mais informações, consulte Divulgar recursos.

Se um de seus apps não puder detectar o outro, permita que um usuário abra a listagem da Play Store em um dispositivo remoto. Essa é uma solução para apps para smartwatches que só funcionam adequadamente com a presença do app complementar. Um pré-requisito é verificar a presença da Play Store no dispositivo remoto.

Nem todos os smartphones são compatíveis com a Play Store (como iPhones etc.).

Esta seção descreve as práticas recomendadas para estes cenários:

  • Seu app independente para smartwatches precisa do app para smartphones.
  • Seu app para smartphones precisa do app independente para smartwatches.

Consulte a amostra que exibe essa funcionalidade. Para mais informações sobre as classes descritas abaixo, consulte a Referência da API Wear. Nessa referência, também se encontram informações sobre a classe PhoneDeviceType, que contém um método getPhoneDeviceType() que permite ao seu app Wear verificar se um smartphone complementar é um dispositivo Android ou iOS.

Especificar nomes de recursos para detectar apps

Para o app correspondente a cada tipo de dispositivo (smartwatch ou smartphone), especifique uma string exclusiva do nome do recurso no arquivo res/values/wear.xml.

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

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

No seu módulo do Wear, o arquivo wear.xml inclui um valor diferente no nome do recurso, como o seguinte:

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

Para mais informações, consulte Divulgar recursos.

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

O app para smartwatches pode detectar se o smartphone complementar de um usuário tem o app para smartphones:

  1. Use o CapabilityClient para verificar se seu app para smartphones está instalado no smartphone pareado. Para mais informações, consulte a amostra.
  2. Se o app para smartphones não estiver instalado, use o método PhoneDeviceType.getPhoneDeviceType() para verificar o tipo do smartphone.
  3. Se PhoneDeviceType.DEVICE_TYPE_ANDROID for retornado, significa que o smartphone é Android. Chame RemoteIntent.startRemoteActivity() no dispositivo Wear para abrir a app store no smartphone. Use o URI comercial no seu app para smartphones, que pode ser diferente do URI do smartphone. 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, sem uma Play Store disponível. Abra a app store no iPhone chamando RemoteIntent.startRemoteActivity() no dispositivo Wear. Você pode especificar o URL do iTunes do seu app, por exemplo, https://itunes.apple.com/us/app/yourappname. Não é possível determinar programaticamente a partir do Wear se seu app está instalado em um iPhone. Como prática recomendada, forneça um mecanismo (um botão, por exemplo) para o usuário acionar manualmente a abertura da App Store.

Ao usar a API RemoteIntent descrita acima, você pode especificar que qualquer URL seja aberto no smartphone a partir do smartwatch e que nenhum app seja necessário no smartphone.

Detalhes para detectar o tipo de smartphone pareado

Este é um snippet que usa o método getPhoneDeviceType() para verificar o tipo de smartphone ao qual o smartwatch está pareado:

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_ERROR_UNKNOWN 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 de um usuário têm seu app para smartwatches:

  1. Com o NodeClient, encontre todos os smartwatches conectados ao smartphone do usuário. Para mais informações, consulte a amostra.
  2. Com o CapabilityClient, verifique quais dos smartwatches do usuário têm seu app instalado.
  3. Se o app não estiver instalado em todos os smartwatches do usuário (compare os resultados da Etapa 1 com os da Etapa 2), permita que o usuário abra a Play Store nos dispositivos Wear restantes a partir do smartphone pelo método RemoteIntent.startRemoteActivity(). Especificamente, use o URI comercial do app Wear, que pode ser diferente do URI do seu app para smartphones. 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

Para smartwatches pareados com iPhones, os desenvolvedores precisam usar o Fused Location Provider (FLP) para conseguir dados de localização em um smartwatch. Consulte Detectar a localização no Wear.

Se o smartphone complementar estiver disponível, o FLP o usará para conseguir os dados de localização.

Conseguir apenas os dados necessários

Geralmente, ao extrair dados da Internet, você precisa extrair apenas os dados necessários. Caso contrário, você pode introduzir latência, uso de memória e uso de bateria desnecessários.

Quando um smartwatch estiver conectado por uma conexão Bluetooth LE, seu app poderá ter acesso a uma largura de banda de apenas 4 kilobytes por segundo, dependendo do smartwatch. Portanto, as seguintes etapas são recomendadas:

  • Monitore as solicitações e as respostas da sua rede para conseguir dados extras exclusivos de um app para smartphones.
  • Reduza imagens grandes antes de enviá-las por uma rede para um smartwatch.

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

Outros exemplos de código

As amostras Android WearVerifyRemoteApp e Android SpeedTracker (links em inglês) demonstram com mais detalhes o uso das APIs abordadas nesta página.