我目前正在尝试编写报警管理器,每天在指定的时间段内发出报警。首先,我检查,看看用户是否已为这一天的报警设置:如何设置周期性AlarmManager每天执行代码
然后我去设置实际报警12,第二天的12:10之间熄灭:
public static void setFutureAppointmentCheck(Context con) {
AlarmManager am = (AlarmManager) con
.getSystemService(Context.ALARM_SERVICE);
Date futureDate = new Date(new Date().getTime() + 86400000);
Random generator = new Random();
futureDate.setHours(0);
futureDate.setMinutes(generator.nextInt(10));
futureDate.setSeconds(0);
Intent intent = new Intent(con, FutureAppointmentReciever.class);
PendingIntent sender = PendingIntent.getBroadcast(con, 0, intent,
PendingIntent.FLAG_ONE_SHOT);
am.set(AlarmManager.RTC_WAKEUP, futureDate.getTime(), sender);
}
现在我为此设置了一个测试环境,每隔两分钟就会关闭一次,它似乎工作正常,但是当我部署到实际设备时,接收器似乎不会接收到警报。我认为这可能是设备睡着时的问题,所以我添加了电源管理器。但它仍然不能正常工作:
PowerManager pm = (PowerManager) context
.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK, "keepAlive");
wl.acquire();
setFutureAppointments(context.getApplicationContext());
AppointmentManager.setFutureAppointmentCheck(context
.getApplicationContext());
User.setLongSetting(context.getApplicationContext(), "futureappts",
new Date().getTime());
wl.release();
任何人都看不到我做的公然错还是我这个错误?感谢任何和所有的帮助。
我认为,服务可能比我更需要我在做什么拍后报警,但你的博客是一个很好看的!你碰巧知道SetInexactRepeating通常有多少偏移量? – ninjasense 2010-12-13 17:52:32
我编辑了我的答案来解释'setInexactRepeating'问题。 – Felix 2010-12-14 10:45:40
作为奖励,而不是在设置新的之前取消,您可以检索PendingIntent和PendingIntent.FLAG_CANCEL_CURRENT作为最后一个参数,它具有相同的效果。 – nsL 2013-10-18 17:12:51