我正在使用Jelly Bean丰富的通知系统,我在我的通知中添加了两个操作。我遇到的问题似乎是禁用了行动。
我们的想法是为每个操作设置一个PendingIntent
,并在我注册的BroadcastReceiver中收到通知,以处理两个意图中的操作。
以下是创建通知的代码:
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文本颜色显示。
答案 0 :(得分:0)
您应该从Intent.FLAG_RECEIVER_REPLACE_PENDING
删除PendingIntent
这两个操作的标记,并将其替换为0. That flag is most commonly used with sticky broadcasts,其中最新值是唯一重要的值(例如,检查电池电量) )。
删除该标志将重新启用您的操作。如果您的意图是在任何给定时间只提供一个操作,那么我建议为该通知使用静态ID,以便在任何给定时间只能使用该类型的一个通知。