The MediaStyle notification does not respond to RemoteControl events.

We are transferring our current play notification to MediaStyle notifications provided on Lollipop. RemoteControlClient seems deprecated and the MediaStyle notification does not handle media button events (e.g. pause / play through the remote control of the headphones).

Has anyone got this job? None of the events in the MediaSessionCallback are triggered.

This is how a multimedia session is initialized.

mSession = new MediaSessionCompat(this, TAG); mSession.setCallback(new MediaSessionCallback()); mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); mSession.setPlaybackToLocal(AudioManager.STREAM_MUSIC); mSession.setActive(true); 

Here's how metadata is set.

  MediaMetadataCompat.Builder metadataBuilder = new MediaMetadataCompat.Builder(); metadataBuilder .putLong(MediaMetadata.METADATA_KEY_DURATION, clip.getDuration()) .putString(MediaMetadata.METADATA_KEY_MEDIA_ID, clip.getClipId()) .putString(MediaMetadata.METADATA_KEY_TITLE, clip.getTitle()) .putString(MediaMetadata.METADATA_KEY_ARTIST, clip.getSourceName()) .putString(MediaMetadata.METADATA_KEY_ALBUM_ART_URI, clip.getImageUrl()) .putLong(MediaMetadata.METADATA_KEY_DURATION, clip.getDuration()); mSession.setMetadata(metadataBuilder.build()); 

Finally, the notification code:

  MediaSession mediaSession = (MediaSession) session.getMediaSession(); Notification.Builder builder = new Notification.Builder(c) .setDefaults(0) .setSmallIcon(R.drawable.ic_notif) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setContentTitle(clip.getTitle()) .setContentText(clip.getSourceName()) .setProgress((int)duration, (int)progress, false) .setWhen(0) .setContentIntent(pendingIntent); if (playing) { builder.addAction(R.drawable.ic_media_pause, c.getString(R.string.media_pause), getPendingIntentForKeyCode(app.getApplicationContext(), KeyEvent.KEYCODE_MEDIA_PAUSE)); } else { builder.addAction(R.drawable.ic_media_play, c.getString(R.string.media_play), getPendingIntentForKeyCode(app.getApplicationContext(), KeyEvent.KEYCODE_MEDIA_PLAY)); } builder.addAction(R.drawable.ic_media_next, c.getString(R.string.media_next), getPendingIntentForKeyCode(app.getApplicationContext(), KeyEvent.KEYCODE_MEDIA_NEXT)); builder.setStyle(new Notification.MediaStyle() .setMediaSession(mediaSession.getSessionToken()) .setShowActionsInCompactView(new int[] {1, 2}) ) ); notification = builder.build(); 
+7
android android-5.0-lollipop
source share
1 answer

Set the playback status in MediaSession with the actions you support:

 PlaybackState state = new PlaybackState.Builder() .setActions( PlaybackState.ACTION_PLAY | PlaybackState.ACTION_PLAY_PAUSE | PlaybackState.ACTION_PLAY_FROM_MEDIA_ID | PlaybackState.ACTION_PAUSE | PlaybackState.ACTION_SKIP_TO_NEXT | PlaybackState.ACTION_SKIP_TO_PREVIOUS) .setState(PlaybackState.STATE_PLAYING, position, speed, SystemClock.elapsedRealtime()) .build(); mSession.setPlaybackState(state); 
+5
source share

All Articles