我使用警报从服务器获取数据。 我喜欢为用户提供启动和停止闹钟的选项。 这意味着我必须检查并查看是否已设置警报。 我找到了一些代码,告诉我闹钟是否已设置:
Intent I = new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_NO_CREATE);
found = (P!=null);
如果已经设置了闹钟,我会取消它,但如果没有设置,我会设置它(就像切换一样)
问题是这只能工作一次。上面的代码第一次检查已有的告警 将返回 null 表示没有警报但是在我取消警报后一旦它返回一个指针 到某事,但警报没有运行。
这里是设置闹钟的代码
am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE);
Intent I = new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_CANCEL_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60000, P);
下面是取消闹钟的代码:
am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE);
Intent I = new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_CANCEL_CURRENT);
am.cancel(P);
我是否要在取消警报后重置某些东西以使其 PendingIntent 消失。
最佳答案
取消 AlarmManager
时,不要使用带有 FLAG_CANCEL_CURRENT
标志的 PendingIntent
。
相反,取消警报后显式取消 PendingIntent
:
am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE);
Intent i = new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent p = PendingIntent.getBroadcast(getApplicationContext(), 0, i, 0);
am.cancel(p);
p.cancel();
关于设置和重置闹钟的 Android AlarmManager 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4963271/