AlarmManager 在指定时间后没有唤醒 BroadcastReceiver

AlarmManager not waking up a BroadcastReceiver after the specified time

我的通知效果很好。这些通知由服务创建。 当用户在 3 分钟内没有点击它时,我试图关闭通知。我在这里 尝试了 Karakuri 的解决方案,但没有任何反应。闹钟不工作,广播接收器没有被调用。

服务中的报警管理器class:

notificationManager.notify(notificationId, n);
//set up alarm
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(context, MyReceiver.class);                                        intent.setAction("com.example.example.action.CANCEL_NOTIFICATION");
intent.putExtra("notification_id", notificationId);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP,180000,pi);

广播接收者onReceive方法:

public void onReceive(Context context, Intent intent) {
// do something
final String action = intent.getAction();
Log.d("Reciver","onReceive lunched");
if ("com.example.example.action.CANCEL_NOTIFICATION".equals(action)) {
int id = intent.getIntExtra("notification_id", -1);
if (id != -1) {
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(id);
Log.d("Noti "+id," canceled ");
}}}

之前没有和alarm manager打过交道。查了一下原因没找到,希望大家帮帮我

如果您需要它在请求的时间准确触发,您应该使用 alarmManager.setExactAndAllowWhileIdle 方法而不是 alarmManager.set

还有,你时间设置错了。如果您希望闹钟在当前时刻 3 分钟后触发,则必须是 System.currentTimeMillis() + 180000

最后,检查您是否添加了 SET_ALARM 权限并在您的 AndroidManifest.xml 中声明了您的广播接收器。

您可以使用 Handler,它比使用 Alarm Manager 更容易。 由于您从事服务工作,因此请使用 Looper

此处已接受的答案将指导您:

Clearing notification after a few seconds

希望能帮到你!