gpt4 book ai didi

java - 单击通知后 Alarmmanager 未取消

转载 作者:行者123 更新时间:2023-11-30 10:46:48 26 4
gpt4 key购买 nike

我正在开发一个带有 alarmmanager 和服务的应用程序,在某些情况下我无法取消通知。我正在使用 fragment 。

我的应用每隔“x”分钟发送两个通知。我有一个启动服务的按钮和另一个停止服务的按钮。当我启动服务时,会触发通知,当我按下停止按钮时,它会正常工作。但是当我启动服务并退出应用程序时,通知会正常触发,但是当我单击通知时,应用程序会打开,然后我按下停止按钮但通知不会停止,通知会继续被触发。

我调用 alarmanager.cancel(pendingintent) 的函数在同一个 fragment 中..(MainFragment.class 是第一个 fragment )。

MainFragment.class

    intent = new Intent(getContext(), TimeAlarm.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
intent.setAction(Long.toString(System.currentTimeMillis()));
pendingIntent = PendingIntent.getBroadcast(mContext, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);

am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 15000,
15000,
pendingIntent);

intent2 = new Intent(getContext(), TimeAlarm2.class);
intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
intent2.setAction(Long.toString(System.currentTimeMillis()));
pendingIntent2 = PendingIntent.getBroadcast(getContext(), 1,
intent2, PendingIntent.FLAG_UPDATE_CURRENT);

am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 15000,
15000,
pendingIntent2);

扩展 BroadcastReceiver 的 TimeAlarm.class

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.icon)
.setContentTitle("...")
.setContentText("...");

Intent resultIntent = new Intent(context, MainActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(MainActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);

mBuilder.setAutoCancel(true);

mBuilder.build().flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONGOING_EVENT;

NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(0, mBuilder.build());

扩展 BroadcastReceiver 的 TimeAlarm2.class

NotificationCompat.Builder mBuilder2 = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("..")
.setContentText("..");

Intent resultIntent = new Intent(context, MainActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(MainActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(1, PendingIntent.FLAG_UPDATE_CURRENT);

mBuilder2.setContentIntent(resultPendingIntent);

mBuilder2.setAutoCancel(true);

mBuilder2.build().flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONGOING_EVENT;
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(1, mBuilder2.build());

谢谢并致以最诚挚的问候!

最佳答案

从两个 Intent 中删除这些行并重试。

intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
intent2.setAction(Long.toString(System.currentTimeMillis()));

对我有用

关于java - 单击通知后 Alarmmanager 未取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36369144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com