This sample adds a chromecast icon to an Activity's action bar. When the user clicks the icon to connect to a chromecast device it will play a demo video.
The code assumes the android v7 support libraries are being used.
Sample menu file
res/menu/chromecast.xml
<?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/action_cast" android:title="Cast" app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider" app:showAsAction="always"/></menu>In an activity that extends AppCompatActivity
private MediaRouter mediaRouter;private MediaRouteSelector mediaRouteSelector;private Callback mediaRouterCallback;private GoogleApiClient currentApiClient;@Overrideprotected void onCreate(Bundle savedInstanceState) { // Normal onCreate code... mediaRouter = MediaRouter.getInstance(getApplicationContext()); mediaRouteSelector = new MediaRouteSelector.Builder() .addControlCategory(CastMediaControlIntent.categoryForCast( CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID)) .build(); mediaRouterCallback = new Callback() { @Override public void onRouteSelected(MediaRouter router, MediaRouter.RouteInfo route) { stopCasting(); setupCasting(CastDevice.getFromBundle(route.getExtras())); } @Override public void onRouteUnselected(MediaRouter router, MediaRouter.RouteInfo route) { stopCasting(); } };}@Overrideprotected void onStart() { super.onStart(); mediaRouter.addCallback(mediaRouteSelector, mediaRouterCallback, MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN);}@Overrideprotected void onStop() { mediaRouter.removeCallback(mediaRouterCallback); super.onStop();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.chromecast, menu); MenuItem mediaRouteMenuItem = menu.findItem(R.id.action_cast); MediaRouteActionProvider mediaRouteActionProvider = (MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem); mediaRouteActionProvider.setRouteSelector(mediaRouteSelector); return true;}private void setupCasting(CastDevice device) { currentApiClient = new GoogleApiClient.Builder(this) .addApi(Cast.API, Cast.CastOptions.builder(device, new Listener()).build()) .addConnectionCallbacks(new ConnectionCallbacks() { @Override public void onConnected(Bundle bundle) { Cast.CastApi.launchApplication(currentApiClient, CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID) .setResultCallback(new ResultCallback<ApplicationConnectionResult>() { @Override public void onResult(ApplicationConnectionResult result) { if (result.getStatus().isSuccess()) { // After ten thousand callbacks, we can finally cast something castVideo(); } } }); } @Override public void onConnectionSuspended(int i) { // Log or toast it } }) .addOnConnectionFailedListener(new OnConnectionFailedListener() { @Override public void onConnectionFailed(ConnectionResult connectionResult) { // Log or toast it } }) .build(); currentApiClient.connect();}private void castVideo() { RemoteMediaPlayer remoteMediaPlayer = new RemoteMediaPlayer(); remoteMediaPlayer.load(currentApiClient, new MediaInfo.Builder("http://techslides.com/demos/sample-videos/small.mp4") .setContentType("video/mp4") .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED) .build()); // If remoteMediaPlayer is saved in a field, pause/seek/play can all be called later on as well}private void stopCasting() { if (currentApiClient != null) { Cast.CastApi.stopApplication(currentApiClient); currentApiClient = null; }}Important imports
import com.google.android.gms.cast.Cast;import com.google.android.gms.cast.Cast.ApplicationConnectionResult;import com.google.android.gms.cast.Cast.Listener;import com.google.android.gms.cast.CastDevice;import com.google.android.gms.cast.CastMediaControlIntent;import com.google.android.gms.cast.MediaInfo;import com.google.android.gms.cast.RemoteMediaPlayer;import com.google.android.gms.common.ConnectionResult;import com.google.android.gms.common.api.GoogleApiClient;import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;import com.google.android.gms.common.api.ResultCallback;import android.os.Bundle;import android.support.v4.view.MenuItemCompat;import android.support.v7.app.MediaRouteActionProvider;import android.support.v7.media.MediaRouteSelector;import android.support.v7.media.MediaRouter;import android.support.v7.media.MediaRouter.Callback;import android.view.Menu;import android.view.MenuItem;