在Android中使用AlarmManager启动日常服务?

时间:2010-05-30 19:14:20

标签: android

我需要在午夜每晚运行一项服务。我想用AlarmManager来做这件事。

你能给我一些如何让它正常工作的指导吗?

alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, System.currentTimeMillis(), AlarmManager.INTERNAL_DAY, serviceIntent);

也许我需要使用Calendar对象来指定时间?谢谢你的帮助!

2 个答案:

答案 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午夜准确唤醒的电池效应应该可以忽略不计,因此强制唤醒可能更简单。