Android Wear — Introdução ao desenvolvimento com o emulador
Introdução
Já venho acompanhando a evolução do Android Wear desde o seu lançamento, sempre achei fascinante esse engajamento que o smartwatch pode proporcionar para as pessoas no dia a dia. Porém outra coisa que percebi junto à amigos desenvolvedores, é que a grande maioria ainda não tinha experimentado criar uma aplicação para o Android Wear. Por isso decidi criar este post para ajudar o pessoal a criar uma aplicação simples e testá-la com emulador do Android Wear.
Sobre o projeto
Neste post iremos criar um app para salvar nossas anotações, ele terá funcionalidades básicas, como adicionar, deletar e listar, e estes dados irão ser sincronizados entre o wearable e o telefone.
Configurações do projeto:
Para você poder seguir este post seu ambiente precisa estar com as seguintes configurações:
- Android Studio 2.2
- Emulador Android Wear API 24
Nosso primeiro passo será abrir o Android Studio e depois é só seguir as imagens para criação do projeto:
Não se esqueça de selecionar o checkbox WEAR para ser adicionado no projeto!
As configurações dos arquivos build.gradle (Wear & Mobile) devem estar desta maneira:
mobile/build.gradle
wear/build.gradle
Nosso primeiro passo será trabalhar na aplicação Wearable!
Vamos criar alguns layouts necessários para mostrar nossa lista de anotações:
activity_wear_main.xml
view_holder.xml
Próximo passo do projeto é criar um modelo Note.java para guarda as informações da nossa anotação:
Agora vamos criar um Adapter para popular nossa lista:
Na nossa WearMainActivity.java vamos criar um método configLayoutComponents() com a função de configurar nossos componentes e colocaremos ele no método onCreate:
Como este post visa a construção de um app simples, iremos realizar o armazenamento das anotações com o SharedPreferences, assim teremos uma solução mais simplificada para absorver o conceito de desenvolvimento do app wearable. Criaremos uma classe SharedPreferencesUtils para realizar esta tarefa:
Para adicionarmos anotações em nossa lista, vamos utilizar o EditText que já foi adicionado posteriormente na nossa WearMainActivity, mas agora precisamos capturar o texto digitado, salvá-lo e atualizar nossa lista:
Logo que adicionamos o item na lista e no SharedPreferences, mostramos uma mensagem de confirmação que o próprio sistema do wearable nos fornece, eu criei uma classe utils para nos ajudar:
Agora vamos criar uma classe WearDeleteActivity e seu layout para deletar nossas anotações. Teremos uma implementação do DelayedConfirmationView que funciona como um temporizador para confirmar ou cancelar a ação de excluir anotação.
wear/AndroidManifest.xml
activity_delete.xml
DeleteActivity.java
Quando clicarmos no item da lista iremos chamar a DeleteActivity, que irá mostrar o DelayedConfirmationView e caso ele não seja cancelado, retornamos para o método onActivityResult da WearMainActivity e removemos o nosso item selecionado:
Até aqui, conseguimos fazer o nosso app wearable salvar, deletar e listar nossas anotações, mas ainda precisamos implementar a parte que faz a sincronização dos dados entre o wearable e o telefone, e para isso precisamos desenvolver o aplicativo do telefone. Como aqui o nosso foco é o desenvolvimento wearable, o código do aplicativo para o telefone vai estar disponível no GitHub.
Agora, vamos começar a implementar a comunicação entre o wearable e o telefone e para isso precisamos utilizar a Data Layer API.
Data Layer API
A Data Layer API é uma configuração de dados de objetos que o sistema utiliza para sincronizar através da rede e notificar o aplicativo de algum evento importante.
Para escutar os eventos do Data Layer API, temos duas opções:
- Criar um Service que estende de
WearableListenerService.
- Criar uma Activity que implementa
DataApi.DataListener
.
Em ambas das opções, nós sobrescrevemos os métodos de callback para tratarmos os eventos desejados.
GoogleApiClient
Ele é o principal ponto de entrada para a integração com o Google Play Services. No nosso caso, ele irá nos ajudar na integração da Data Layer API.
Agora vamos implementar o DataApi.DataListener no modulo WEAR:
Na classe WearMainActivity vamos implementar os callbacks DataApi.DataListener, GoogleApiClient.ConnectionCallbacks e GoogleApiClient.OnConnectionFailedListener:
No onCreate configuramos o GoogleApiClient e no onResume fazemos a conexão:
No callback onConnected do GoogleApiClient adicionamos o listener para o DataApi e apartir deste momento começamos a escutar os eventos na Data Layer API:
No método onDataChanged é onde recebemos os dados da Data Layer API. É nele que validamos e tratamos os dados, para nossa persistência ser atualizada:
Vamos criar um método que terá o papel de enviar os dados pela Data Layer API, vale lembrar que o PATH de envio deve estar igual no lado do receptor, para podemos validar se os dados que estamos recebendo é do device correto:
Agora vamos implementar o WearableListenerService no modulo MOBILE:
Na parte do app do telefone criamos uma classe WearListCallListenerService que estende WearListenerService para podermos receber os dados que foram envidados do wearable:
Finalizando!
Agora para realizar o teste no telefone físico é necessário seguir algumas etapas simples, para criar uma conexão com o emulador do wearable:
- Faça o download no telefone do aplicativo Android Wear pela Google Play Store.
- Abra o emulador do Wearable no PC.
- Conecte o cabo USB no telefone, vá até a pasta platform-tools do Android SDK, abra o terminal de comados e digite:
adb -d forward tcp:5601 tcp:5601
- Agora abra o aplicativo Android Wear e selecione para se conectar com o emulador.
Obs: Toda vez que desconectar o telefone do USB, temos que rodar o comando adb -d forward tcp:5601 tcp:5601.
Bom, pessoal é isso ai, espero ter contribuído um pouco para dar aquele pontapé inicial e criar seu wearable app. Com isso abordamos os principais pontos para a comunicação entre o wearable e o telefone, enviando e recendo dados via a Data Layer API. Vale ressaltar que, se você enviar a mesma informação mais de uma vez, o onDataChanged irá ser chamado apenas na primeira vez. O projeto completo vai estar no GitHub.
Qualquer dúvida por favor deixe um comentário ou me procure no slack da comunidade.