@Override public void onAttach(Activity host) { super.onAttach(host); router=MediaRouter.getInstance(host); }
@Override public void onStart() { super.onStart(); router.addCallback(selector, cb, MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY); }
@Override public void onStop() { router.removeCallback(cb); super.onStop(); }
@Override public void onAttach(Activity host) { super.onAttach(host); router=MediaRouter.getInstance(host); provider=new DemoRouteProvider(getActivity()); router.addProvider(provider); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); preso= PresoRoster .getInstance() .getPresoById(getIntent().getIntExtra(EXTRA_PRESO_ID, 0)); setContentView(R.layout.activity_main); pager=(ViewPager)findViewById(R.id.pager); helper=new PresentationHelper(this, this); selector= new MediaRouteSelector.Builder() .addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK) .build(); router=MediaRouter.getInstance(this); router.addCallback(selector, routeCB, MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY); if (isDirectToTV()) { getSupportActionBar().hide(); } setupPager(); }
@Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); if (mCancelled) { if (mPlayer != null) mPlayer.onRouteDialogCancelled(); return; } if (mController != null) { MediaRouter router = MediaRouter.getInstance(mContext); mController.onRouteSelected(mPlayer, router, router.getSelectedRoute()); } } }
private void updateMediaSession() { if (!mMediaNotificationInfo.supportsPlayPause()) return; if (mMediaSession == null) mMediaSession = createMediaSession(); try { // Tell the MediaRouter about the session, so that Chrome can control the volume // on the remote cast device (if any). // Pre-MR1 versions of JB do not have the complete MediaRouter APIs, // so getting the MediaRouter instance will throw an exception. MediaRouter.getInstance(mContext).setMediaSessionCompat(mMediaSession); } catch (NoSuchMethodError e) { // Do nothing. Chrome can't be casting without a MediaRouter, so there is nothing // to do here. } mMediaSession.setMetadata(createMetadata()); PlaybackStateCompat.Builder playbackStateBuilder = new PlaybackStateCompat.Builder().setActions( PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE); if (mMediaNotificationInfo.isPaused) { playbackStateBuilder.setState(PlaybackStateCompat.STATE_PAUSED, PlaybackStateCompat.PLAYBACK_POSITION_UNKNOWN, 1.0f); } else { // If notification only supports stop, still pretend playbackStateBuilder.setState(PlaybackStateCompat.STATE_PLAYING, PlaybackStateCompat.PLAYBACK_POSITION_UNKNOWN, 1.0f); } mMediaSession.setPlaybackState(playbackStateBuilder.build()); }
@Override public void addMediaStateListener(MediaStateListener listener) { if (mediaRouterInitializationFailed()) return; if (mAvailableRouteListeners.isEmpty()) { getMediaRouter().addCallback(mMediaRouteSelector, mDeviceDiscoveryCallback, MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY); Log.d(TAG, "Started device discovery"); // Get the initial state mRoutesAvailable = getMediaRouter().isRouteAvailable( mMediaRouteSelector, MediaRouter.AVAILABILITY_FLAG_IGNORE_DEFAULT_ROUTE); } mAvailableRouteListeners.add(listener); // Send the current state to the listener. listener.onRouteAvailabilityChanged(mRoutesAvailable); }
@Override public void startObservingMediaSinks(String sourceId) { if (mAndroidMediaRouter == null) return; MediaSource source = MediaSource.from(sourceId); if (source == null) return; MediaRouteSelector routeSelector = source.buildRouteSelector(); if (routeSelector == null) { // If the application invalid, report no devices available. onSinksReceived(sourceId, new ArrayList<MediaSink>()); return; } String applicationId = source.getApplicationId(); DiscoveryCallback callback = mDiscoveryCallbacks.get(applicationId); if (callback != null) { callback.addSourceUrn(sourceId); return; } List<MediaSink> knownSinks = new ArrayList<MediaSink>(); for (RouteInfo route : mAndroidMediaRouter.getRoutes()) { if (route.matchesSelector(routeSelector)) { knownSinks.add(MediaSink.fromRoute(route)); } } callback = new DiscoveryCallback(sourceId, knownSinks, this, routeSelector); mAndroidMediaRouter.addCallback( routeSelector, callback, MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY); mDiscoveryCallbacks.put(applicationId, callback); }
private void updateRouteDescription() { RouteInfo route = mMediaRouter.getSelectedRoute(); mInfoTextView.setText( "Currently selected route:" + "\nName: " + route.getName() + "\nProvider: " + route.getProvider().getPackageName() + "\nDescription: " + route.getDescription() + "\nStatistics: " + mSessionManager.getStatistics()); }
public void onSessionClosed() { if (mSession == null) return; if (mClientRecords.isEmpty()) { mRoutes.clear(); } else { mLastRemovedRouteRecord = mClientRecords.values().iterator().next(); for (ClientRecord client : mClientRecords.values()) { mManager.onRouteClosed(client.routeId); mRoutes.remove(client.routeId); } mClientRecords.clear(); } mSession = null; if (mPendingCreateRouteRequest != null) { launchSession(mPendingCreateRouteRequest); mPendingCreateRouteRequest = null; } else if (mAndroidMediaRouter != null) { mAndroidMediaRouter.selectRoute(mAndroidMediaRouter.getDefaultRoute()); } }
@Override public final boolean isRemotePlaybackAvailable() { if (mediaRouterInitializationFailed()) return false; return getMediaRouter().getSelectedRoute().getPlaybackType() == MediaRouter.RouteInfo.PLAYBACK_TYPE_REMOTE || getMediaRouter().isRouteAvailable( mMediaRouteSelector, MediaRouter.AVAILABILITY_FLAG_IGNORE_DEFAULT_ROUTE); }
private void disconnect() { if (client != null) { client.release(); client=null; } router.getDefaultRoute().select(); }
mMediaRouter = MediaRouter.getInstance(this); mPlayer = Player.create(MainActivity.this, mMediaRouter.getSelectedRoute()); mSessionManager.setPlayer(mPlayer); mSessionManager.setCallback(new SessionManager.Callback() {
@Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); mDialogFragment = null; if (mCancelled) return; MediaSink newSink = MediaSink.fromRoute(androidMediaRouter().getSelectedRoute()); delegate().onSinkSelected(newSink); } };
/** * Reset the media route to the default */ protected void clearMediaRoute() { if (getMediaRouter() != null) { getMediaRouter().getDefaultRoute().select(); registerRoute(getMediaRouter().getDefaultRoute()); } }
@Override public void onStop() { router.removeCallback(cb); super.onStop(); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); selectedRoute=(TextView)findViewById(R.id.selected_route); router=MediaRouter.getInstance(this); selector= new MediaRouteSelector.Builder().addControlCategory(MediaControlIntent.CATEGORY_LIVE_AUDIO) .addControlCategory(MediaControlIntent.CATEGORY_LIVE_VIDEO) .addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK) .build(); }
@Override public void onStart() { super.onStart(); router.addCallback(selector, cb, MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY); }
private void updateButtons() { MediaRouter.RouteInfo route = mMediaRouter.getSelectedRoute(); // show pause or resume icon depending on current state mPauseResumeButton.setImageResource( mPaused ? R.drawable.ic_action_play : R.drawable.ic_action_pause); // disable pause/resume/stop if no session mPauseResumeButton.setEnabled(mSessionManager.hasSession()); mStopButton.setEnabled(mSessionManager.hasSession()); // only enable seek bar when duration is known PlaylistItem item = getCheckedPlaylistItem(); mSeekBar.setEnabled(item != null && item.getDuration() > 0); if (mRemoteControlClient != null) { mRemoteControlClient.setPlaybackState(mPaused ? RemoteControlClient.PLAYSTATE_PAUSED : RemoteControlClient.PLAYSTATE_PLAYING); } }