У меня есть TimePicker
и Button
, и я хочу установить будильник, когда пользователь нажимает на Button
в указанное время.BroadcastReceiver срабатывает с задержкой
Получается час, когда я нажимаю на кнопку, но будильник срабатывает иногда в указанное время, но не всегда. Он срабатывает в указанное время меньше времени, чем он не срабатывает. В большинстве случаев BroadcastReceiver
не срабатывает в указанное время, он срабатывает с задержкой.
Это код, который я прямо сейчас:
О классе сигнализации (код refered к BroadcastReceiver)
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 минуты. Но я не понимаю, что они означают, когда говорят «перепланировать». –