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
希望能帮到你!
我的通知效果很好。这些通知由服务创建。 当用户在 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
希望能帮到你!