28
Desenvolver para Chromecast

Desenvolver para Chromecast

Embed Size (px)

Citation preview

Page 1: Desenvolver para Chromecast

Desenvolver para

Chromecast

Page 2: Desenvolver para Chromecast

O que é?

Page 3: Desenvolver para Chromecast

O que é?

Page 4: Desenvolver para Chromecast

O que é?

Page 5: Desenvolver para Chromecast

O que NÃO é?

Page 6: Desenvolver para Chromecast

Cenário típico

Image source: Google Developers webpage

Page 7: Desenvolver para Chromecast

Algumas Particularidades

•mDNS

•OTA updates automáticos

•Android / ChromeOS

•Pairing com PIN / Ultrassons

Page 8: Desenvolver para Chromecast

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

Existem 2 tipos de aplicações

• Sender Applications

• Receiver Applications

Page 10: Desenvolver para Chromecast

Sender Applications

Page 11: Desenvolver para Chromecast

Android Dev Setup

• Habilitiar desenvolvimento no dispositivo• No projecto:

– Incluir bibliotecas de desenvolvimento– Algum boilerplate code– Cast Button, Conectividade, ...

Page 12: Desenvolver para Chromecast

Chromecast Dev Mode

Page 13: Desenvolver para Chromecast

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

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

Sender App lifecycle

Inicializar API

Descobrir e conectar

Iniciar Receiver App

Receber e enviar msgs

Desconectar

Page 16: Desenvolver para Chromecast

Design Guidelines

Mais info em: http://goo.gl/NFoHXa

Page 17: Desenvolver para Chromecast

Google Cast Badge

http://goo.gl/NFoHXa

Page 18: Desenvolver para Chromecast

Google Cast Store

Page 19: Desenvolver para Chromecast

Sender APP codeThe interesting

parts :)

Page 20: Desenvolver para Chromecast

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

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

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

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

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

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

MAGIC!Sources at: http://goo.gl/xuu9b8

Page 27: Desenvolver para Chromecast

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

Por: Pedro Veloso (http://goo.gl/5y4IZQ)Slides disponíveis em : http://goo.gl/0xvjxr