O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

Android Wear - Workshop por @cesarnogcps

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Próximos SlideShares
Android FREETEC
Android FREETEC
Carregando em…3
×

Confira estes a seguir

1 de 67 Anúncio
Anúncio

Mais Conteúdo rRelacionado

Quem viu também gostou (20)

Anúncio

Semelhante a Android Wear - Workshop por @cesarnogcps (20)

Mais de Cesar Augusto Nogueira (20)

Anúncio

Mais recentes (20)

Android Wear - Workshop por @cesarnogcps

  1. 1. WORKSHOP SECOMP UNESP 2016 19/10/2016 Ok, Google. Como fazer um aplicativo Android Wear?
  2. 2. Cesar A. Nogueira Analista de Software Instituto de Pesquisas Eldorado SouJava Campinas JUG Leader Ex-estagiário de Engenharia de Software na IBM Lenexa, KS - USA www.cesarnogueira.me
  3. 3. UI baseada em um stream de cards
  4. 4. Clima Trânsito Lembretes Vôos Batimentos Cardíacos Atender/rejeitar ligações Busca por voz
  5. 5. Navegação Música Navegação sem mobile Música sem mobile Lembretes Voice memos
  6. 6. UX para wear NÃO é UX para um (mini) smartphone http://minuum.com/typing-on-android-wear/
  7. 7. Lançadas automaticamente Glanceable Princípios de UI Micro-interações
  8. 8. Princípios de UI Não interrompa o usuário… Crie grandes áreas de toque Não seja um “shoulder tapper"
  9. 9. Desenvolvendo para Android Wear
  10. 10. Android Wear SmartWatch ou Emulador O que vamos precisamos? Android Studio
  11. 11. Escolha seu modelo LG G Watch R Motorola Moto 360 LG Watch Urban Silver
  12. 12. Escolha seu modelo Asus ZenWatch LG G Watch Samsung Gear Live Sony SmartWatch 3
  13. 13. Android Wear App
  14. 14. Digite no Terminal adb forward tcp:5601 localabstract:/adb-hub adb connect localhost:5601 Caso não dê certo com a porta 5601, tente com outra porta: adb forward tcp:4444 localabstract:/adb-hub adb connect localhost:4444
  15. 15. adb -d forward tcp:5601 tcp:5601
  16. 16. Depuração USB ou Bluetooth adb forward tcp:4444 localabstract:/adb-hub; adb connect localhost:4444
  17. 17. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  18. 18. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  19. 19. Notificações simples
  20. 20. Notificações com ação
  21. 21. 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.
  22. 22. Notificações empilhadas
  23. 23. Notificações com páginas
  24. 24. 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.
  25. 25. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  26. 26. Respondendo com voz
  27. 27. Comandos de voz Call me a car/taxi Take a note Set alarm for 8 AM Set timer for 10 minutes 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
  28. 28. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  29. 29. Aplicações Wear MinhaApp MobileAPK WearAPK
  30. 30. Dependências dependencies { compile wearApp compile compile fileTree(dir: 'libs', include: ['*.jar']) project(':wear') ‘com.android.support:appcompat-v7:23.+' 'com.google.android.gms:play-services-wearable:+' } dependencies { compile compile compile fileTree(dir: 'libs', include: ['*.jar']) 'com.google.android.support:wearable:1.3.0' 'com.google.android.gms:play-services-wearable:+' }
  31. 31. Componentes android.support.wearable.view WatchViewStub BoxInsetLayout WearableListView CircledImageView GridViewPager GridPagerAdapter FragmentGridPagerAdapter CardFragment DelayedConfirmationView ConfirmationActivity DismissOverlayView
  32. 32. Tela Quadrada ou Redonda?
  33. 33. Tela Quadrada ou Redonda?
  34. 34. BoxInsetLayout
  35. 35. <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
  36. 36. WearableListView WearableListView WearableListView.ClickListener WearableListView.Adapter CircledImageView
  37. 37. GridViewPager GridViewPager GridPagerAdapter FragmentGridPagerAdapter CardFragment CardFrame
  38. 38. 2D Picker
  39. 39. Estrutura de um app wear 2D Picker
  40. 40. DelayedConfirmationView
  41. 41. <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"/> DelayedConfirmationView mDelayedView = (DelayedConfirmationView) findViewById(R.id.delayed_confirm); mDelayedView.setListener( new DelayedConfirmationView.DelayedConfirmationListener(){ @Override public void onTimerFinished(View view) { } onTimerSelected(View view) { @Override public void } });
  42. 42. 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);
  43. 43. My app always-on!!!
  44. 44. public class MainWearActivity extends WearableActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_wear); setAmbientEnabled(); ...} @Override public void onEnterAmbient(Bundle ambientDetails) { super.onEnterAmbient(ambientDetails); } @Override public void onExitAmbient() { super.onExitAmbient(); @Override public void onUpdateAmbient() { super.onUpdateAmbient(); } }
  45. 45. DismissOverlayView <style name="AppTheme" parent="Theme.DeviceDefault"> name="android:windowSwipeToDismiss">false</item><item </style>
  46. 46. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  47. 47. Comunicação Mobile/Wear MinhaApp MobileAPK WearAP K
  48. 48. Google Play Services compile ‘com.google.android.gms:play-services-wearable:9.6.1’ <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();
  49. 49. Node API Message API Data API Channel API
  50. 50. 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) { } onPeerDisconnected(Node node) { @Override public void } }); Node API
  51. 51. Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), "/mensagens", new byte[]{ 1, 2, 3 } ); Message API Wearable.MessageApi.addListener(mGoogleApiClient, new MessageApi.MessageListener() { @Override public void onMessageReceived(MessageEvent messageEvent) { String String byte[] remetente = messageEvent.getSourceNodeId(); caminho = messageEvent.getPath(); dados = messageEvent.getData(); } });
  52. 52. PutDataMapRequest putDataMapRequest = PutDataMapRequest.create("/dados"); DataMap dataMap = putDataMapRequest.getDataMap(); dataMap.putInt("numero", dataMap.putString("nome", 1); "Glauber"); Wearable.DataApi.putDataItem( mGoogleApiClient, putDataMapRequest.asPutDataRequest()); Data API
  53. 53. 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 String nome = dataMap.getInt("numero"); = dataMap.getString("nome"); } } } } });
  54. 54. WearableListenerService extends Service implements NodeApi.NodeListener, MessageApi.MessageListener, DataApi.DataListener Node API Message API Data API <service android:name=“com.example.android.MeuService”> <intent-filter> <action android:name="com.google.android.gms.wearable.BIND_LISTENER"/> </intent-filter> </service>
  55. 55. Channel API API usada para enviar arquivos de dispositivo wearable para um outro wearable or celular.
  56. 56. Maps!
  57. 57. WatchFaces
  58. 58. 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
  59. 59. Acomode bem os elementos do sistema Adicione configurações ao aplicativo do Android Wear
  60. 60. •Android Wear para iOS já está disponível para iPhone 5 ou superior. •Alguns dos relógios que suportam iOS: ✓ ASUS ZenWatch 2 ✓ Huawei Watch ✓ LG Watch Urbane ✓ Moto 360 (2nd Gen) ✓ Moto 360 for Women ✓ Moto 360 Sport.
  61. 61. http://developer.android.com/training/building-wearables.html
  62. 62. Dúvidas?
  63. 63. Cesar A. Nogueira Analista de Software Instituto de Pesquisas Eldorado SouJava Campinas JUG Leader @cesarnogcps +CesarAugustoNogueira www.cesarnogueira.me Obrigado, SECOMP Unesp 2016

×