The media route action provider displays a {@link MediaRouteButton media route button}
in the application's {@link ActionBar} to allow the user to select routes and
to control the currently selected route.
The application must specify the kinds of routes that the user should be allowed
to select by specifying a {@link MediaRouteSelector selector} with the
{@link #setRouteSelector} method.
Refer to {@link MediaRouteButton} for a description of the button that will
appear in the action bar menu. Note that instead of disabling the button
when no routes are available, the action provider will instead make the
menu item invisible. In this way, the button will only be visible when it
is possible for the user to discover and select a matching route.
Prerequisites
To use the media route action provider, the activity must be a subclass of
{@link ActionBarActivity} from the android.support.v7.appcompat
support library. Refer to support library documentation for details.
Example
The application should define a menu resource to include the provider in the
action bar options menu. Note that the support library action bar uses attributes
that are defined in the application's resource namespace rather than the framework's
resource namespace to configure each item.
<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:showAsAction="always"
app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"/>
</menu>
Then configure the menu and set the route selector for the chooser.
public class MyActivity extends ActionBarActivity {
private MediaRouter mRouter;
private MediaRouter.Callback mCallback;
private MediaRouteSelector mSelector;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mRouter = Mediarouter.getInstance(this);
mSelector = new MediaRouteSelector.Builder()
.addControlCategory(MediaControlIntent.CATEGORY_LIVE_AUDIO)
.addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)
.build();
mCallback = new MyCallback();
}
// Add the callback on start to tell the media router what kinds of routes
// the application is interested in so that it can try to discover suitable ones.
public void onStart() {
super.onStart();
mediaRouter.addCallback(mSelector, mCallback,
MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);
MediaRouter.RouteInfo route = mediaRouter.updateSelectedRoute(mSelector);
// do something with the route...
}
// Remove the selector on stop to tell the media router that it no longer
// needs to invest effort trying to discover routes of these kinds for now.
public void onStop() {
super.onStop();
mediaRouter.removeCallback(mCallback);
}
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.sample_media_router_menu, menu);
MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item);
MediaRouteActionProvider mediaRouteActionProvider =
(MediaRouteActionProvider)MenuItemCompat.getActionProvider(mediaRouteMenuItem);
mediaRouteActionProvider.setRouteSelector(mSelector);
return true;
}
private final class MyCallback extends MediaRouter.Callback {
// Implement callback methods as needed.
}
}
|