Desenvolver para Chromecast

Preview:

Citation preview

Desenvolver para

Chromecast

O que é?

O que é?

O que é?

O que NÃO é?

Cenário típico

Image source: Google Developers webpage

Algumas Particularidades

•mDNS

•OTA updates automáticos

•Android / ChromeOS

•Pairing com PIN / Ultrassons

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!

Existem 2 tipos de aplicações

• Sender Applications

• Receiver Applications

Sender Applications

Android Dev Setup

• Habilitiar desenvolvimento no dispositivo• No projecto:

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

Chromecast Dev Mode

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'

AndroidManifest

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

android:theme="@style/Theme.AppCompat"

Sender App lifecycle

Inicializar API

Descobrir e conectar

Iniciar Receiver App

Receber e enviar msgs

Desconectar

Design Guidelines

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

Google Cast Badge

http://goo.gl/NFoHXa

Google Cast Store

Sender APP codeThe interesting

parts :)

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);

Cast Button

<item android:id="@+id/menu_item" android:title="@string/title" app:actionProviderClass="android.support.v7.app. MediaRouteActionProvider" app:showAsAction="always"/>

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; }

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();

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"); } } });

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); }

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

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();

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

Recommended