【问题标题】:Can't use Support v4 MediaSession Token with Notification MediaStyle.setMediaSession无法将 Support v4 MediaSession 令牌与 Notification MediaStyle.setMediaSession 一起使用
【发布时间】:2015-04-17 14:11:46
【问题描述】:

我正在编写一些 Android 代码,但我不想构建 MediaStyle 通知。我已经在大多数媒体播放器和媒体会话中使用 AppCompat,而我还没有使用的我正计划切换,以便保持 4.x 兼容性。

问题?好吧,我正在尝试制作我的 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();

【问题讨论】:

    标签: android android-mediaplayer android-notifications android-appcompat incompatibletypeerror


    【解决方案1】:

    神奇。有一个 Token.getToken(); 你需要使用它。

    再说一次,MediaStyle 通知仅兼容 API 21,祝你好运。

    【讨论】:

    • 这就是答案。 “compat”令牌实例携带对“普通”令牌实例的引用,您可以通过调用getToken() 来获得它。通过调用静态MediaSessionCompate.Token.fromToken() 方法也可以实现逆向。
    【解决方案2】:

    这可能对谁有帮助。

    首先你需要导入 v4 MediaSessionCompat 并像这样评论一般的 MediaSession:

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

    在您的代码中,您需要像这样使用 MediaSessonCompat:

    MediaSessionCompat mediaSession = new MediaSessionCompat(getApplicationContext(), "session tag");
    
    MediaSessionCompat.Token token = mediaSession.getSessionToken();
    
    mediaStyle.setMediaSession(token);
    

    【讨论】:

      【解决方案3】:

      这是可能的。

      检查您的导入,也许您正在导入错误的版本。

      • 媒体风格应该android.support.v7.app.NotificationCompat.MediaStyle
      • NotificationBuilder 应该是android.support.v7.app.NotificationCompat.Builder
      • 通知应该是兼容的android.support.v4.app.NotificationCompat

      如果您要支持早于 21 的版本,则需要使用 Compat 类(所有兼容类而不是“普通”类)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-27
        • 2019-03-29
        • 1970-01-01
        • 2016-12-05
        • 2011-07-12
        相关资源
        最近更新 更多