No post anterior, falamos de como configurar o ambiente para iniciar um emulador do Android Wear e como conecta-lo ao smartphone/tablet. Também vimos que as notificações disparadas nos handhelds (smatphones/tablets) ficam sincronizadas no smartwatch. Nesse post vou mostrar como se comportam as notificações nos Android Wear.
Crie um novo projeto no Android Studio 0.8 (ou superior), defina o nome do projeto e seu respectivo pacote e clique em Next. A janela abaixo será exibida, então marque apenas a opção "Phone and Tablet" (spoiler: o próximo post será sobre apps exclusivas para wearables).
Adicione uma Activity em branco ao projeto e conclua o assistente.
Nosso projeto será simples, terá uma Activity principal e outra (DetalheActivity) que receberá uma mensagem vinda do relógio. Na MainActivity, adicione os dois métodos abaixo que usaremos mais adiante.
private NotificationCompat.Builder criarNotificacao(String title, String text) { return new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_like) .setContentTitle(title) .setContentText(text) .setAutoCancel(true) .setDefaults(NotificationCompat.DEFAULT_ALL); } private void dispararNotificacao( Notification notification, int id) { NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(id, notification); }Nada especial nesses dois métodos. O primeiro cria objeto NotificationCompat.Builder que constrói uma notificação com as propriedades mais comuns: título, texto, ícone, cor do led, som e vibração padrão (isso é feito na chamada ao setDefaults). O segundo dispara a notificação usando a classe NotificationManagerCompat. Mas o importante aqui é que essa classe está na versão 20 da API de compatibilidade, então certifique-se de que no seu arquivo build.gradle esteja com o appcompat-v7:20. Outra detalhe é que se você não estiver rodando no emulador do Android L, use o compileSdkVersion com o valor 'android-19' conforme abaixo.
apply plugin: 'com.android.application' android { compileSdkVersion 'android-19' buildToolsVersion "20.0.0" defaultConfig { applicationId "nglauber.android.testewear" minSdkVersion 10 targetSdkVersion 19 versionCode 1 versionName "1.0" } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:20.+' }Então se dispararmos uma notificação simples podemos utilizar o método abaixo.
private void notificacaoSimples() { Intent viewIntent = new Intent(this, MyActivity.class); PendingIntent viewPendingIntent = PendingIntent.getActivity( this, 0, viewIntent, 0); NotificationCompat.Builder notificationBuilder = criarNotificacao("Título", "Texto") .setContentIntent(viewPendingIntent); dispararNotificacao( notificationBuilder.build(), 1); }A notificação aparecerá no handheld e no relógio que ficará como abaixo.
Como podemos ver, não fizemos nada de especial do wear, então se você já fez seu aplicativo com notificações, elas estarão integradas com o wearable automaticamente (se eles estiverem pareados, óbvio). Outra coisa que podemos fazer em handhelds e que é ótimo nos relógios são as ações. Vamos ver como adicionar uma...
private void notificacaoComAcao() { Intent mapIntent = new Intent(Intent.ACTION_VIEW); Uri geoUri = Uri.parse( "geo:0,0?q=" + Uri.encode("Av.Caxangá")); mapIntent.setData(geoUri); PendingIntent mapPendingIntent = PendingIntent.getActivity( this, 0, mapIntent, 0); NotificationCompat.Builder notificationBuilder = criarNotificacao("Localização", "Av. Caxangá") .setContentIntent(mapPendingIntent) .addAction(R.drawable.ic_map, "Abrir mapa", mapPendingIntent); dispararNotificacao( notificationBuilder.build(), 1); }Uma notificação similar a anterior será exibida no relógio, mas se fizermos o swipe para esquerda, veremos essa ação.
Ao clicarmos nessa ação, o aplicativos de mapa (Google Maps ou Waze, por exemplo) será iniciado no smartphone/tablet. Esse exemplo também não usa nada especial do Android Wear :(
Então vou deixar de enrolação e mostrar algo que só funcione no wear: responder uma notificação a partir do relógio como é feito no Gmail.
private void notificacaoComResposta() { RemoteInput remoteInput = new RemoteInput.Builder( DetalheActivity.EXTRA_VOICE_REPLY) .setLabel("Diga a resposta") .build(); Intent replyIntent = new Intent( this, DetalheActivity.class); PendingIntent replyPendingIntent = PendingIntent.getActivity( this, 0, replyIntent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Action action = new NotificationCompat.Action.Builder( R.drawable.ic_reply, "Responder", replyPendingIntent) .addRemoteInput(remoteInput) .build(); NotificationCompat.WearableExtender nwe = new NotificationCompat.WearableExtender(); Notification notification = criarNotificacao( "Título", "Passe a página p/ responder") .extend(nwe.addAction(action)) .build(); dispararNotificacao(notification, 1); }Quando a notificação for disparada, ao deslizar para a esquerda, teremos a ação de responder.
Ao clicarmos na ação, a tela do comando de voz será exibida, então podemos falar nossa resposta (ou digitar se você estiver usando o emulador).
Como podemos observar, disparamos uma Intent para DetalheActivity (que você deve criar), e nela podemos capturar o texto falado no relógio utilizando o código abaixo.
private CharSequence obterTextoFalado(Intent intent) { Bundle remoteInput = RemoteInput .getResultsFromIntent(intent); if (remoteInput != null) { return remoteInput .getCharSequence(EXTRA_VOICE_REPLY); } return null; }Muito simples não? Espero que todos os aplicativos de troca de mensagens (como WhatsApp) implementem isso, pois é muito legal! :)
Mas além de ações, podemos adicionar páginas que podem ser visualizadas fazendo o swipe para esquerda.
private void notificacaoComPaginas() { Intent viewIntent = new Intent( this, MyActivity.class); PendingIntent viewPendingIntent = PendingIntent.getActivity( this, 0, viewIntent, 0); NotificationCompat.Builder nb = criarNotificacao("Título", "Página1") .setContentIntent(viewPendingIntent); NotificationCompat.BigTextStyle pagesStyle = new NotificationCompat.BigTextStyle() .setBigContentTitle("Página 2") .bigText("Um monte de texto aqui..."); Notification secondPageNotification = new NotificationCompat.Builder(this) .setStyle(secondPageStyle) .build(); Notification twoPageNotification = new NotificationCompat.WearableExtender() .addPage(pagesStyle) .extend(nb) .build(); dispararNotificacao( twoPageNotification, 1); }
Assim, podemos ter um conteúdo maior na notificação utilizando páginas.
É isso aí povo. Nós como desenvolvedores agora temos que pensar que as notificações disparadas no seu aparelho também aparecerão nos smartwatches. Então não perca a oportunidade de fazer sua aplicação funcionar bem também nos relógios com Android Wear.
Qualquer dúvida, deixem seus comentários.
4br4ç05,
nglauber
Fonte: http://developer.android.com/training/wearables/notifications/index.html
Nenhum comentário:
Postar um comentário