【发布时间】:2018-03-27 10:23:03
【问题描述】:
我正在使用NotificationCompat.Builder 类发布通知并向其添加一个名为取消的操作按钮
我希望,单击此操作按钮应该会取消通知。为此,我通过在 Intent 上调用 putExtra(String, int) 发送广播并将通知 ID 附加到 Intent 对象BroadcastReceiver 通过调用getIntExtra(String, int) 接收到Notification 的id 并通过调用NotificationManagerCompat.cancel(id) 取消通知
但是,每次我尝试,BroadcastReceiver 收到的id 的值都是 8。因此,我无法取消通知。
这是我将操作按钮添加到通知的代码,
Intent cancelIntent = new Intent(this, NotificationActionReceiver.class);
cancelIntent.putExtra(EXTRA_NOTIFICATION_ID, id);
cancelIntent.setAction(ACTION_DISMISS);
if (BuildConfig.DEBUG)
Log.d(TAG, "Sent id: "+id);
PendingIntent pendingCancelIntent = PendingIntent.getBroadcast(this, 0, cancelIntent, 0);
builder.addAction(R.drawable.ic_dismiss, "Cancel", pendingCancelIntent);
BroadcastReceiver 类
public class NotificationActionReceiver extends BroadcastReceiver {
private final static String TAG = NotificationActionReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive(), getAction == "+intent.getAction());
switch (intent.getAction()){
case MyActivity.ACTION_DISMISS:
int id = intent.getIntExtra(MyActivity.EXTRA_NOTIFICATION_ID, -1);
if (BuildConfig.DEBUG)
Log.d(TAG, "Notification id received: "+id);
NotificationManagerCompat managerCompat = NotificationManagerCompat.from(context);
managerCompat.cancel(id);
break;
case ....:
....
}
}
}
日志猫总是报告 BroadcastReciver 获取通知 id 的值为 8
【问题讨论】:
-
正如@Nik 所说,生成
PendingIntent时必须使用标志PendingIntent.FLAG_UPDATE_CURRENT。这可确保您的“额外”将在PendingIntent中。否则,您最终只会引用现有的PendingIntent,其中可能包含其他“附加”。
标签: android android-intent android-notifications