アラーム時計アプリを作成しています。 AlarmManager
で設定した時刻になると、PendingIntent
を設定してキャンセルし、BroadcastReceiver
で受信することができます。私は最近の問題を発見しました。PendingIntentは、アラーム時刻がリアルタイムから1時間の倍数になると起動します。 - Android
これまでは、いつでもアラームを設定でき、BroadcastReceiverはその時刻に達するまでPendingIntentを「受信」しませんでした。私は、設定されるアラームがちょうど1時間以上(整数のみ)の時間離れたシナリオを決してカバーしていなかったと思います。たとえば、現在の時刻が11:54で、アラームが12:54、1:54、2:54などに設定されています。これを行うと、BroadcastReceiverはPendingIntentを受け取り、私が指定したアクションを実行しますする。
どうしてですか?分を別のものに変更すると、分は同じで、現在の時刻にアラームを設定した場合と同じように動作します。
public void scheduleAlarm(Context aContext) {
AlarmManager am = (AlarmManager) aContext.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(aContext, MyBroadcastReceiver.class);
String id = this.getId().replaceAll("[^0-9]+", ""); // this.getId returns a string such as "alarm1". We only need the "1".
PendingIntent alarmIntent = PendingIntent.getBroadcast(aContext, Integer.parseInt(id), intent, 0);
// "this" in this context is the Alarm object. So you can get the hour and minute from the timepicker used to set the alarm
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, this.getHour());
calendar.set(Calendar.MINUTE, this.getMinute());
long calendarTime = calendar.getTimeInMillis();
am.setExact(AlarmManager.RTC_WAKEUP, calendarTime, alarmIntent);
}
信じられない。これをチェックするには、 'am.setExact()'を呼び出す直前にロギングを追加します。これは 'calendarTime'の時間値をユーザーが読める形式で出力します。それから、その時間が本当にあなたが思う時間であることを確認してください。 –
これでどこにいましたか?これはまだ問題ですか?すべてのアップデート? –
申し訳ありません、ただの休暇にはい、それは何らかの理由でもう起こりません。私はアプリの新鮮なインストールを与え、それは正常に動作します。私は問題を再現できません – Michael