我需要在午夜每晚运行一项服务。我想用AlarmManager来做这件事。
你能给我一些如何让它正常工作的指导吗?
alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, System.currentTimeMillis(), AlarmManager.INTERNAL_DAY, serviceIntent);
也许我需要使用Calendar对象来指定时间?谢谢你的帮助!
答案 0 :(得分:6)
setInexactRepeating()
,顾名思义,是不准确的。请记住,它可能会在午夜之前或之后运行。
确定午夜时间use a Calendar
object。然后拨打getDate()
,在Date
上获取getTime()
和Date
,以获得setInexactRepeating()
来电的正确毫秒值。
答案 1 :(得分:0)
如果您希望代码专门在午夜运行,请不要使用“setInexactRepeating”。实际上,您需要:alarmManager.setRepeating(RTC_WAKEUP, ...)
,然后使用Calendar
来计算您想要运行的下一个午夜。
如果您需要在午夜醒来取决于用户活动,以便无需在午夜准确唤醒手机,只要用户在午夜后使用手机就应首先运行该操作,您可以更改RTC_WAKEUP
只是RTC
。尽管如此,在RTC_WAKEUP
午夜准确唤醒的电池效应应该可以忽略不计,因此强制唤醒可能更简单。