Android 在每天的特定时间设置开机时间报警
我已经在android中启动了上午9:00的警报,启动完成。但在完成引导后,每分钟都会触发一次警报 我的要求是,它应该在开机后设置警报,但只在上午9:00发出警报 这是我的密码: 公共类AlarmUtil{ 私人悬而未决的意图Android 在每天的特定时间设置开机时间报警,android,broadcastreceiver,alarmmanager,repeatingalarm,Android,Broadcastreceiver,Alarmmanager,Repeatingalarm,我已经在android中启动了上午9:00的警报,启动完成。但在完成引导后,每分钟都会触发一次警报 我的要求是,它应该在开机后设置警报,但只在上午9:00发出警报 这是我的密码: 公共类AlarmUtil{ 私人悬而未决的意图 public static void setAlarm(Context context) { AlarmManager alarmManager = (AlarmManager) context .getSystemService(Con
public static void setAlarm(Context context) {
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 00);
calendar.set(Calendar.SECOND, 00);
calendar.set(Calendar.AM_PM, Calendar.AM);
//calendar.setTimeInMillis(calendar.getTimeInMillis());
calendar.add(Calendar.SECOND, 1);
Intent intent = new Intent(context, Services.class);
PendingIntent pintent = PendingIntent.getService(context, 123456789,
intent, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), 1 * 60 * 1000, pintent);
}
}
public class AlarmBroadcastReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Toast.makeText(context, "Booted!", Toast.LENGTH_SHORT).show();
AlarmUtil.setAlarm(context);
}
}
}
服务(我的服务类)
}
我缺少的地方。请帮帮我。提前谢谢
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), 1 * 60 * 1000, pintent);
通过调用setRepeating()
,您指示它每分钟触发一次意图。您可能打算使用或setExact()
此外,您正在将当前日期的闹钟设置为9:00。我不确定你的目标是什么,但如果你想在“下一个9:00”设置闹钟(即作为闹钟),如果当前时间大于9:00,你可能应该加上一天。从文件中:
如果规定的触发时间已过,则会触发报警
马上
编辑:如果您需要在每天9:00触发此警报,则setRepeating()
是正确的,但以毫秒为单位的时间应为AlarmManager.INTERVAL\u day
。不过,请注意关于过去警报的注释。如果您在上午10:00启动手机,并使用当前代码,那么除了将来的警报外,还会立即收到警报
而且,正如@DerGolem所指出的,如果您以API级别19为目标,那么这些警报将是不精确的(并且没有
setRepeatingExact()
)。如果您需要精确的警报,那么您必须使用setExact()
来安排一个警报,然后在下一个警报触发时安排下一个警报,依此类推。您需要将“1*60*1000”替换为AlarmManager.INTERVAL\u DAY每天设置一次。您好,我使用了以下代码,并且能够在每天上午9点生成警报
alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmService.class);
PendingIntent pintent = PendingIntent.getService(this, 123456789,
intent, 0);
// Set the alarm to start at 8:30 a.m.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 00);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), 1000 * 60 * 1 * 60 * 24, pintent);
看看这个文档,我刚刚添加了i min gap,只是为了测试。问题是如果我在上午8:56重新启动系统。setAlarm()将被调用,然后它将在每分钟后启动服务。假设启动时间为上午8:56,我希望在上午9:00获得警报。它会在早上8:57、8:58、8:59发出警报。@DeepikaLalra我不确定我是否明白了。如果需要单个报警,请使用
set()
<代码>设置重复()将触发重复报警。这不是您当前遇到的问题吗?注意:从API 19(KITKAT)开始,警报传递是不精确的:操作系统将切换警报,以尽量减少唤醒和电池使用。有新的API支持需要严格交付保证的应用程序;请参见设置窗口(int,long,long,pendingent)和设置精确窗口(int,long,pendingent)。targetSdkVersion早于API 19的应用程序将继续看到以前的行为,即所有警报都会在请求时准确发送。
@matiash我已经尝试过这一点。它能在9点准时发射。但我想问的是,它是否会在每天早上9点发出警报。因为我想每天早上9:00被解雇。@DeepikaLalra用这个新信息编辑了答案(很抱歉,从你的问题中它真的不明白)。
alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmService.class);
PendingIntent pintent = PendingIntent.getService(this, 123456789,
intent, 0);
// Set the alarm to start at 8:30 a.m.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 00);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), 1000 * 60 * 1 * 60 * 24, pintent);