更新后的媒体样式通知不工作至Android 5.0 [英] Media style notification not working after update to Android 5.0

查看:593
本文介绍了更新后的媒体样式通知不工作至Android 5.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图实施使用该<一个在媒体样式的通知href=\"http://www.bin$p$pss.com/tutorial/using-android-media-style-notifications-with-media-session-controls/165\"相对=nofollow>链接。然而,当我最近更新到Android 5.0 SDK中,了createSession 方法是行不通的。

I tried implementing the Media Style Notification using this link. However when I recently updated to Android 5.0 SDK, the createSession method is not working.

mMediaPlayer = new MediaPlayer();
mManager = (MediaSessionManager) getSystemService(Context.MEDIA_SESSION_SERVICE);
mSession = mManager.createSession("sample session"); //shows compile error
mController = MediaController.fromToken( mSession.getSessionToken() );

是否有需要可以使用任何其他的方法?当我检查更改日志,它说,了createSession 不再使用。有什么办法,然后实施这样的媒体风格通知。

Is there any other method that needs to be used? When I checked the change log, it said that createSession is no longer used. What are the alternatives then for implementing such media style notifications.

推荐答案

您不再使用 MediaController.fromToken ,而是<一个href=\"https://developer.android.com/reference/android/media/session/MediaSession.html#getController()\"><$c$c>MediaSessin.getController.
而不再使用 MediaSessionManager.createSession ,而是只需要创建一个新的 MediaSession 对象和<一个href=\"https://developer.android.com/reference/android/media/session/MediaSession.html#getSessionToken()\"><$c$c>MediaSession.getSessionToken找回你的<一个href=\"https://developer.android.com/reference/android/media/session/MediaSession.Token.html\"><$c$c>MediaSession.Token.

You no longer use MediaController.fromToken, but instead MediaSessin.getController. And you no longer use MediaSessionManager.createSession, but instead just create a new MediaSession object and MediaSession.getSessionToken to retrieve your MediaSession.Token.

一个非常基本的示例实现可能是这样的:

A very basic example implementation might be something like:

private static final String ACTION_TOGGLE_PLAYBACK = "com.your.package.name.TOGGLE_PLAYBACK";
private static final String ACTION_PREV = "com.your.package.name.PREV";
private static final String ACTION_NEXT = "com.your.package.name.NEXT";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...

    final Bitmap artwork = ...;

    // Create a new MediaSession
    final MediaSession mediaSession = new MediaSession(this, "debug tag");
    // Update the current metadata
    mediaSession.setMetadata(new MediaMetadata.Builder()
            .putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, artwork)
            .putString(MediaMetadata.METADATA_KEY_ARTIST, "Pink Floyd")
            .putString(MediaMetadata.METADATA_KEY_ALBUM, "Dark Side of the Moon")
            .putString(MediaMetadata.METADATA_KEY_TITLE, "The Great Gig in the Sky")
            .build());
    // Indicate you're ready to receive media commands
    mediaSession.setActive(true);
    // Attach a new Callback to receive MediaSession updates
    mediaSession.setCallback(new MediaSession.Callback() {

        // Implement your callbacks

    });
    // Indicate you want to receive transport controls via your Callback
    mediaSession.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(mediaSession.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();

    // Do something with your TransportControls
    final TransportControls controls = mediaSession.getController().getTransportControls();

    ((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).notify(1, noti);
}

private PendingIntent retreivePlaybackAction(int which) {
    Intent action;
    PendingIntent pendingIntent;
    final ComponentName serviceName = new ComponentName(this, YourPlaybackService.class);
    switch (which) {
        case 1:
            // Play and pause
            action = new Intent(ACTION_TOGGLE_PLAYBACK);
            action.setComponent(serviceName);
            pendingIntent = PendingIntent.getService(this, 1, action, 0);
            return pendingIntent;
        case 2:
            // Skip tracks
            action = new Intent(ACTION_NEXT);
            action.setComponent(serviceName);
            pendingIntent = PendingIntent.getService(this, 2, action, 0);
            return pendingIntent;
        case 3:
            // Previous tracks
            action = new Intent(ACTION_PREV);
            action.setComponent(serviceName);
            pendingIntent = PendingIntent.getService(this, 3, action, 0);
            return pendingIntent;
        default:
            break;
    }
    return null;
}

结果

这篇关于更新后的媒体样式通知不工作至Android 5.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆