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. 
...
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 ...
Chromecast Dev Mode
Bibliotecas necessárias 
compile 'com.android.support:appcompat-v7:20.0.0' 
compile 'com.android.support:mediarouter-v7:20...
AndroidManifest 
<meta-data 
android:name="com.google.android.gms.version" 
android:value="@integer/google_play_services_v...
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 code 
The interesting 
parts :)
Inicializar API 
public class MainActivity extends ActionBarActivity 
@Override onCreate() 
// Configure Cast device disco...
Cast Button 
<item 
android:id="@+id/menu_item" 
android:title="@string/title" 
app:actionProviderClass="android.support.v...
Cast Button - Activity 
onCreateOptionsMenu(Menu menu) { 
super.onCreateOptionsMenu(menu); 
getMenuInflater().inflate(R.me...
Comunicação 
class MessagesHub implements MessageReceivedCallback { 
public String getNamespace() { 
return getString(R.st...
Envio de mensagem 
(Sender App) 
Cast.CastApi.sendMessage(mApiClient, 
mMessageHub.getNamespace(), message) 
.setResultCal...
Recepção da mensagem 
(Receiver App) 
window.castReceiverManager = 
cast.receiver.CastReceiverManager.getInstance(); 
wind...
MAGIC! 
Sources at: http://goo.gl/xuu9b8
Desligar 
try { 
Cast.CastApi.stopApplication(mApiClient, mSessionId); 
if (mMessageHub != null) { 
Cast.CastApi.removeMes...
Por: Pedro Veloso (http://goo.gl/5y4IZQ) 
Slides disponíveis em : http://goo.gl/0xvjxr
Próximos SlideShares
Carregando em…5
×

Desenvolver para Chromecast

586 visualizações

Publicada em

Desenvolvimento para Chromecast orientado a Android, apresentação dada no Android LX 2014.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
586
No SlideShare
0
A partir de incorporações
0
Número de incorporações
7
Ações
Compartilhamentos
0
Downloads
7
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Desenvolver para Chromecast

  1. 1. Desenvolver para Chromecast
  2. 2. O que é?
  3. 3. O que é?
  4. 4. O que é?
  5. 5. O que NÃO é?
  6. 6. Cenário típico Image source: Google Developers webpage
  7. 7. Algumas Particularidades •mDNS •OTA updates automáticos •Android / ChromeOS •Pairing com PIN / Ultrassons
  8. 8. 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!
  9. 9. Existem 2 tipos de aplicações • Sender Applications • Receiver Applications
  10. 10. Sender Applications
  11. 11. Android Dev Setup • Habilitiar desenvolvimento no dispositivo • No projecto: – Incluir bibliotecas de desenvolvimento – Algum boilerplate code – Cast Button, Conectividade, ...
  12. 12. Chromecast Dev Mode
  13. 13. 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'
  14. 14. AndroidManifest <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> android:theme="@style/Theme.AppCompat"
  15. 15. Sender App lifecycle Inicializar API Descobrir e conectar Iniciar Receiver App Receber e enviar msgs Desconectar
  16. 16. Design Guidelines Mais info em: http://goo.gl/NFoHXa
  17. 17. Google Cast Badge http://goo.gl/NFoHXa
  18. 18. Google Cast Store
  19. 19. Sender APP code The interesting parts :)
  20. 20. Inicializar API public class MainActivity extends ActionBarActivity @Override onCreate() // Configure Cast device discovery mMediaRouter = 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 discovery mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback, MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);
  21. 21. Cast Button <item android:id="@+id/menu_item" android:title="@string/title" app:actionProviderClass="android.support.v7.app. MediaRouteActionProvider" app:showAsAction="always"/>
  22. 22. 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; }
  23. 23. Comunicação class 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();
  24. 24. 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"); } } });
  25. 25. 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); }
  26. 26. MAGIC! Sources at: http://goo.gl/xuu9b8
  27. 27. Desligar try { 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();
  28. 28. Por: Pedro Veloso (http://goo.gl/5y4IZQ) Slides disponíveis em : http://goo.gl/0xvjxr

×