Comunicar-se diretamente por uma rede em dispositivos independentes

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

Acesso à rede

Os apps Wear OS podem fazer solicitações de rede. Quando um relógio tem Bluetooth a um smartphone, o tráfego de rede do relógio geralmente é intermediado por proxy o celular.

Quando um smartphone não está disponível, o Wi-Fi e as redes celulares são usados, dependendo 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 de resposta.

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

Se for preciso se conectar a tipos de rede específicos, consulte Leitura de rede estado.

Acesso à rede de alta largura de banda

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

Quando a economia da bateria é priorizada, a rede ativa pode não ter largura de banda suficiente para tarefas de rede, como transporte de arquivos grandes ou streaming mídia.

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

Solicitar conectividade Wi-Fi

Para casos de uso que exigem acesso à rede de alta largura de banda, como transporte arquivos grandes ou streaming de mídia, solicitar conectividade com uma largura de banda alta transporte, como Wi-Fi. Isso é mostrado neste exemplo:

Kotlin

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.
    }
}
connectivityManager.requestNetwork(
    NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
    callback
)

Java

ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {
    public void onAvailable(Network network) {
        super.onAvailable(network);
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network);
    }

    public void onLost(Network network) {
        super.onLost(network);
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
};
connectivityManager.requestNetwork(
        new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
);

A aquisição de uma rede pode não ser instantânea, porque o Wi-Fi do relógio ou a o rádio celular pode estar desligado para economizar bateria. Se o relógio não conseguir se conectar rede, o método onAvailable() da instância NetworkCallback não será chamou.

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 retorno de chamada, conforme mostrado no exemplo a seguir, quando não precisar mais de uma Rede Wi-Fi.

Kotlin

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

Java

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 um deles estiver configurado e dentro do alcance. Se nenhuma rede Wi-Fi salva estiver disponível, o O método de callback onAvailable da instância NetworkCallback não é chamado.

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

Kotlin

context.startActivity(Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"))

Java

context.startActivity(new Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"));

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

Considerações sobre a interface do usuário

Caso seu app precise de uma conexão com uma nova rede Wi-Fi para alta largura de banda Verifique se o motivo para se conectar está claro para o usuário antes antes de iniciar as configurações de Wi-Fi. Só solicite que o usuário adicione uma nova rede Wi-Fi quando a rede de alta largura de banda for necessária. Não bloqueie o usuário de acessem recursos de aplicativos que não exigem uma rede de alta largura de banda.

A Figura 1 mostra um app de música. O aplicativo permite que o usuário procure músicas em um com menor largura de banda e só exige que o usuário adicione uma nova rede para fazer o download ou streaming de música.

Download de música

Figura 1. Fluxo de um app para download de música.

Considerações sobre o uso de dados e energia

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

Mensagens na nuvem

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

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

O FCM funciona bem com o recurso Soneca e é a forma recomendada de enviar notificações. a um relógio.

Fornecer mensagens do FCM coletando um token de registro para um dispositivo quando o app para Wear OS é executado. Em seguida, inclua o token como parte da solicitação quando o servidor envia mensagens para o endpoint REST do FCM. O FCM envia mensagens o dispositivo identificado pelo token.

As mensagens do FCM estão no formato JavaScript Object Notation (JSON) e podem incluir um ou ambos os payloads a seguir:

  • Payload de notificação:quando um payload de notificação é recebido por um relógio, os dados são exibidos para um usuário diretamente no fluxo de notificações. Quando o usuário tocar na notificação, o app será 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 Sobre as mensagens do FCM.

Por padrão, as notificações são compartilhadas de um app do smartphone para o relógio. Se você tiver um um app independente para Wear OS e um app para smartphones correspondente, duplicando as notificações. podem ocorrer. Por exemplo, uma única notificação do FCM, recebida por um smartphone e relógio, podem ser exibidas por ambos os dispositivos de maneira independente. Você pode evitar isso usando APIs de ponte.

Usar serviços em segundo plano

Para ajudar a garantir que tarefas em segundo plano sejam executadas corretamente, eles precisam considerar para os recursos Soneca e App em espera.

Quando uma tela é desligada ou entra no modo ambiente por muito tempo, um subconjunto do modo soneca pode ocorrer e tarefas em segundo plano podem ser adiadas por certos períodos. Depois, quando o dispositivo fica inativo por um tempo prolongado, o modo Soneca normal é ativado. Programe solicitações com a API WorkManager, que permite que seu app registre para a execução de códigos com segurança de soneca.

Programar com restrições

Você pode usar restrições para configurar solicitações de forma a economizar bateria vida. Selecione uma ou mais das seguintes restrições para incluir no seu solicitações:

  • Agende uma solicitação que exija rede.

    Especifique se NetworkType é CONNECTED ou UNMETERED. UNMETERED serve para grandes transferências de dados e CONNECTED para pequenas transferências de dados.

  • Programe uma solicitação ao carregar.

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

Para saber mais, consulte a seção Efeito das restrições sobre sobre trabalho periódico.