/** * Creates an instance. * * <p>Equivalent to {@code MediaSessionConnector(mediaSession, playbackController, new * DefaultMediaMetadataProvider(mediaSession.getController(), null))}. * * @param mediaSession The {@link MediaSessionCompat} to connect to. * @param playbackController A {@link PlaybackController} for handling playback actions. */ public MediaSessionConnector( MediaSessionCompat mediaSession, PlaybackController playbackController) { this( mediaSession, playbackController, new DefaultMediaMetadataProvider(mediaSession.getController(), null)); }
/** * Creates an instance. * * @param mediaSession The {@link MediaSessionCompat} to connect to. * @param playbackController A {@link PlaybackController} for handling playback actions, or {@code * null} if the connector should handle playback actions directly. * @param doMaintainMetadata Whether the connector should maintain the metadata of the session. * @param metadataExtrasPrefix A string to prefix extra keys which are propagated from the active * queue item to the session metadata. * @deprecated Use {@link MediaSessionConnector#MediaSessionConnector(MediaSessionCompat, * PlaybackController, MediaMetadataProvider)}. */ @Deprecated public MediaSessionConnector( MediaSessionCompat mediaSession, @Nullable PlaybackController playbackController, boolean doMaintainMetadata, @Nullable String metadataExtrasPrefix) { this( mediaSession, playbackController, doMaintainMetadata ? new DefaultMediaMetadataProvider(mediaSession.getController(), metadataExtrasPrefix) : null); }
/** * Overloaded method that persists previously set media actions. * * @param state The state of the video, e.g. playing, paused, etc. * @param position The position of playback in the video. * @param mediaId The media id related to the video in the media session. */ private void updatePlaybackState( @PlaybackStateCompat.State int state, int position, int mediaId) { long actions = mSession.getController().getPlaybackState().getActions(); updatePlaybackState(state, actions, position, mediaId); }
private void initializeMediaSession() { mSession = new MediaSessionCompat(this, TAG); mSession.setFlags( MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); mSession.setActive(true); MediaControllerCompat.setMediaController(this, mSession.getController()); MediaMetadataCompat metadata = new MediaMetadataCompat.Builder() .putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, mMovieView.getTitle()) .build(); mSession.setMetadata(metadata); MediaSessionCallback mMediaSessionCallback = new MediaSessionCallback(mMovieView); mSession.setCallback(mMediaSessionCallback); int state = mMovieView.isPlaying() ? PlaybackStateCompat.STATE_PLAYING : PlaybackStateCompat.STATE_PAUSED; updatePlaybackState( state, MEDIA_ACTIONS_ALL, mMovieView.getCurrentPosition(), mMovieView.getVideoResourceId()); }
public void registerCallback(MediaControllerCompat.Callback callback, Handler handler) { this.mediaSession.getController().registerCallback(callback, handler); }
public void unregisterCallback(MediaControllerCompat.Callback callback) { this.mediaSession.getController().unregisterCallback(callback); }
@Override public void onReceive(Context context, Intent intent) { if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) { // AudioManager tells us that the sound will be played through the speaker Log.d(TAG, "Action audio becoming noisy, pausing ..."); // So we stop playback, if needed mMediaSession.getController().getTransportControls().pause(); } } }
/** * Override to handle requests to begin playback from a search query. An * empty query indicates that the app may play any music. The * implementation should attempt to make a smart choice about what to * play. */ public void onPlayFromSearch(String query, Bundle extras) { Log.d(TAG, "onPlayFromSearch: " + query + ", " + extras); MediaPlayIntentHandler intentHandler = new MediaPlayIntentHandler( mMediaSession.getController().getTransportControls(), mPlaybackManager); intentHandler.mediaPlayFromSearch(extras); }
@Override public int onStartCommand(Intent intent, int flags, int startId) { if (intent != null && ACTION_STOP_NOTIFICATION.equals(intent.getAction())) { mMediaSession.getController().getTransportControls().pause(); mNotification.stopNotification(); } else { MediaButtonReceiver.handleIntent(mMediaSession, intent); } return START_STICKY; }
@Override public void onError(TomahawkMediaPlayer mediaPlayer, final String message) { Log.d(TAG, "onError - mediaPlayer: " + mediaPlayer + ", message: " + message); if (mediaPlayer != mCurrentMediaPlayer) { Log.d(TAG, "Ignoring onError call, because it hasn't been invoked by mCurrentMediaPlayer"); return; } new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { Toast.makeText(TomahawkApp.getContext(), message, Toast.LENGTH_LONG).show(); } }); giveUpAudioFocus(); if (mMediaSession == null) { Log.e(TAG, "onError failed - mMediaSession == null!"); return; } if (mPlaybackManager.hasNextEntry()) { mMediaSession.getController().getTransportControls().skipToNext(); } else { mMediaSession.getController().getTransportControls().pause(); } } };
@Override public void onCompletion(TomahawkMediaPlayer mediaPlayer, Query query) { if (mediaPlayer != mCurrentMediaPlayer) { Log.d(TAG, "Ignoring onCompletion call, because it hasn't been invoked by mCurrentMediaPlayer"); return; } if (mMediaSession == null) { Log.e(TAG, "onCompletion failed - mMediaSession == null!"); return; } if (query != null && query == mPlaybackManager.getCurrentQuery()) { Log.d(TAG, "onCompletion - mediaPlayer: " + mediaPlayer + ", query: " + query); if (mPlaybackManager.hasNextEntry()) { mMediaSession.getController().getTransportControls().skipToNext(); } else { mMediaSession.getController().getTransportControls().pause(); } } }
/** * Starts the cover fetching task. Make sure that mLastTrack is set correctly before. */ private void startCoverImageTask() { // Try to get old metadata to save image retrieval. MediaMetadataCompat oldData = mMediaSession.getController().getMetadata(); MediaMetadataCompat.Builder metaDataBuilder; if (oldData == null) { metaDataBuilder = new MediaMetadataCompat.Builder(); } else { metaDataBuilder = new MediaMetadataCompat.Builder(mMediaSession.getController().getMetadata()); } // Reset metadata image in case covergenerator fails metaDataBuilder.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, null); mMediaSession.setMetadata(metaDataBuilder.build()); // Start the actual task based on the current track. (mLastTrack get sets before in updateStatus()) mCoverLoader.getImage(mLastTrack,-1,-1); }
private static NotificationCompat.Builder generateNotificationBuilderFrom(Context context, MediaSessionCompat mediaSession) { MediaControllerCompat controller = mediaSession.getController(); MediaMetadataCompat mediaMetadata = controller.getMetadata(); MediaDescriptionCompat description = mediaMetadata.getDescription(); NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder .setContentTitle(description.getTitle()) .setContentText(description.getSubtitle()) .setSubText(description.getDescription()) .setLargeIcon(description.getIconBitmap()) .setContentIntent(controller.getSessionActivity()) // always null... .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setDeleteIntent(generateActionIntent(context, KeyEvent.KEYCODE_MEDIA_STOP)); return builder; }
"onEventAsync(PipeLine.ResultsEvent event) failed - mMediaSession == null!"); } else { mMediaSession.getController().getTransportControls().play();
mediaSession.getController().dispatchMediaButtonEvent(intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT)); } else {
@Override public void receiveAlbumBitmap(Bitmap bm) { // Try to get old metadata to save image retrieval. MediaMetadataCompat.Builder metaDataBuilder; metaDataBuilder = new MediaMetadataCompat.Builder(mMediaSession.getController().getMetadata()); if (mHideMediaOnLockscreen) { metaDataBuilder.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, null); } else { metaDataBuilder.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, bm); } mMediaSession.setMetadata(metaDataBuilder.build()); mNotificationManager.setNotificationImage(bm); }
if (!currentQuery.isPlayable() || currentQuery.getMediaPlayerClass() == null) { Log.e(TAG, currentQuery + " isn't playable. Skipping to next track"); mMediaSession.getController().getTransportControls().skipToNext(); } else {
transportControls = mediaSession.getController().getTransportControls(); mediaSession.setActive(true); mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int movieId = getActivity().getIntent().getIntExtra(EXTRA_MOVIE_ID, -1); if (movieId == -1) { Log.w(TAG, "Invalid movieId, cannot playback."); throw new IllegalArgumentException("Invalid movieId " + movieId); } mPlaylistAdapter = MockPlaylistAdapterFactory.createMoviePlaylistAdapterWithActiveMovieId(movieId); mSession = new MediaSessionCompat(getContext(), TAG); mSession.setFlags( MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); mSession.setActive(true); MediaControllerCompat.setMediaController((Activity) getContext(), mSession.getController()); mPlayerGlue = new PrimaryPlaybackControlsGlue<>( getContext(), new MediaPlayerAdapter(getContext()), mSession.getController()); mPlayerGlue.setHost(new VideoSupportFragmentGlueHost(this)); mPlayerGlue.addPlayerCallback(playWhenReadyPlayerCallback); mPlayerGlue.addPlayerCallback(playPausePlayerCallback); mMediaSessionCallback = new MediaSessionCallback(mPlayerGlue); mSession.setCallback(mMediaSessionCallback); playMedia(mPlaylistAdapter.getCurrentItem()); }
MediaMetadataCompat oldData = mMediaSession.getController().getMetadata(); MediaMetadataCompat.Builder metaDataBuilder; if (oldData == null) { metaDataBuilder = new MediaMetadataCompat.Builder(); } else { metaDataBuilder = new MediaMetadataCompat.Builder(mMediaSession.getController().getMetadata());