1

我正在使用 Jelly Bean 的丰富通知系统,并在通知中添加了两个操作。我遇到的问题是这些操作似乎被禁用了。

这个想法是为PendingIntent每个动作设置一个,并在我注册的广播接收器中得到通知,以处理两个意图中的动作。

以下是创建通知的代码:

        Intent startIntent = new Intent(Notifications.START);
        Intent resetIntent = new Intent(Notifications.RESET);

        PendingIntent startPendingIntent = PendingIntent.getBroadcast(ctx,
                whichOne, startIntent,
                Intent.FLAG_RECEIVER_REPLACE_PENDING);
        PendingIntent resetPendingIntent = PendingIntent.getBroadcast(ctx,
                whichOne, resetIntent,
                Intent.FLAG_RECEIVER_REPLACE_PENDING);

        [...]

        notificationBuilder = new Notification.Builder(ctx)
                .setContentTitle(s)
                .setContentText("")
                .setContentIntent(appIntent)
                .setSmallIcon(R.drawable.ic_launcher)

                .addAction(R.drawable.play,
                        ctx.getString(R.string.START), startPendingIntent)
                .addAction(R.drawable.reload,
                        ctx.getString(R.string.RESET_TIMER),
                        resetPendingIntent);
        [...]

然后我注册Receiver这样的:

IntentFilter filter = new IntentFilter();
    filter.addAction(Notifications.START);
    filter.addAction(Notifications.RESET);

    receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, intent.getAction(), Toast.LENGTH_LONG)
                    .show();

        }
    };

    registerReceiver(receiver, filter);

我遇到的问题是这些操作似乎被禁用了。我无法单击它们,它们以典型的禁用 alpha 文本颜色显示。

4

1 回答 1

0

您应该Intent.FLAG_RECEIVER_REPLACE_PENDING从您PendingIntent的两个操作中删除标志并将其替换为 0。该标志最常用于粘性广播,其中最近的值是唯一重要的值(例如检查电池电量)。

删除该标志将重新启用您的操作。如果您的意图是在任何给定时间只提供一个操作,那么我建议对该通知使用静态 ID,以便在任何给定时间只能使用该类型的一个通知。

于 2013-03-12T15:11:34.813 回答