1
閱讀大量的示例代碼到這件事情,我試圖找出最簡單的方法後,實現以下目標:的Android AlarmManager - 安排一個反覆出現的意圖,每天兩次,斷火
我希望能夠安排一個回撥給我的Alarm BroadcastReceiver的Intent,Intent會將我的服務關閉。但是,我希望設置爲每天兩次調用所述Intent,並且只在尚未設置警報的情況下才安排警報(同樣用於取消警報)。
但是,我不確定以下代碼是否是設置和取消警報的正確方法。
//Static function for setting the alarm
//My midday calendar object (cal1)
...
//My evening calendar object (cal2)
AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE)
Intent myIntent = new Intent(context, MyAlarmReceiver.class);
PendingIntent firstCallIntent = PendingIntent.getBroadcast(context, FIRST_CALL_ID, myIntent, PendingIntent.FLAG_NO_CREATE);
PendingIntent secondCallIntent= PendingIntent.getBroadcast(context, SECOND_CALL_ID, myIntent, PendingIntent.FLAG_NO_CREATE);
if(firstCallIntent == null){
if(DEBUG){
Log.d(TAG, "Setting Midday Alarm");
}
firstCallIntent = PendingIntent.getBroadcast(context, FIRST_CALL_ID, myIntent, 0);
alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal1.getTimeInMillis(), AlarmManager.INTERVAL_DAY, firstCallIntent);
}
if(secondCallIntent == null){
if(DEBUG){
Log.d(TAG, "Setting Evening Alarm");
}
secondCallIntent = PendingIntent.getBroadcast(context, SECOND_CALL_ID, myIntent, 0);
alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal2.getTimeInMillis(), AlarmManager.INTERVAL_DAY, secondCallIntent);
}
//Static call to cancel the alarm.
AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE)
Intent myIntent = new Intent(context, MyAlarmReceiver.class);
PendingIntent firstCallIntent = PendingIntent.getBroadcast(context, FIRST_CALL_ID, myIntent, 0);
alarms.cancel(firstCallIntent);
firstCallIntent.cancel();
PendingIntent secondCallIntent = PendingIntent.getBroadcast(context, SECOND_CALL_ID, myIntent, 0);
alarms.cancel(secondCallIntent);
secondCallIntent.cancel();
那麼,根據這篇文章(http://stackoverflow.com/questions/4963271/android-alarmmanager-problem-with-setting-resetting-an-alarm),如果你不取消PI有一個問題取消警報後,在獲取PI時發現代碼未通過FLAG_CANCEL_CURRENT。簡而言之,爲了防止任務致命者破壞我的警報,我們的應用程序會在啓動應用程序時設置(重新設置)或取消警報。因爲我已經有一個Boot BroadcastReceiver來處理它,所以同上啓動。 – 2012-01-06 21:17:02
是的,你可能是對的,你有沒有測試過,看它是否有效? – 2012-01-06 21:41:18
我即將測試一下。希望它能工作。另外,如果我將時間間隔設置爲半天,是不是每12小時都會觸發警報?我想要的是它在中午之後稍微觸發第一次鬧鈴,在晚上7點之後稍後觸發第二次鬧鈴。 – 2012-01-06 22:12:41