1

DatePickerとTimePickerからアラームを作成するのに非常に行き詰まっています...

これは私の試みのコードです:

Calendar cal=Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, datePicker.getDayOfMonth());
cal.set(Calendar.MONTH, datePicker.getMonth());
cal.set(Calendar.YEAR, datePicker.getYear());
cal.set(Calendar.HOUR, timePicker.getCurrentHour());
cal.set(Calendar.MINUTE, timePicker.getCurrentMinute());        
long millis=cal.getTimeInMillis();

Intent intent=new Intent(CalendarView.this,AvisoReceiver.class);
PendingIntent mAlarmSender=PendingIntent.getBroadcast(CalendarView.this,23454546, intent,0);
AlarmManager alm=(AlarmManager)getSystemService(ALARM_SERVICE);
alm.set(AlarmManager.RTC_WAKEUP, millis,mAlarmSender);      

しかし、TimePickerとDatePickerからアラームを設定すると、受信機が呼び出されません。

受信機が呼び出されてから3秒後にアラームを設定すると、通知が届きます。

4

1 に答える 1

6

リライト

したがって、午前2時にプログラミングするとき、私は常にゲームのトップにいるとは限りません。期待する動作を実現するためにコードに追加する2つの修正(24/7)は次のとおりです。

cal.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour());
cal.set(Calendar.SECOND, 0);

HOUR_OF_DAY24時間の時間を読み取りSECOND、秒を:00に設定するために使用します。唯一のHOUR読み取り時間は12時間です。これが、午後7時ではなく午前2時に機能した理由であり、43000秒オフ(12時間)であった理由です。Calendarオブジェクトを設定SECONDしないと、現在の分が秒単位で繰り越され、予期しない遅延が発生します。

補足として、すべてのカレンダー値を一度に設定することもできます。

cal.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), timePicker.getCurrentHour(), timePicker.getCurrentMinute(), 0);

どちらの方法でも、呼び出す必要があるのは次のとおりです。

alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), mAlarmSender);      

(いいえ、私の最初の提案のようにもっと凝った数学が必要です。)これがお役に立てば幸いです!

于 2012-05-13T05:46:29.750 に答える