integrando sua app android com chromecast
DESCRIPTION
Palestra ministrada no segundo Mobile Day Ci&T, ocorrido em 27/09/2014TRANSCRIPT
![Page 2: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/2.jpg)
Formado em Engenharia da Computação pela Universidade Federal de Itajubá em 2007. Trabalho com desenvolvimento Mobile desde então e com Android desde 2009 (Android 1.5)
26
![Page 3: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/3.jpg)
Ready to cast!
![Page 4: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/4.jpg)
Cast device
![Page 5: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/5.jpg)
Cast device
Provedor de conteúdo
![Page 6: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/6.jpg)
Cast device
Renderizador
Provedor de conteúdo
![Page 7: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/7.jpg)
Cast device
Renderizador
Controle
Provedor de conteúdo
![Page 8: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/8.jpg)
Cast devices no mercado
![Page 9: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/9.jpg)
Amazon Fire TV
Roku 3 Apple TV Google Chromecast
Processador Quad core Dual core Single core Single core
Memória 2 GB 512 MB 512 MB 512 MB
ControleComando por voz; controle
físico
Controle físico; app iOS
disponível
Controle físico; app iOS
Controlado por app (iOS, Android, Chrome)
HDMI SIM SIM SIM SIM
Preço $99 $99 $99 $35
![Page 10: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/10.jpg)
● Sender app
Chromecast: Requisitos
![Page 11: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/11.jpg)
● Sender app
Chromecast: Requisitos
![Page 12: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/12.jpg)
● Receiver app
● Sender app
Chromecast: Requisitos
![Page 13: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/13.jpg)
● Receiver app
● Sender app
Chromecast: Requisitos
![Page 14: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/14.jpg)
● Receiver app
Default Receiver (pronto para uso)
● Sender app
Chromecast: Requisitos
![Page 15: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/15.jpg)
Styled Media Receiver
● Receiver app
Default Receiver (pronto para uso)
Custom Receiver
● Sender app
Chromecast: Requisitos
![Page 16: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/16.jpg)
Chromecast: Requisitos
![Page 17: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/17.jpg)
Chromecast: Requisitos
![Page 18: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/18.jpg)
Chromecast: Requisitos
![Page 19: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/19.jpg)
Chromecast: Requisitos
![Page 20: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/20.jpg)
Chromecast: Requisitos
![Page 21: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/21.jpg)
Chromecast: Requisitos
![Page 22: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/22.jpg)
Chromecast: Requisitos
![Page 23: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/23.jpg)
Chromecast: Requisitos
![Page 24: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/24.jpg)
Chromecast: Requisitos
![Page 25: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/25.jpg)
Chromecast: Requisitos
![Page 26: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/26.jpg)
Chromecast: Requisitos
![Page 27: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/27.jpg)
Styled Media Receiver
● Receiver app
Default Receiver (pronto para uso)
Custom Receiver
● Sender app
Chromecast: Requisitos
![Page 28: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/28.jpg)
Styled Media Receiver
● Receiver app
Default Receiver (pronto para uso)
Custom Receiver
● Sender app
Chromecast: Requisitos
Web browser limitado!
![Page 29: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/29.jpg)
Chromecast: Application lifecycle
![Page 30: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/30.jpg)
Chromecast: Application lifecycle
![Page 31: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/31.jpg)
Chromecast: Application lifecycle
![Page 32: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/32.jpg)
Chromecast: Application lifecycle
App ID
![Page 33: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/33.jpg)
Chromecast: Application lifecycle
App ID
App ID
![Page 34: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/34.jpg)
Chromecast: Application lifecycle
App ID
App ID
URL
![Page 35: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/35.jpg)
Chromecast: Application lifecycle
App ID
App ID
URL
URL
![Page 36: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/36.jpg)
Chromecast: Application lifecycle
App ID
App ID
URL
URL
HTML
![Page 37: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/37.jpg)
Chromecast: Application lifecycle
App ID
App ID
URL
URL
HTML
Canal de dados
![Page 38: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/38.jpg)
The sender app
![Page 39: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/39.jpg)
Sender app: Dependências
![Page 40: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/40.jpg)
Sender app: Dependências
● Android Support Library v7
![Page 41: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/41.jpg)
Sender app: Dependências
● Android Support Library v7
● Android Support Media Router
Library
![Page 42: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/42.jpg)
Sender app: Dependências
● Android Support Library v7
● Android Support Media Router
Library
● Google Play Services
![Page 43: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/43.jpg)
Sender app: Os passos para o sucesso...
1. Descoberta de dispositivos
2. Gerenciamento de sessão
3. Transimissão de dados
![Page 44: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/44.jpg)
Sender app: Os passos para o sucesso...
1. Descoberta de dispositivos
2. Gerenciamento de sessão
3. Transimissão de dados
![Page 45: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/45.jpg)
Sender app: Descoberta de dispositivos
![Page 46: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/46.jpg)
Sender app: Descoberta de dispositivos
![Page 47: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/47.jpg)
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/media_route_menu_item" android:title="@string/media_route_menu_title" app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider" app:showAsAction="always"/></menu>
Sender app: Descoberta de dispositivos
![Page 48: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/48.jpg)
Descoberta de dispositivos: Media Router Selector
![Page 49: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/49.jpg)
Descoberta de dispositivos: Media Router Selector
public class MediaRouterPlaybackActivity extends ActionBarActivity { private MediaRouteSelector mSelector;
@Override protected void onCreate(Bundle savedInstanceState) { (...) // Create a route selector for the type of routes your app supports. mSelector = new MediaRouteSelector.Builder() // These are the framework-supported intents .addControlCategory(MediaControlIntent.CATEGORY_LIVE_AUDIO) .addControlCategory(MediaControlIntent.CATEGORY_LIVE_VIDEO) .addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK) .build();
(...) }}
![Page 50: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/50.jpg)
Descoberta de dispositivos: Media Router Selector
public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu);
// Inflate the menu and configure the media router action provider. getMenuInflater().inflate(R.menu.sample_media_router_menu, menu);
// Attach the MediaRouteSelector to the menu item MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item); MediaRouteActionProvider mediaRouteActionProvider = (MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem); mediaRouteActionProvider.setRouteSelector(mSelector);
// Return true to show the menu. return true;}
![Page 51: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/51.jpg)
Sender app: Os passos para o sucesso...
1. Descoberta de dispositivos
2. Gerenciamento de sessão
3. Transimissão de dados
![Page 52: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/52.jpg)
Sender app: Os passos para o sucesso...
1. Descoberta de dispositivos
2. Gerenciamento de sessão
3. Transimissão de dados
![Page 53: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/53.jpg)
Gerenciamento de sessão: Media Router Callback
private final MediaRouter.Callback mMediaRouterCallback = new MediaRouter.Callback() {
@Override public void onRouteSelected(MediaRouter router, RouteInfo route) { }
@Override public void onRouteUnselected(MediaRouter router, RouteInfo route) { }
@Override public void onRoutePresentationDisplayChanged(MediaRouter router, RouteInfo route) { }}
![Page 54: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/54.jpg)
Gerenciamento de sessão: Media Router Callback
public class MediaRouterPlaybackActivity extends ActionBarActivity { protected void onCreate(Bundle savedInstanceState) { mMediaRouter = MediaRouter.getInstance(this); }
public void onStart() { mMediaRouter.addCallback(mSelector, mMediaRouterCallback,
MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY); }
public void onStop() { mMediaRouter.removeCallback(mMediaRouterCallback); super.onStop(); }}
![Page 55: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/55.jpg)
Gerenciamento de sessão: Media Router Callback
public class MediaRouterPlaybackActivity extends ActionBarActivity { protected void onCreate(Bundle savedInstanceState) { mMediaRouter = MediaRouter.getInstance(this); }
public void onStart() { mMediaRouter.addCallback(mSelector, mMediaRouterCallback,
MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY); }
public void onStop() { mMediaRouter.removeCallback(mMediaRouterCallback); super.onStop(); }}
![Page 56: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/56.jpg)
Gerenciamento de sessão: Media Router Callback
public class MediaRouterPlaybackActivity extends ActionBarActivity { protected void onCreate(Bundle savedInstanceState) { mMediaRouter = MediaRouter.getInstance(this); }
public void onStart() { mMediaRouter.addCallback(mSelector, mMediaRouterCallback,
MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY); }
public void onStop() { mMediaRouter.removeCallback(mMediaRouterCallback); super.onStop(); }}
![Page 57: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/57.jpg)
Sender app: Os passos para o sucesso...
1. Descoberta de dispositivos
2. Gerenciamento de sessão
3. Transimissão de dados
![Page 58: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/58.jpg)
Sender app: Os passos para o sucesso...
1. Descoberta de dispositivos
2. Gerenciamento de sessão
3. Transimissão de dados
![Page 59: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/59.jpg)
Sender app: Os passos para o sucesso...
1. Descoberta de dispositivos
2. Gerenciamento de sessão
3. Transimissão de dados
![Page 60: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/60.jpg)
Transmissão de dados: Mensagem genérica
Cast.CastApi.sendMessage (com.google.android.gms.common.api.GoogleApiClient, NAMESPACE, message)
.setResultCallback (new ResultCallback<Status>() {
@Overridepublic void onResult(Status result) {
if (!result.isSuccess()) { Log.e(TAG, "Sending message failed"); }}});
![Page 61: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/61.jpg)
Transmissão de dados: Remote playback
protected void onCreate(Bundle savedInstanceState) { Bundle mediaInfo = new Bundle(); mediaInfo.putString(MediaMetadata.KEY_TITLE, "Big Buck Bunny"); mediaInfo.putString(MediaMetadata.KEY_SUBTITLE, "Blender Foundation"); mediaInfo.putString(MediaMetadata.KEY_STUDIO, "Fusce id nisi turpis. Praesent viverra bibendum semper. Donec tristique, orci");
(...)}
![Page 62: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/62.jpg)
Transmissão de dados: Remote playback
public void onRouteSelected(MediaRouter router, RouteInfo route) { mRemotePlaybackClient = new RemotePlaybackClient(this, route); mRemotePlaybackClient.play(Uri.parse("http://meu_video.mp4"), "video/mp4", mediaInfo, 0, null, new ItemActionCallback() {
@Override public void onResult(Bundle data, String sessionId, MediaSessionStatus sessionStatus, String itemId, MediaItemStatus itemStatus) { logStatus("play: succeeded for item " + itemId); } @Override public void onError(String error, int code, Bundle data) { } });}
![Page 63: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/63.jpg)
Google Cast User Guidelines
![Page 64: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/64.jpg)
Google Cast User Guidelines
https://developers.google.com/cast/docs/design_checklist#sender
![Page 65: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/65.jpg)
![Page 66: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/66.jpg)
![Page 67: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/67.jpg)
CastCompanionLibrary - Registrando receiver app
public class CastApplication extends Application { private static VideoCastManager mCastMgr = null;
public static VideoCastManager getCastManager(Context context) { if (null == mCastMgr) { mCastMgr = VideoCastManager.initialize(context, APPLICATION_ID, null, null); } mCastMgr.setContext(context); return mCastMgr; }}
![Page 68: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/68.jpg)
CastCompanionLibrary - Registrando receiver app
public class CastApplication extends Application { private static VideoCastManager mCastMgr = null;
public static VideoCastManager getCastManager(Context context) { if (null == mCastMgr) { mCastMgr = VideoCastManager.initialize(context, APPLICATION_ID, null, null); } mCastMgr.setContext(context); return mCastMgr; }} Default Receiver App:
CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID
![Page 69: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/69.jpg)
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/media_route_menu_item" android:title="@string/media_route_menu_title" app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider" app:showAsAction="always"/></menu>
Sender app: Descoberta de dispositivos
![Page 70: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/70.jpg)
CastCompanionLibrary - Descoberta de devices
public class PlayerActivity extends ActionBarActivity { private VideoCastManager mCastManager; private MediaInfo mSelectedMedia; private VideoCastConsumerImpl mCastConsumer;
protected void onCreate(Bundle savedInstanceState) { mCastManager = CastApplication.getCastManager(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.main, menu); mCastManager.addMediaRouterButton(menu, R.id.media_route_menu_item); return true; }}
![Page 71: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/71.jpg)
CastCompanionLibrary - Gerenciando sessãoprotected void onCreate(Bundle savedInstanceState) { mCastConsumer = new VideoCastConsumerImpl() { public void onApplicationConnected(ApplicationMetadata appMetadata, String sessionId, boolean wasLaunched) { } public void onApplicationDisconnected(int errorCode) { } public void onDisconnected() { } public void onRemoteMediaPlayerMetadataUpdated() { } public void onFailed(int resourceId, int statusCode) { } public void onConnectionSuspended(int cause) { } public void onConnectivityRecovered() { } }; }protected void onResume() { super.onResume(); mCastManager.addVideoCastConsumer(mCastConsumer); }
![Page 72: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/72.jpg)
protected void onCreate(Bundle savedInstanceState) { Bundle mediaInfo = new Bundle(); mediaInfo.putString(MediaMetadata.KEY_TITLE, "Big Buck Bunny"); mediaInfo.putString(MediaMetadata.KEY_SUBTITLE, "Blender Foundation"); mediaInfo.putString(MediaMetadata.KEY_STUDIO, "Fusce id nisi turpis. Praesent viverra bibendum semper. Donec tristique, orci"); mediaInfo.putString(com.google.sample.castcompanionlibrary.utils.Utils.KEY_URL, http://url.mp4); mediaInfo.putString(com.google.sample.castcompanionlibrary.utils.Utils.KEY_CONTENT_TYPE, "video/mp4"); ArrayList<String> images = new ArrayList<String>(); images.add("http://image_url_480"); images.add("http://image_url_720"); mediaInfo.putStringArrayList(com.google.sample.castcompanionlibrary.utils.Utils.KEY_IMAGES, images); mSelectedMediaInfo = com.google.sample.castcompanionlibrary.utils.Utils.toMediaInfo(mediaInfo);}
CastCompanionLibrary - Reproduzindo vídeo remoto
![Page 73: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/73.jpg)
mediaInfo.putString(MediaMetadata.KEY_TITLE, "Big Buck Bunny");
CastCompanionLibrary - Reproduzindo vídeo remoto
![Page 74: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/74.jpg)
mediaInfo.putString(MediaMetadata.KEY_TITLE, "Big Buck Bunny");
CastCompanionLibrary - Reproduzindo vídeo remoto
![Page 75: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/75.jpg)
CastCompanionLibrary - Reproduzindo vídeo remoto
mediaInfo.putString(MediaMetadata.KEY_SUBTITLE, "Blender Foundation");
![Page 76: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/76.jpg)
CastCompanionLibrary - Reproduzindo vídeo remoto
mediaInfo.putString(MediaMetadata.KEY_SUBTITLE, "Blender Foundation");
![Page 77: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/77.jpg)
CastCompanionLibrary - Reproduzindo vídeo remoto
mediaInfo.putString(MediaMetadata.KEY_STUDIO, "Fusce id nisi turpis. Praesent viverra bibendum semper. Donec tristique, orci");
![Page 78: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/78.jpg)
CastCompanionLibrary - Reproduzindo vídeo remoto
mediaInfo.putString(MediaMetadata.KEY_STUDIO, "Fusce id nisi turpis. Praesent viverra bibendum semper. Donec tristique, orci");
![Page 79: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/79.jpg)
CastCompanionLibrary - Reproduzindo vídeo remoto
images.add("http://image_url_480");
![Page 80: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/80.jpg)
CastCompanionLibrary - Reproduzindo vídeo remoto
images.add("http://image_url_480");
![Page 81: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/81.jpg)
CastCompanionLibrary - Reproduzindo vídeo remoto
public void onApplicationConnected(ApplicationMetadata appMetadata, String sessionId, boolean wasLaunched) { if (null != mSelectedMedia) { mCastManager.startCastControllerActivity(this, mSelectedMedia, 0, true); finish(); return; }}
![Page 82: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/82.jpg)
CastCompanionLibrary - Reproduzindo vídeo remoto
![Page 83: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/83.jpg)
Brindes da CCL
![Page 84: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/84.jpg)
CastControllerActivity
![Page 85: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/85.jpg)
CCL - CastControllerActivity
![Page 86: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/86.jpg)
CCL - CastControllerActivity
![Page 87: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/87.jpg)
CCL - CastControllerActivity
images.add("http://image_url_720");
![Page 88: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/88.jpg)
CCL - CastControllerActivity
<activity android:name="com.google.sample.castcompanionlibrary.cast.player.VideoCastControllerActivity" android:launchMode="singleTask" android:screenOrientation="portrait" android:theme="@style/Theme.CastVideoOverlayYellow" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="<parentActivity>" />
<intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity>
![Page 89: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/89.jpg)
MiniController
![Page 90: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/90.jpg)
CCL - MiniController
![Page 91: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/91.jpg)
CCL - MiniController
![Page 92: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/92.jpg)
CCL - MiniController
<com.google.sample.castcompanionlibrary.widgets.MiniController android:id="@+id/miniController1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:visibility="gone" > </com.google.sample.castcompanionlibrary.widgets.MiniController>
![Page 93: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/93.jpg)
CCL - MiniController
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
// -- Adding MiniController mMini = (MiniController) findViewById(R.id.miniController1); mCastManager.addMiniController(mMini);}protected void onDestroy() { if (null != mCastManager) { mCastManager.removeMiniController(mMini); } super.onDestroy();}
![Page 94: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/94.jpg)
OnGoing Notification
![Page 95: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/95.jpg)
CCL - OnGoing Notification
![Page 96: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/96.jpg)
CCL - OnGoing Notification
![Page 97: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/97.jpg)
CCL - OnGoing Notification<receiver android:name="com.google.sample.castcompanionlibrary.remotecontrol.VideoIntentReceiver" > <intent-filter> <action android:name="com.google.sample.castcompanionlibrary.action.toggleplayback" /> <action android:name="com.google.sample.castcompanionlibrary.action.stop" /> </intent-filter></receiver>
<service android:name="com.google.sample.castcompanionlibrary.notification.VideoCastNotificationService" android:exported="false" > <intent-filter> <action android:name="com.google.sample.castcompanionlibrary.action.toggleplayback" /> <action android:name="com.google.sample.castcompanionlibrary.action.stop" /> <action android:name="com.google.sample.castcompanionlibrary.action.notificationvisibility" /> </intent-filter></service>
![Page 98: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/98.jpg)
CCL - OnGoing Notificationprotected void onResume() { mCastManager = CastApplication.getCastManager(this); mCastManager.incrementUiCounter();}protected void onPause() { mCastManager.decrementUiCounter();}
public class CastApplication extends Application { private static VideoCastManager mCastMgr = null;
public static VideoCastManager getCastManager(Context context) { mCastMgr = VideoCastManager.initialize(context, APPLICATION_ID, null, null); mCastMgr.enableFeatures(VideoCastManager.FEATURE_NOTIFICATION ); return mCastMgr; }}
![Page 99: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/99.jpg)
Lock Screen
![Page 100: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/100.jpg)
CCL - Lock Screen
![Page 101: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/101.jpg)
CCL - LockScreen
public class CastApplication extends Application { private static VideoCastManager mCastMgr = null;
public static VideoCastManager getCastManager(Context context) { mCastMgr = VideoCastManager.initialize(context, APPLICATION_ID, null, null); mCastMgr.enableFeatures(VideoCastManager.FEATURE_NOTIFICATION | VideoCastManager.FEATURE_LOCKSCREEN); return mCastMgr; }}
![Page 102: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/102.jpg)
![Page 103: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/103.jpg)
CCL RULES!!!!!
![Page 104: Integrando sua app Android com Chromecast](https://reader036.vdocuments.net/reader036/viewer/2022081512/55878305d8b42a8f7d8b4607/html5/thumbnails/104.jpg)
Obrigado!
Athila [email protected]@gmail.com
br.linkedin.com/pub/athila-henrique-dos-santos/6/41/744/