我有一个带有操作按钮的自定义通知:
// init okhttp 3 logger
HttpLoggingInterceptor logging = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override public void log(String message) {
Log.d("MyTAG", "OkHttp: " + message);
}
});
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
public class NotificationReceiver extends com.parse.ParsePushBroadcastReceiver {
@Override
public void onPushReceive(Context context, Intent intent) {
...
NotificationActivity notification = new NotificationActivity();
notification.createNotification(context, message, notificationId);
Log.i("tag", "Notification Received!");
}
我想取消点击操作按钮的通知"关闭"。
我知道我需要通知的ID来取消它,但是当我点击"关闭"按钮并创建类CancelNotification,它扩展BroadCastReceiver我获取最后一个通知的通知ID,因此,即使我点击我创建的第一个通知,也会关闭最后一个通知。
我可能做错了什么?
答案 0 :(得分:8)
我找到了
您的pendingIntent始终发送请求代码== 0;
由于您有多个通知,每个通知应使用不同的requestCode。
所以,试着改变:
自:
PendingIntent pendingCancelIntent =
PendingIntent.getBroadcast(context, 0, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT) ;
要:
PendingIntent pendingCancelIntent =
PendingIntent.getBroadcast(context, this.notificationId, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT) ;
我在这里测试了你的代码,并且在我改变之后它正在运行。
答案 1 :(得分:1)
使用“通知”构建器总是更好。 下面是一个例子:
NotificationCompat.Builder mBuilder=new NotificationCompat.Builder(this);
mBuilder.setContentTitle("Your title");
mBuilder.setOnlyAlertOnce(true);
mBuilder.setAutoCancel(true);
mBuilder.setContentText("main content")
mBuilder.setSubText("subtext")
接下来,您将创建一个意图,在点击通知时要打开哪个活动
intent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
然后创建通知管理器
notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = mBuilder.build();
notification.flags = Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(notificationID, notification);
notificationID可以是任何整数值。使用此类型为您提供了始终遵循通知的android规范的优势。
答案 2 :(得分:0)
触发意图删除通知后,您将需要运行以下代码。
NotificationManagerCompat.from(this).cancel(null, notificationId);