我目前正在嘗試編寫報警管理器,每天在指定的時間段內發出報警。首先,我檢查,看看用戶是否已爲這一天的報警設置:如何設置週期性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