La notificación de MediaStyle no responde a eventos de RemoteControl.

Estamos en el proceso de migrar nuestra notificación de reproducción en curso a las notificaciones de MediaStyle introducidas en Lollipop. RemoteControlClient parece estar obsoleto, y la notificación de MediaStyle no está manejando los eventos del botón multimedia (como pausa / reproducción a través de los auriculares remotos).

¿Alguien consiguió este trabajo? No se llama a ninguno de los eventos en MediaSessionCallback.

Aquí se muestra cómo se inicializa la sesión de medios

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); 

A continuación se muestra cómo se establece el metadato

  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()); 

Finalmente, el código de notificación:

  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(); 

Establezca el estado de reproducción en su MediaSession con las acciones que admita:

 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); 
  • Lollipop - ProgressDialog cambio de color
  • Cómo solucionar IncompatibleClassChangeError durante Android Jackson Parsing usando anotaciones en Android Lollipop?
  • Soft Navigation Bar superpone la aplicación en Lollipop
  • Adición de dos barras de herramientas AppCompat con diferentes temas
  • Android Studio piensa que estoy construyendo para API Nivel 1 en lugar de Android L
  • No se pueden usar algunas de las características de L SDK
  • Spinner funcionando mal en Lollipop
  • Forzar la red Wi-Fi para aplicaciones de terceros
  • La aplicación nativa se bloquea en Android L
  • Cómo cambiar el color del teclado virtual "Enter" / "Siguiente" botón en lollipop
  • NullPointerException debido a 'void dalvik.system.CloseGuard.close ()' en lollipop
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.