Java 媒体样式通知操作按钮不适用于PendingEvent.getBroadcast()

Java 媒体样式通知操作按钮不适用于PendingEvent.getBroadcast(),java,android,notifications,android-notifications,android-notification.mediastyle,Java,Android,Notifications,Android Notifications,Android Notification.mediastyle,我正在使用NotificationCompat.MediaStyle()创建具有通知风格的音乐播放器 我实现了在通知中单击操作按钮时发送广播的代码。但我的代码似乎不起作用 以下是我的代码: NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this) .setShowWhen(false)

我正在使用
NotificationCompat.MediaStyle()
创建具有通知风格的音乐播放器

我实现了在通知中单击操作按钮时发送广播的代码。但我的代码似乎不起作用

以下是我的代码:

NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
            .setShowWhen(false)
            // Set the Notification style
            .setStyle(new NotificationCompat.MediaStyle()
                      // Attach our MediaSession token
                      .setMediaSession(mediaSession.getSessionToken())
                      // Show our playback controls in the compact notification view.
                      .setShowActionsInCompactView(0, 1, 2))
            // Set the Notification color
            .setColor(getResources().getColor(R.color.colorPrimary))
            // Set the large and small icons
            .setLargeIcon(largeIcon)
            .setSmallIcon(android.R.drawable.stat_sys_headset)
            // Set Notification content information
            .setContentText("Artist Name")
            .setContentTitle("Album name")
            .setContentInfo("Title name")
            // Add playback actions
            .addAction(android.R.drawable.ic_media_previous, "previous", playbackAction(3))
            .addAction(notificationAction, "pause", play_pauseAction)
            .addAction(android.R.drawable.ic_media_next, "next", playbackAction(2));

((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).notify(NOTIFICATION_ID, notificationBuilder.build());
BroadcastReceiver broadCastPlayback=new BroadcastReceiver(){

        @Override
        public void onReceive(Context context, Intent intent)
        {
            // TODO: Implement this method

            showToast("onReceive");
        }
    };
方法
playBackAction()
如下所示:

private PendingIntent playbackAction(int actionNumber){

        Intent playbackAction;

        switch(actionNumber){
        case 0:
            // Play
            playbackAction = new Intent(BROADCAST_PLAYBACK);
            playbackAction.setAction(ACTION_PLAY);

            return PendingIntent.getBroadcast(this, actionNumber, playbackAction, 0);
        case 1:
            // Pause
            playbackAction = new Intent(BROADCAST_PLAYBACK);
            playbackAction.setAction(ACTION_PAUSE);

            return PendingIntent.getBroadcast(this, actionNumber, playbackAction, 0);
        case 2:
            // Next track
            playbackAction = new Intent(BROADCAST_PLAYBACK);
            playbackAction.setAction(ACTION_NEXT);

            return PendingIntent.getService(this, actionNumber, playbackAction, 0);
        case 3:
            // Previous track
            playbackAction = new Intent(BROADCAST_PLAYBACK);
            playbackAction.setAction(ACTION_PREVIOUS);

            return PendingIntent.getBroadcast(this, actionNumber, playbackAction, 0);
        default:
            break;
        }
        return null;
    }
我的收信人如下:

NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
            .setShowWhen(false)
            // Set the Notification style
            .setStyle(new NotificationCompat.MediaStyle()
                      // Attach our MediaSession token
                      .setMediaSession(mediaSession.getSessionToken())
                      // Show our playback controls in the compact notification view.
                      .setShowActionsInCompactView(0, 1, 2))
            // Set the Notification color
            .setColor(getResources().getColor(R.color.colorPrimary))
            // Set the large and small icons
            .setLargeIcon(largeIcon)
            .setSmallIcon(android.R.drawable.stat_sys_headset)
            // Set Notification content information
            .setContentText("Artist Name")
            .setContentTitle("Album name")
            .setContentInfo("Title name")
            // Add playback actions
            .addAction(android.R.drawable.ic_media_previous, "previous", playbackAction(3))
            .addAction(notificationAction, "pause", play_pauseAction)
            .addAction(android.R.drawable.ic_media_next, "next", playbackAction(2));

((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).notify(NOTIFICATION_ID, notificationBuilder.build());
BroadcastReceiver broadCastPlayback=new BroadcastReceiver(){

        @Override
        public void onReceive(Context context, Intent intent)
        {
            // TODO: Implement this method

            showToast("onReceive");
        }
    };
我在安卓
服务的
onCreate
中注册了广播接收器

IntentFilter filter=new IntentFilter(BROADCAST_PLAYBACK);
registerReceiver(broadCastPlayback,filter);

未调用
onReceive
中的
showtoos()
方法。我想知道
广播是未发送还是未接收

您遇到的问题是筛选器缺少在挂起意图中发送的操作

例如:
.addAction(android.R.drawable.ic\u media\u previous,“previous”,playbackAction(3))
将发送动作
动作\u previous

但boradcast接收器仅在播放时过滤

在筛选器中,您需要添加(或替换为)缺少的操作

举个例子:

filter.addAction(ACTION_PREVIOUS);

以同样的方式添加您定义的其他操作。

检查此答案,它可能会对您有所帮助