Android AlarmManager设置和重置警报的问题

Kem*_*mal 9 android alarm alarmmanager android-intent android-pendingintent

我使用Alarm来从服务器获取数据.我想让用户选择启动和停止警报.这意味着我必须检查并查看是否已设置警报.我找到了一些代码告诉我警报是否已经设置:

Intent I = new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_NO_CREATE);
found = (P!=null);
Run Code Online (Sandbox Code Playgroud)

如果警报已经设置我取消它但是如果它没有设置然后我设置它(像一个切换)

问题是这只能工作一次.第一次检查现有警报的上述代码将返回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); 
Run Code Online (Sandbox Code Playgroud)

这是取消警报的代码:

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);
Run Code Online (Sandbox Code Playgroud)

取消警报后,我是否要重置某些内容,以使其PendingIntent消失.

Dim*_*ski 49

取消时AlarmManager不要使用PendingIntent带有标志的FLAG_CANCEL_CURRENT.而是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();
Run Code Online (Sandbox Code Playgroud)

  • 如果它对你有所帮助,你应该将其标记为答案. (7认同)