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();
android android-5.0-lollipop
tokudu
source share