4

我正在处理一些Android代码,我不想构建MediaStyle通知。我已经在大多数媒体播放器和媒体会议中使用AppCompat,并且我还没有使用过我的计划,因此我可以保持4.x兼容性。无法使用支持v4 MediaSession令牌与通知MediaStyle.setMediaSession

问题?那么,我正在尝试制作MediaStyle通知,并为其提供MediaSession标记。我的support.v4.media.session.MediaSession.Token似乎不符合media.session.MediaSession.Token

我试过铸造,只是把它保留原始。我真的很困惑,因为文档说他们是兼容的。

如果你想在代码的其余部分中,code can be found here

或者你也可以在相关的代码看这里。

Intent nIntent = new Intent(context, MainActivity.class); 
    PendingIntent pIntent = PendingIntent.getActivity(context, 0, nIntent, 0); 

    n.setLatestEventInfo(context, notifTitle, notifMessage, pIntent); 

    notificationManager.notify(notifId, n); 

    ComponentName c = new ComponentName("com.thefan.android", "BackgroundService"); 
    ms = new MediaSessionCompat(this, "TheFan", c, pIntent); 
    ms.setMetadata(new MediaMetadataCompat.Builder() 
      .putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, artwork) 
      .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, "Pink Floyd") 
      .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, "Dark Side of the Moon") 
      .putString(MediaMetadataCompat.METADATA_KEY_TITLE, "The Great Gig in the Sky") 
      .build()); 
    // Indicate you're ready to receive media commands 
    ms.setActive(true); 
    // Attach a new Callback to receive MediaSession updates 
    ms.setCallback(new MediaSessionCompat.Callback() { 
     // Implement your callbacks 
    }); 
    // Indicate you want to receive transport controls via your Callback 
    ms.setFlags(MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS); 
    // Create a new Notification 
    final Notification noti = new Notification.Builder(this) 
      // Hide the timestamp 
      .setShowWhen(false) 
        // Set the Notification style 
      .setStyle(new Notification.MediaStyle() 
        // Attach our MediaSession token 
        .setMediaSession(ms.getSessionToken()) 
          // Show our playback controls in the compat view 
        .setShowActionsInCompactView(0, 1, 2)) 
        // Set the Notification color 
      .setColor(0xFFDB4437) 
        // Set the large and small icons 
      .setLargeIcon(artwork) 
      .setSmallIcon(R.drawable.your_small_icon) 
        // Set Notification content information 
      .setContentText("Pink Floyd") 
      .setContentInfo("Dark Side of the Moon") 
      .setContentTitle("The Great Gig in the Sky") 
        // Add some playback controls 
      .addAction(R.drawable.your_prev_icon, "prev", retreivePlaybackAction(3)) 
      .addAction(R.drawable.your_pause_icon, "pause", retreivePlaybackAction(1)) 
      .addAction(R.drawable.your_next_icon, "next", retreivePlaybackAction(2)) 
      .build(); 

回答

2

不可思议的。有一个Token.getToken();你需要使用它。

再次,MediaStyle通知只是API 21兼容,所以祝你好运。

+0

这就是答案。 'compat'标记实例带有对'normal'标记实例的引用,你可以通过调用'getToken()'来获得该标记实例。通过调用静态MediaSessionCompate.Token.fromToken()方法也可以反转。 – aroth

-1

这是可能的。

检查您的导入,也许您导入的是不好的版本。

  • MediaStyle应该android.support.v7.app.NotificationCompat.MediaStyle
  • NotificationBuilder应该是android.support.v7.app.NotificationCompat.Builder
  • 通知应COMPAT android.support.v4.app.NotificationCompat

如果你要支持老版本比21,你需要使用COMPAT类(ALL COMPAT类而不是“正常”的)。

1

对于这可能有所帮助。

首先你需要进口V4 MediaSessionCompat和评论这样一般MediaSession:

//进口android.media.session.MediaSession;

import android.support.v4.media.session.MediaSessionCompat;

在你的代码,你需要使用MediaSessonCompat这样的:

MediaSessionCompat mediaSession =新MediaSessionCompat(getApplicationContext(), “会话标签”);

MediaSessionCompat.Token token = mediaSession.getSessionToken();

mediaStyle.setMediaSession(token);