我希望我的应用程序每天早上9点开始。为此,我使用每天早上9点开始的setRepeatingAlarm()
启动Alarm_1。
manager.setRepeating(AlarmManager.RTC_WAKEUP,
timeOn.getTimeInMillis(), 86400000,startingIntent);
从alarm_1开始,我开始另一个警报,MainAlarm,以1分钟的间隔重复启动我的服务。
manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(), duration, MainActivity.mainIntent);
我希望我的应用程序每天晚上9点停止。
为此,我每天晚上9点使用setRepeatingAlarm()
cancel()
MainAlarm启动Alarm_2。
但这不符合预期。
该怎么办?有没有问题,因为我使用3个警报?
警报第二天不起作用。
This is my cancel() code:
public class AlarmReceiver2 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
manager.cancel(MainActivity.mainIntent);
MainActivity.mainIntent.cancel();
}
}
答案 0 :(得分:0)
首先,我认为有3个警报没有问题。
其次,也许您可以添加用于尝试和取消的代码。这里的一个技巧是你需要PendingIntent
与你用来启动闹钟的cancel()
相同 - 这就是为什么看到取消代码会很有用。
请在相关问题上查看我的答案:
这个问题很相似,我觉得我不应该复制整个答案,但这里有一个链接到@commonsware答案的摘要:
从How to cancel this repeating alarm?
复制的答案使用与setRepeating()
使用的PendingIntent等效的PendingIntent在AlarmManager上调用Intent intent = new Intent(this, AlarmReceive.class);
PendingIntent sender = PendingIntent.getBroadcast(this,
0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(sender);
:
{{1}}