2014-10-21 20 views
7

Devam etmekte olan oynatma bildirimimizi Lollipop'te tanıtılan MediaStyle bildirimlerine geçirme sürecindeyiz. RemoteControlClient kullanımdan kaldırılmış gibi görünüyor ve MediaStyle bildirimi medya düğmesi olaylarını (uzaktan kumanda ile duraklatma/oynatma gibi) işlemiyor.MediaStyle bildirimi, RemoteControl olaylarına yanıt vermiyor.

Bu işi yapan var mı? MediaSessionCallback'teki olaylardan hiçbiri çağrılmıyor. çalma devlet Set

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

cevap

5

: Burada

medya oturumu İşte

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

meta, Nihayet bildirim kodunu
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()); 

ayarlanır nasıl olduğunu başlatılır nasıl MediaSession'ınızda desteklediğiniz eylemler ile:

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

Uyumluluk kütüphanesi için şu gibi bir şey olmalıdır: PlaybackStateCompat.Builder stateBuilder = new PlaybackStateCompat.Builder(); stateBuilder.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); stateBuilder.setState (PlaybackState.STATE_PLAYING, 0, 1); m_objMediaSession.setPlaybackState (stateBuilder.build()); – goRGon

+1

^hafif düzeltme, 'PlaybackStateCompat.ACTION_PLAY' vb. – hypd09

İlgili konular