我有一個TimePicker
和一個Button
,我想設置一個警報,當用戶在指定的時間點擊Button
。BroadcastReceiver延遲觸發
當我點擊按鈕時,它會獲得小時,但有時會在特定時間觸發鬧鐘,但並非總是如此。它在指定的時間內被激發的次數少於未被激發的次數。大多數BroadcastReceiver
在指定的時間沒有開火,它會延遲啓動。
這是代碼,我現在所擁有的:
在報警類(代碼refered到廣播接收器)
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
Calendar cal= Calendar.getInstance();
cal.set(Calendar.MONTH,cal.get(Calendar.MONTH));
cal.set(Calendar.YEAR,cal.get(Calendar.YEAR));
cal.set(Calendar.DAY_OF_MONTH,cal.get(Calendar.DATE));
cal.set(Calendar.HOUR_OF_DAY,hour);
cal.set(Calendar.MINUTE,minutes);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000 * 60 * 5, alarmIntent);
其中hour
和minutes
是從TimePicker
檢索小時和分鐘。
在AlarmReceiver類
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("prove", "We enter on BroadcastReceiver");
}
}
上的Manifest.xml
<receiver
android:name=".AlarmReceiver"
android:enabled="true" >
</receiver>
例如,我已經把日誌,看看我是從TimePicker
檢索顯示日誌之前什麼時候BroadcastReceiver
。我點擊它在16:48
(在TimePicker
),這是結果:
12-06 16:47:02.951 7980-7980/com.project.user.project D/prove: hour: 16:48
12-06 16:50:23.727 7980-7980/com.project.user.project D/prove: We enter on BroadcastReceiver
12-06 17:00:01.070 7980-7980/com.project.user.project D/prove: We enter on BroadcastReceiver
正如你所看到的,BroadcastReceiver
已經在16:50
和17:00
發射兩枚時候,我想他們應該開火16:48
和16:53
因爲我已經確定它們之間會延遲5分鐘,而不是在這種情況下10分鐘。
那麼,我能做些什麼來在準確的時間點火,而不是延遲點火呢?我是否缺少一些配置?
在此先感謝!
我有一個問題,如果我有一個報警,應該在確切的時間重複兩到三次。例如,在'16:48','16:50'和'16:52'。我應該添加三個調用'setExact'函數的事件嗎? –
如果你想設置3組報警,他們沒有特定的模式,那麼我相信你應該使用'setExact'三次,是的。否則,如果您希望鬧鐘每2分鐘觸發一次(例如),則只需使用setExact一次並重新安排在接收器中,如上所述。 – MohanadMohie
是的,他們將有一個特定的模式,例如,每2分鐘。但是我不明白他們說'重新安排'的意思。 –