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.
- El botón de inicio en la barra de acción no funciona en Lollipop
- Seek Bar thumb no transparente en Android 5.0 API 21 Lollipop
- ¿Cómo puedo enviar una cadena a través de NFC mientras Screen-Pinning?
- Widget no teñido en Lollipop
- CameraManager en dispositivos que funcionan con menos de Lollipop
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();
- Cómo suprimir la notificación en la pantalla de bloqueo en Android 5 (Lollipop), pero dejarlo en el área de notificación?
- Barra de herramientas y ActionBar contextual con AppCompat-v7
- ¿Cómo cerrar la intención de ACTION_USAGE_ACCESS_SETTINGS cuando el usuario hace clic en la aplicación de destino correcta?
- Preferencias de Android TV estándar
- ActivityOptions.makeSceneTransitionAnimation no parece existir
- Uso del Kit Kat DatePicker en el dispositivo Lolipop
- Transición de actividad no realizada (Lollipop)
- Lollipop CalenderView DatePicker no llama al método OnDateChanged ()
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);
- Indexación de aplicaciones para Android y enlaces profundos: ¿me equivoqué todo el tiempo?
- Obtener contactos en android es muy lento