Android Wear Androidos 2015
-
Upload
nelson-glauber-leal -
Category
Software
-
view
121 -
download
2
Transcript of Android Wear Androidos 2015
Ok, Google. O que é
+Nelson Glauber@nglauber nglauber.blogspot.com
Android Wear?
Nelson GlauberEngenheiro de Sistemas do C.E.S.A.R.
Professor da Unibratec Google Developer Expert
@nglauber +NelsonGlauber
www.nglauber.com.br
Conhecendo o Android Wear
125 vezes ao dia em média!!!
Vida realPega o telefone
Devagando no telefone
Mais tempo para interagir com as pessoas à sua volta
Serve para que?
Android Wear estende a plataforma Android para uma nova geração de dispositivos, com uma usabilidade desenhada especificamente para os wearables.
UI baseada em um stream de cards
Clima Trânsito Lembretes Vôos
Batimentos Cardíacos
Atender/rejeitar ligações
Busca por voz
Navegação Música
Navegação sem mobile
Música sem mobile
Lembretes
Voice memos
UX para wear NÃO é UX para
um (mini) smartphone
http://minuum.com/typing-on-android-wear/
Lançadas automaticamente Glanceable
Princípios de UI
Sugestão e demanda Micro-interações
Princípios de UI
Não interrompa o usuário… Crie grandes áreas de toque
Não seja um “shoulder tapper"
Comandos de voz
Desenvolvendo para Android Wear
Android Wear Device
O que precisamos?
Android Studio
Escolha seu modelo
LG G Watch R
Motorola Moto 360
LG Watch Urban Silver
Escolha seu modelo
Asus ZenWatch LG G Watch Samsung
Gear LiveSony
SmartWatch 3
O que precisamos?
Android Wear App
adb -d forward tcp:5601 tcp:5601
Depuração USB ou Bluetooth
adb forward tcp:4444 localabstract:/adb-hub; adb connect localhost:4444
Estrutura de um app wear
Notificações simples
Notificações contextuais
Estrutura de um app wear
2D Picker
Estrutura de um app wear
2D Picker
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
Notificações Sincronizadas
Comandos de Voz
Aplicações Wear
Envio e sincronização de dados
APIs
Notificações Sincronizadas
Comandos de Voz
Aplicações Wear
Envio e sincronização de dados
APIs
Notificações simples
Notificações com ação
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.
Notificações empilhadas
Notificações com páginas
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.
Notificações Sincronizadas
Comandos de Voz
Aplicações Wear
Envio e sincronização de dados
APIs
Respondendo com voz
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
Notificações Sincronizadas
Comandos de Voz
Aplicações Wear
Envio e sincronização de dados
APIs
Aplicações Wear
MinhaApp
MobileAPK WearAPK
Dependências
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:+' }
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.google.android.support:wearable:1.1.0' compile 'com.google.android.gms:play-services-wearable:+' }
WatchViewStub BoxInsetLayout
WearableListView CircledImageView GridViewPager
GridPagerAdapter FragmentGridPagerAdapter
CardFragment DelayedConfirmationView ConfirmationActivity DismissOverlayView
Componentesandroid.support.wearable.view
Tela Quadrada ou Redonda?
Tela Quadrada ou Redonda?
BoxInsetLayout
<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
WearableListView
WearableListView WearableListView.ClickListener WearableListView.Adapter CircledImageView
GridViewPager
GridViewPager GridPagerAdapter FragmentGridPagerAdapter CardFragment CardFrame
DelayedConfirmationView
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"/>
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) { } });
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);
DismissOverlayView
<style name="AppTheme" parent="Theme.DeviceDefault"> <item name="android:windowSwipeToDismiss">false</item> </style>
Notificações Sincronizadas
Comandos de Voz
Aplicações Wear
Envio e sincronização de dados
APIs
Comunicação Mobile/Wear
MinhaApp
MobileAPK WearAPK
Google Play Services
GoogleApiClient googleApiClient = new GoogleApiClient.Builder(context) .addApi(Wearable.API) .addConnectionCallbacks(cc) .addOnConnectionFailedListener(cfl) .build();
compile ‘com.google.android.gms:play-services:7.3.0’
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
Node API
Message API
Data API
Channel 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) { } });
Node API
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 remetente = messageEvent.getSourceNodeId(); String caminho = messageEvent.getPath(); byte[] dados = messageEvent.getData(); } });
PutDataMapRequest putDataMapRequest = PutDataMapRequest.create("/dados"); DataMap dataMap = putDataMapRequest.getDataMap(); dataMap.putInt("numero", 1); dataMap.putString("nome", "Glauber");
Wearable.DataApi.putDataItem( mGoogleApiClient, putDataMapRequest.asPutDataRequest());
Data API
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
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>
Permite conectar múltiplos devices!!! Streamming e Envio de arquivos!!!
7.3
Channel API
WatchFaces
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
Acomode bem os elementos do sistema
Adicione configurações ao aplicativo do Android Wear
http://lifehacker.ru/2014/10/29/google-fit-dlya-android-prevrashhaem-smartfon-v-fitness-treker/
Informações diárias: Quantidade de passos.
Quantas calorias consumidas.
Atividade física.
https://developers.google.com/fit/android/get-started
Dúvidas?
http://developer.android.com/training/building-wearables.html
Nelson GlauberEngenheiro de Sistemas do C.E.S.A.R.
Professor da Unibratec Google Developer Expert
@nglauber +NelsonGlauber
www.nglauber.com.br