Anzeige
Anzeige

Más contenido relacionado

Anzeige

Más de Cesar Augusto Nogueira(20)

Anzeige

Último(20)

Android Wear - Workshop por @cesarnogcps

  1. WORKSHOP SECOMP UNESP 2016 19/10/2016 Ok, Google. Como fazer um aplicativo Android Wear?
  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. UI baseada em um stream de cards
  4. Clima Trânsito Lembretes Vôos Batimentos Cardíacos Atender/rejeitar ligações Busca por voz
  5. Navegação Música Navegação sem mobile Música sem mobile Lembretes Voice memos
  6. UX para wear NÃO é UX para um (mini) smartphone http://minuum.com/typing-on-android-wear/
  7. Lançadas automaticamente Glanceable Princípios de UI Micro-interações
  8. Princípios de UI Não interrompa o usuário… Crie grandes áreas de toque Não seja um “shoulder tapper"
  9. Desenvolvendo para Android Wear
  10. Android Wear SmartWatch ou Emulador O que vamos precisamos? Android Studio
  11. Escolha seu modelo LG G Watch R Motorola Moto 360 LG Watch Urban Silver
  12. Escolha seu modelo Asus ZenWatch LG G Watch Samsung Gear Live Sony SmartWatch 3
  13. Android Wear App
  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. adb -d forward tcp:5601 tcp:5601
  16. Depuração USB ou Bluetooth adb forward tcp:4444 localabstract:/adb-hub; adb connect localhost:4444
  17. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  18. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  19. Notificações simples
  20. Notificações com ação
  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. Notificações empilhadas
  23. Notificações com páginas
  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. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  26. Respondendo com voz
  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. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  29. Aplicações Wear MinhaApp MobileAPK WearAPK
  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. Componentes android.support.wearable.view WatchViewStub BoxInsetLayout WearableListView CircledImageView GridViewPager GridPagerAdapter FragmentGridPagerAdapter CardFragment DelayedConfirmationView ConfirmationActivity DismissOverlayView
  32. Tela Quadrada ou Redonda?
  33. Tela Quadrada ou Redonda?
  34. BoxInsetLayout
  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. WearableListView WearableListView WearableListView.ClickListener WearableListView.Adapter CircledImageView
  37. GridViewPager GridViewPager GridPagerAdapter FragmentGridPagerAdapter CardFragment CardFrame
  38. 2D Picker
  39. Estrutura de um app wear 2D Picker
  40. DelayedConfirmationView
  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. 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. My app always-on!!!
  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. DismissOverlayView <style name="AppTheme" parent="Theme.DeviceDefault"> name="android:windowSwipeToDismiss">false</item><item </style>
  46. Notificações Sincronizadas Comandos de Voz Aplicações Wear Envio e sincronização de dados APIs
  47. Comunicação Mobile/Wear MinhaApp MobileAPK WearAP K
  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. Node API Message API Data API Channel API
  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. 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. 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. 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. 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. Channel API API usada para enviar arquivos de dispositivo wearable para um outro wearable or celular.
  56. Maps!
  57. WatchFaces
  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. Acomode bem os elementos do sistema Adicione configurações ao aplicativo do Android Wear
  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. http://developer.android.com/training/building-wearables.html
  62. Dúvidas?
  63. Cesar A. Nogueira Analista de Software Instituto de Pesquisas Eldorado SouJava Campinas JUG Leader @cesarnogcps +CesarAugustoNogueira www.cesarnogueira.me Obrigado, SECOMP Unesp 2016
Anzeige