Android 通知操作 PendingIntent.getBroadCast 不起作用

Android Notification Action PendingIntent.getBroadCast does not work

我的 Android 通知操作按钮根本不起作用。我的服务中有以下代码,并且接收器在清单中 NOT 注册,因为它没有做任何更改。我可以从另一个 activity 发送广播,效果很好,但某处有问题。

这是与按钮配对的 PendingIntents

    Intent next = new Intent(getString(R.string.receiver_notification_media_change));
    next.setAction(NOTIFICATION_MEDIA_CHANGE_NEXT);
    PendingIntent pendingIntentNext = PendingIntent.getBroadcast(getApplicationContext(), 0, next, PendingIntent.FLAG_UPDATE_CURRENT);

    Intent last = new Intent(getString(R.string.receiver_notification_media_change));
    last.setAction(NOTIFICATION_MEDIA_CHANGE_BACK);
    PendingIntent pendingIntentLast = PendingIntent.getBroadcast(getApplicationContext(), 0, last, PendingIntent.FLAG_UPDATE_CURRENT);

通知:

Notification.Builder mBuilder = new Notification.Builder(getApplicationContext())
                .setVisibility(Notification.VISIBILITY_PUBLIC)
                .setSmallIcon(smallDrawableResId)
                .addAction(R.drawable.icon1, "as", pendingIntentLast)
                .addAction(R.drawable.icon2, "asdf", pendingIntentNext)
                .setContentTitle(title)
                .setContentText("title")
                .setLargeIcon(icon)
                .setContentIntent(pendingIntent) //to an activity. Works great
                .setOngoing(true)
                .setStyle(new Notification.MediaStyle()
                        .setShowActionsInCompactView(0, 1));

这是在下面的 class 中声明的 BroadcastReceiver。

private BroadcastReceiver notificationMediaChanger = new BroadcastReceiver()
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        String action = intent.getAction();

        System.out.println("RECEIVEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD");

        if(action.equals(NOTIFICATION_MEDIA_CHANGE_NEXT))
            playNextSong();
        else if(action.equals(NOTIFICATION_MEDIA_CHANGE_BACK))
            playPreviousSong();
    }
};

OnCreate 接收器被注册

        registerReceiver(notificationMediaChanger, new IntentFilter(getString(R.string.receiver_notification_media_change))); //LocalBroadcastManager.getInstance(getApplicationContext()) appears to be equivalent.

并且 OnStop 被移除:

        unregisterReceiver(notificationMediaChanger);

您的操作字符串不匹配。

Intent next = new Intent(getString(R.string.receiver_notification_media_change));
next.setAction(NOTIFICATION_MEDIA_CHANGE_NEXT);

出于某种原因,您要将一个操作字符串替换为另一个。不知道为什么。

registerReceiver(notificationMediaChanger, new IntentFilter(getString(R.string.receiver_notification_media_change)));

在这里,您使用的是第一个操作字符串。您的 Intent 有第二个操作字符串。这些大概是不一样的。

还有:

  • LocalBroadcastManager 未被 PendingIntent

  • 使用
  • 除非 Notification 仅在屏幕上而您的 activity 在屏幕上(这很奇怪),否则您需要在清单中注册接收器