gpt4 book ai didi

Android AlarmManager - 安排一个重复的 Intent 每天触发两次

转载 作者:行者123 更新时间:2023-11-30 04:24:15 25 4
gpt4 key购买 nike

在阅读了大量有关此事的示例代码之后,我试图找出实现以下目标的最简单方法:

我希望能够安排一个 Intent 来回调我的 Alarm BroadcastReceiver,这反过来会触发我的服务。但是,我想进行设置,以便它每天调用两次 Intent,并且仅在尚未设置警报时安排警报(同样用于取消警报)。

但是,我不确定下面的代码是否是设置和取消闹钟的正确方法。

//Static function for setting the alarm
//My midday calendar object (cal1)

...

//My evening calendar object (cal2)
AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE)
Intent myIntent = new Intent(context, MyAlarmReceiver.class);

PendingIntent firstCallIntent = PendingIntent.getBroadcast(context, FIRST_CALL_ID, myIntent, PendingIntent.FLAG_NO_CREATE);
PendingIntent secondCallIntent= PendingIntent.getBroadcast(context, SECOND_CALL_ID, myIntent, PendingIntent.FLAG_NO_CREATE);
if(firstCallIntent == null){
if(DEBUG){
Log.d(TAG, "Setting Midday Alarm");
}
firstCallIntent = PendingIntent.getBroadcast(context, FIRST_CALL_ID, myIntent, 0);
alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal1.getTimeInMillis(), AlarmManager.INTERVAL_DAY, firstCallIntent);
}
if(secondCallIntent == null){
if(DEBUG){
Log.d(TAG, "Setting Evening Alarm");
}
secondCallIntent = PendingIntent.getBroadcast(context, SECOND_CALL_ID, myIntent, 0);
alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal2.getTimeInMillis(), AlarmManager.INTERVAL_DAY, secondCallIntent);
}


//Static call to cancel the alarm.
AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE)
Intent myIntent = new Intent(context, MyAlarmReceiver.class);
PendingIntent firstCallIntent = PendingIntent.getBroadcast(context, FIRST_CALL_ID, myIntent, 0);
alarms.cancel(firstCallIntent);
firstCallIntent.cancel();
PendingIntent secondCallIntent = PendingIntent.getBroadcast(context, SECOND_CALL_ID, myIntent, 0);
alarms.cancel(secondCallIntent);
secondCallIntent.cancel();

最佳答案

这对我来说似乎没问题,但是您可以将间隔设置为

而不是创建两个日历对象
AlarmManager.INTERVAL_DAY/2

除非你的 Intent 是做不同的事情。

此外,

alarms.cancel(firstCallIntent);
alarms.cancel(secondCallIntent);

应该足以取消这些类型的所有警报,不需要:

firstCallIntent.cancel();

编辑:设置 2 个日历对象

//midday
Calendar cal1 = Calendar.getInstance();
cal1.set(Calendar.HOUR_OF_DAY, 12);
cal1.set(Calendar.MINUTE, 00);
cal1.set(Calendar.SECOND, 00);

//7pm
Calendar cal2 = Calendar.getInstance();
cal2.set(Calendar.HOUR_OF_DAY, 19);
cal2.set(Calendar.MINUTE, 00);
cal2.set(Calendar.SECOND, 00);

Calendar.getInstance() 将返回一个日历对象并将其设置为当前系统时间。每个 .set 方法都会更改该日历对象的某个变量。所以目前如果是晚上 8 点,它会将闹钟设置为当天的 12 点和 7 点,这是没有用的。所以如果你想在第二天设置它,你需要使用 cal1.add(Calendar.DAY_OF_MONTH, 01);添加额外的一天,设置为第二天的那个时间。希望这会有所帮助。

关于Android AlarmManager - 安排一个重复的 Intent 每天触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8762934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com