我有一个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分钟。但是我不明白他们说'重新安排'的意思。 –