Download - Desenvolver para Chromecast
![Page 1: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/1.jpg)
Desenvolver para
Chromecast
![Page 2: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/2.jpg)
O que é?
![Page 3: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/3.jpg)
O que é?
![Page 4: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/4.jpg)
O que é?
![Page 5: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/5.jpg)
O que NÃO é?
![Page 6: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/6.jpg)
Cenário típico
Image source: Google Developers webpage
![Page 7: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/7.jpg)
Algumas Particularidades
•mDNS
•OTA updates automáticos
•Android / ChromeOS
•Pairing com PIN / Ultrassons
![Page 8: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/8.jpg)
Google CastÉ a tecnologia que permite criar experiências multi-ecrã onde o utilizador envia e controla o conteúdo.
ChromecastÉ um dispositivo que implementa esta tecnologia!
![Page 9: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/9.jpg)
Existem 2 tipos de aplicações
• Sender Applications
• Receiver Applications
![Page 10: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/10.jpg)
Sender Applications
![Page 11: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/11.jpg)
Android Dev Setup
• Habilitiar desenvolvimento no dispositivo• No projecto:
– Incluir bibliotecas de desenvolvimento– Algum boilerplate code– Cast Button, Conectividade, ...
![Page 12: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/12.jpg)
Chromecast Dev Mode
![Page 13: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/13.jpg)
Bibliotecas necessárias
compile 'com.android.support:appcompat-v7:20.0.0'compile 'com.android.support:mediarouter-v7:20.0.0'compile 'com.google.android.gms:play-services:6.1.11'
![Page 14: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/14.jpg)
AndroidManifest
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
android:theme="@style/Theme.AppCompat"
![Page 15: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/15.jpg)
Sender App lifecycle
Inicializar API
Descobrir e conectar
Iniciar Receiver App
Receber e enviar msgs
Desconectar
![Page 16: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/16.jpg)
Design Guidelines
Mais info em: http://goo.gl/NFoHXa
![Page 17: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/17.jpg)
Google Cast Badge
http://goo.gl/NFoHXa
![Page 18: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/18.jpg)
Google Cast Store
![Page 19: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/19.jpg)
Sender APP codeThe interesting
parts :)
![Page 20: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/20.jpg)
Inicializar APIpublic class MainActivity extends ActionBarActivity
@Override onCreate()// Configure Cast device discoverymMediaRouter = MediaRouter.getInstance(getApplicationContext());mMediaRouteSelector = new MediaRouteSelector.Builder()
.addControlCategory(CastMediaControlIntent.categoryForCast(getResources().getString(R.string.app_id))).build();
mMediaRouterCallback = new MyMediaRouterCallback();
@Override onResume()// Start media router discoverymMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback,MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);
![Page 21: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/21.jpg)
Cast Button
<item android:id="@+id/menu_item" android:title="@string/title" app:actionProviderClass="android.support.v7.app. MediaRouteActionProvider" app:showAsAction="always"/>
![Page 22: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/22.jpg)
Cast Button - Activity onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.main, menu); MenuItem mediaRouteMenuItem =
menu.findItem(R.id.media_route_menu_item); MediaRouteActionProvider mediaRouteActionProvider =
(MediaRouteActionProvider) MenuItemCompat .getActionProvider(mediaRouteMenuItem);
// Set the MediaRouteActionProvider selector for device discovery. mediaRouteActionProvider.setRouteSelector(mMediaRouteSelector); return true; }
![Page 23: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/23.jpg)
Comunicaçãoclass MessagesHub implements MessageReceivedCallback { public String getNamespace() { return getString(R.string.namespace); }....
GoogleApiClient mApiClient = new GoogleApiClient.Builder(this) .addApi(Cast.API, apiOptionsBuilder.build()) .addConnectionCallbacks(mConnectionCallbacks) .addOnConnectionFailedListener(mConnectionFailedListener) .build();
mApiClient.connect();
![Page 24: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/24.jpg)
Envio de mensagem(Sender App)
Cast.CastApi.sendMessage(mApiClient, mMessageHub.getNamespace(), message) .setResultCallback(new ResultCallback<Status>() { @Override public void onResult(Status result) { if (!result.isSuccess()) { Log.e(TAG, "Sending message failed"); } } });
![Page 25: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/25.jpg)
Recepção da mensagem(Receiver App)
window.castReceiverManager = cast.receiver.CastReceiverManager.getInstance();
window.messageBus = window.castReceiverManager.getCastMessageBus( 'urn:x-cast:com.android.lx');
window.messageBus.onMessage = function(event) { document.getElementById("message").innerHTML= event.data; window.castReceiverManager.setApplicationState(text); window.messageBus.send(event.senderId, event.data); }
![Page 26: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/26.jpg)
MAGIC!Sources at: http://goo.gl/xuu9b8
![Page 27: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/27.jpg)
Desligartry { Cast.CastApi.stopApplication(mApiClient, mSessionId); if (mMessageHub != null) { Cast.CastApi.removeMessageReceivedCallbacks( mApiClient, mMessageHub.getNamespace()); mMessageHub = null; }} catch (IOException e) { Log.e(TAG, "Exception while removing channel", e);}mApiClient.disconnect();
![Page 28: Desenvolver para Chromecast](https://reader034.vdocuments.pub/reader034/viewer/2022051414/55a46ab31a28ab88608b45da/html5/thumbnails/28.jpg)
Por: Pedro Veloso (http://goo.gl/5y4IZQ)Slides disponíveis em : http://goo.gl/0xvjxr