Conhecendo o Android Wear

5.129 visualizações

Publicada em

Next Level Apps é um evento gratuito organizado pelo Google Brasil que apresenta uma série de palestras de alta relevância e conteúdos variados que visa ajudar a evoluir aplicativos Android já publicados.
Esse ano participei ministrando um CodeLab sobre Android Wear.
O código-fonte do que foi apresentado está disponível em https://github.com/nglauber/NextLevelApps

Publicada em: Tecnologia
0 comentários
5 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
5.129
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1.428
Ações
Compartilhamentos
0
Downloads
26
Comentários
0
Gostaram
5
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Conhecendo o Android Wear

  1. 1. Conhecendo o +Nelson Glauber @nglauber nglauber.blogspot.com Android Wear
  2. 2. Nelson Glauber Engenheiro de Sistemas do C.E.S.A.R. Professor da Unibratec GDE Android 2014 @nglauber +NelsonGlauber nglauber.blogspot.com
  3. 3. Conhecendo o Android Wear https://github.com/nglauber/NextLevelApps
  4. 4. Serve para que? Vida real Pega o telefone Devagando no telefone 125 vezes ao dia em média!!! Mais tempo para interagir com as pessoas à sua volta
  5. 5. Android Wear estende a plataforma Android para uma nova geração de dispositivos, com uma usabilidade desenhada especificamente para os wearables.
  6. 6. UI baseada em um stream de cards
  7. 7. Comandos de voz
  8. 8. Clima Trânsito Lembretes Vôos Batimentos Cardíacos Atender/rejeitar ligações Busca por voz
  9. 9. Navegação Música Navegação sem mobile Música sem mobile Lembretes Voice memos
  10. 10. Lançadas Princípios de UI automaticamente Glanceable Sugestão e demanda Micro-interações
  11. 11. Princípios de UI Não interrompa o usuário… Crie grandes áreas de toque Não seja um “shoulder tapper"
  12. 12. Estrutura de um app wear Notificações simples Notificações contextuais
  13. 13. Estrutura de um app wear 2D Picker
  14. 14. Estrutura de um app wear 2D Picker
  15. 15. Estrutura de um app wear 1. Exibe um card 2. Clica na ação do card 3. Exibe activity em full-screen 4. Quando a activity terminar, volta ao fluxo de cards
  16. 16. Desenvolvendo para Android Wear
  17. 17. O que precisamos?
  18. 18. Android Wear Device Android Wear App O que precisamos? Android Studio
  19. 19. Escolha seu modelo LG G Watch Samsung Gear Live Motorola Moto 360
  20. 20. LG O que precisamos? G Watch R Sony SmartWatch 3 Asus ZenWatch
  21. 21. Android Wear App
  22. 22. adb -d forward tcp:5601 tcp:5601
  23. 23. Depuração USB ou Bluetooth adb forward tcp:4444 localabstract:/adb-hub; adb connect localhost:4444
  24. 24. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  25. 25. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  26. 26. Notificações simples
  27. 27. Notificações com ação
  28. 28. Notificações com ação ✓ Se quiser a ação no mobile e no wearable, use a classe NotificationCompat.Action. ✓ Se quiser a ação apenas no wearable use o método addAction(Action) da classe NotificationCompat.WearableExtender.
  29. 29. Notificações empilhadas
  30. 30. Notificações com páginas
  31. 31. Detalhes sobre notificações… ✓ Notificações disparadas pelo mobile, são exibidas no mobile e no wear, mas são executadas no mobile. ✓ Notificações disparadas pelo wear, só são exibidas e executadas no wear. ✓ Você pode exibir notificações apenas no mobile ou apenas no wear.
  32. 32. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  33. 33. Respondendo com voz
  34. 34. Comandos de voz Call a car/taxi Take a note Set alarm Set timer Start/stop bike Start/stop a run Start/stop workout Show heart rate Show step count App Name :) https://developer.android.com/training/wearables/apps/voice.html
  35. 35. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  36. 36. Aplicações Wear MinhaApp MobileAPK WearAPK
  37. 37. Dependências dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.google.android.support:wearable:1.1.0' compile 'com.google.android.gms:play-services-wearable:6.5.87' } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) wearApp project(':wear') compile 'com.android.support:appcompat-v7:21.0.2' compile 'com.google.android.gms:play-services-wearable:6.5.87' }
  38. 38. Componentes android.support.wearable.view WatchViewStub BoxInsetLayout WearableListView CircledImageView GridViewPager GridPagerAdapter FragmentGridPagerAdapter CardFragment DelayedConfirmationView ConfirmationActivity DismissOverlayView
  39. 39. Tela Quadrada ou Redonda?
  40. 40. Tela Quadrada ou Redonda?
  41. 41. BoxInsetLayout
  42. 42. <android.support.wearable.view.WatchViewStub xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/watch_view_stub" android:layout_width="match_parent" android:layout_height="match_parent" app:rectLayout="@layout/rect_activity_main_wear" app:roundLayout="@layout/round_activity_main_wear"> </android.support.wearable.view.WatchViewStub> res/layout/rect_activity_main_wear.xml res/layout/round_activity_main_wear.xml
  43. 43. WearableListView WearableListView WearableListView.ClickListener WearableListView.Adapter CircledImageView
  44. 44. GridViewPager GridViewPager GridPagerAdapter FragmentGridPagerAdapter CardFragment CardFrame
  45. 45. DelayedConfirmationView
  46. 46. DelayedConfirmationView <android.support.wearable.view.DelayedConfirmationView android:id="@+id/delayed_confirm" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/cancel_circle" app:circle_border_color="@color/lightblue" app:circle_border_width="4dp" app:circle_radius="16dp"> </android.support.wearable.view.DelayedConfirmationView> DelayedConfirmationView mDelayedView = (DelayedConfirmationView) findViewById(R.id.delayed_confirm); mDelayedView.setListener( new DelayedConfirmationView.DelayedConfirmationListener(){ @Override public void onTimerFinished(View view) { } @Override public void onTimerSelected(View view) { } });
  47. 47. ConfirmationActivity Intent intent = new Intent(context, ConfirmationActivity.class); intent.putExtra(ConfirmationActivity.EXTRA_ANIMATION_TYPE, ConfirmationActivity.SUCCESS_ANIMATION); intent.putExtra(ConfirmationActivity.EXTRA_MESSAGE, getString(R.string.msg_sent)); context.startActivity(intent);
  48. 48. DismissOverlayView <style name="AppTheme" parent="Theme.DeviceDefault"> <item name="android:windowSwipeToDismiss">false</item> </style>
  49. 49. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  50. 50. Comunicação Mobile/Wear MinhaApp MobileAPK WearAPK
  51. 51. Google Play Services compile ‘com.google.android.gms:play-services:6.5.87’ <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> GoogleApiClient googleApiClient = new GoogleApiClient.Builder(context) .addApi(Wearable.API) .addConnectionCallbacks(cc) .addOnConnectionFailedListener(cfl) .build();
  52. 52. Node API Message API Data API
  53. 53. Node API Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).setResultCallback( new ResultCallback<NodeApi.GetConnectedNodesResult>() { @Override public void onResult(NodeApi.GetConnectedNodesResult result) { Node node = result.getNodes().get(0); } }); Wearable.NodeApi.addListener( mGoogleApiClient, new NodeApi.NodeListener() { @Override public void onPeerConnected(Node node) { } @Override public void onPeerDisconnected(Node node) { } });
  54. 54. Message API Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), "/mensagens", new byte[]{ 1, 2, 3 } ); Wearable.MessageApi.addListener(mGoogleApiClient, new MessageApi.MessageListener() { @Override public void onMessageReceived(MessageEvent messageEvent) { String remetente = messageEvent.getSourceNodeId(); String caminho = messageEvent.getPath(); byte[] dados = messageEvent.getData(); } });
  55. 55. Data API PutDataMapRequest putDataMapRequest = PutDataMapRequest.create("/dados"); DataMap dataMap = putDataMapRequest.getDataMap(); dataMap.putInt("numero", 1); dataMap.putString("nome", "Glauber"); Wearable.DataApi.putDataItem( mGoogleApiClient, putDataMapRequest.asPutDataRequest());
  56. 56. Wearable.DataApi.addListener(mGoogleApiClient, new DataApi.DataListener() { @Override public void onDataChanged(DataEventBuffer dataEvents) { for (DataEvent dataEvent : dataEvents){ if (dataEvent.getType() == DataEvent.TYPE_CHANGED){ DataMapItem dataMapItem = DataMapItem.fromDataItem(dataEvent.getDataItem()); Uri uri = dataMapItem.getUri(); if (uri.getPath().equals("/dados")) { DataMap dataMap = dataMapItem.getDataMap(); int numero = dataMap.getInt("numero"); String nome = dataMap.getString("nome"); } } } } }); Data API
  57. 57. WearableListenerService extends Service implements NodeApi.NodeListener, MessageApi.MessageListener, DataApi.DataListener Node API Message API Data API <service android:name=“br.com.nglauber.nextlevelapps.MeuService”> <intent-filter> <action android:name="com.google.android.gms.wearable.BIND_LISTENER"/> </intent-filter> </service>
  58. 58. WatchFaces
  59. 59. Funcionar em telas redondas e quadradas Pense no modo interativo e ambiente Use preto e branco para telas OLED em modo ambiente e mantenha 95% dos pixels pretos
  60. 60. Acomode bem os elementos do sistema Adicione configurações ao aplicativo do Android Wear
  61. 61. Dúvidas?
  62. 62. Em janeiro… www.novatec.com.br
  63. 63. Nelson Glauber Engenheiro de Sistemas do C.E.S.A.R. Professor da Unibratec GDE Android 2014 @nglauber +NelsonGlauber nglauber.blogspot.com https://github.com/nglauber/NextLevelApps

×