Comunicar-se diretamente por uma rede em dispositivos independentes

Com o Wear OS by Google, um smartwatch pode se conectar diretamente a uma rede, sem acesso a um smartphone Android ou iOS. Não use a API Data Layer para conectar um app do Wear OS a uma rede. Em vez disso, siga as diretrizes e etapas neste guia.

Acesso à rede

Os apps Wear OS podem fazer solicitações de rede. Quando um smartwatch tem conexão Bluetooth com um smartphone, o tráfego de rede do relógio geralmente é colocado em proxy pelo smartphone.

Quando um smartphone não está disponível, o Wi-Fi e as redes celulares são usados, dependendo do hardware do relógio. A plataforma Wear OS processa as transições entre redes.

Você pode usar protocolos como HTTP, TCP e UDP. No entanto, as APIs android.webkit, incluindo a classe CookieManager, não estão disponíveis. Você pode usar cookies lendo e gravando cabeçalhos em solicitações e respostas.

Use WorkManager para solicitações assíncronas, incluindo pesquisas em intervalos regulares.

Se for necessário se conectar a tipos de rede específicos, consulte Como ler o estado da rede.

Acesso à rede de alta largura de banda

A plataforma Wear OS gerencia a conectividade de rede para oferecer a melhor experiência geral do usuário. A plataforma escolhe a rede padrão ativa considerando dois requisitos: longa duração da bateria e largura de banda da rede.

Quando a prioridade é a economia da bateria, a rede ativa pode não ter uma largura de banda suficiente para executar tarefas que precisam de rede, como enviar arquivos grandes ou fazer streaming de mídia.

Esta seção apresenta orientações sobre como usar a classe ConnectivityManager para garantir que o app tenha a largura de banda necessária. Para informações gerais sobre controle detalhado de recursos de rede, consulte Gerenciar o uso da rede.

Solicitar conectividade Wi-Fi

Para casos de uso que exigem acesso à rede de alta largura de banda, como transferência de arquivos grandes ou streaming de mídia, solicite conectividade com um transporte desse tipo, como Wi-Fi. Isso é mostrado neste exemplo:

val callback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network)
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        // Called when a network disconnects or otherwise no longer satisfies this request
        // or callback.
    }
}

fun requestWifiNetwork() {
    connectivityManager.requestNetwork(
        NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
    )
}

A conexão a uma rede pode não ser instantânea, porque o rádio celular ou o Wi-Fi do relógio pode estar desativado para economizar bateria. Se não for possível conectar o relógio a uma rede, o método onAvailable() da sua instância NetworkCallback não será chamado.

Depois que onAvailable() é chamado, o dispositivo tenta permanecer conectado à rede Wi-Fi até que o NetworkCallback seja liberado. Para preservar a duração da bateria, libere o callback, conforme mostrado no exemplo abaixo, quando a rede Wi-Fi não for mais necessária.

connectivityManager.bindProcessToNetwork(null)
connectivityManager.unregisterNetworkCallback(callback)

Iniciar a atividade de configuração de Wi-Fi

Ao solicitar uma rede Wi-Fi, o sistema tenta se conectar a uma rede salva se alguma tiver sido configurada e estiver dentro do alcance. Se nenhuma rede Wi-Fi salva estiver disponível, o método de callback onAvailable da sua instância NetworkCallback não será chamado.

Se você estiver usando um Handler para definir o tempo limite da solicitação de rede, vai ser possível direcionar o usuário a uma rede Wi-Fi quando o tempo limite for atingido. Envie o usuário diretamente para a atividade de adicionar uma rede Wi-Fi usando a seguinte intent:

val networkSettingsAction = "com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"
val intent = Intent(networkSettingsAction).apply {
    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
context.startActivity(intent)

Para iniciar a atividade de configuração, o app precisa ter a permissão CHANGE_WIFI_STATE.

Considerações sobre a interface do usuário

Se o app precisar de uma conexão com uma nova rede Wi-Fi para uma operação de alta largura de banda, adquira e libere essa conexão conforme necessário. Se nenhuma rede Wi-Fi estiver disponível, explique que o recurso exige Wi-Fi e ofereça uma maneira de iniciar a atividade de configurações de Wi-Fi. Não bloqueie o acesso do usuário a recursos do app que não precisem de uma rede de alta largura de banda.

Considerações sobre o uso de dados e energia

Para preservar a duração da bateria e minimizar o uso de dados móveis, adie tarefas de rede não essenciais, como relatórios de análise ou coleta de registros, até que o dispositivo Wear OS restaure uma conexão Bluetooth ou Wi-Fi em vez de uma conexão LTE ou tarifada.

Mensagens na nuvem

Para enviar notificações, use diretamente o Firebase Cloud Messaging (FCM).

Nenhuma API para acesso à rede ou FCM é específica do Wear OS. Consulte a documentação existente sobre como se conectar a uma rede e mensagens na nuvem.

O FCM funciona bem com a Soneca e é a forma recomendada de enviar notificações para um smartwatch.

Forneça mensagens do FCM coletando um token de registro para um dispositivo quando o app Wear OS for executado. Em seguida, inclua o token como parte do destino quando o servidor enviar mensagens para o endpoint REST do FCM. O FCM envia mensagens para o dispositivo identificado pelo token.

As mensagens do FCM são enviadas no formato JavaScript Object Notation (JSON) e podem incluir um destes payloads ou ambos:

  • Payload de notificação:ao receber um payload de notificação no relógio, os dados são mostrados para o usuário no stream de notificações. Quando o usuário toca na notificação, o app é iniciado.
  • Payload de dados:quando o payload tem um conjunto de pares personalizados de chave ou valor. O payload é enviado como dados para o app do Wear OS.

Para mais informações e exemplos de payloads, consulte tipos de mensagens.

Por padrão, as notificações são compartilhadas de um app do smartphone para um smartwatch. Se você tiver um app Wear OS independente e um app de smartphones correspondente, pode haver notificações duplicadas. Por exemplo, uma única notificação do FCM, recebida tanto por um smartphone quanto por um relógio, pode ser mostrada em ambos os dispositivos de maneira independente. Para evitar isso, use as APIs de ponte.

Usar serviços em segundo plano

Para que sejam executadas corretamente, as tarefas em segundo plano precisam considerar o modo Soneca e de App em espera.

Quando uma tela é desligada ou entra no modo ambiente por um certo período, um subconjunto do modo Soneca pode ser ativado, adiando as tarefas em segundo plano por algum tempo. Depois disso, quando o dispositivo fica inativo por um tempo prolongado, o modo Soneca normal é ativado. Agende solicitações com a API WorkManager, que permite que o app se registre para a execução de código que não seja afetada pelo modo Soneca.

Programar com restrições

É possível usar restrições para configurar solicitações de forma a preservar a duração da bateria. Selecione e inclua nas solicitações uma ou mais das restrições abaixo:

  • Agende uma solicitação que exija rede.

    Especifique se o NetworkType é CONNECTED ou UNMETERED. UNMETERED é para grandes transferências de dados, enquanto CONNECTED é para transferências pequenas.

  • Programe uma solicitação ao carregar.

  • Programe uma solicitação enquanto o dispositivo estiver inativo. Isso é útil para sincronizações ou trabalhos em segundo plano de menor prioridade, especialmente quando o dispositivo está carregando.

Para mais informações, consulte o guia do WorkManager Efeito das restrições no trabalho periódico.