毎日同じ時間にイベントを思い出させるアプリを作ろうとしています。この目的のために、私は AlarmManager を使用しています。
これは私がイベントを登録する方法です:
Intent alarmIntent = new Intent(getApplicationContext(), ReminderAlarm.class);
alarmIntent.putExtra("id_bundle", cursor.getInt(0));
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), cursor.getInt(0), alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
これは、イベントの登録を解除する方法です。
Intent alarmIntent = new Intent(getApplicationContext(), ReminderAlarm.class);
alarmIntent.putExtra("id_bundle", id);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), id, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(pendingIntent);
これは私がイベントを編集する方法です:
Intent alarmIntent = new Intent(getApplicationContext(), ReminderAlarm.class);
alarmIntent.putExtra("id_bundle", id);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), id, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(pendingIntent);
Intent alarmIntentNew = new Intent(getApplicationContext(), ReminderAlarm.class);
alarmIntentNew.putExtra("id_bundle", id);
PendingIntent pendingIntentNew = PendingIntent.getActivity(getApplicationContext(), id, alarmIntentNew, PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntentNew);
間隔 24*3600*1000 で setRepeating を使用しようとしましたが、うまくいかないようだったので、トリガーされたときにイベントを登録解除し、再度登録することにしました。これは、アラームがトリガーされた後に開始される ReminderAlarm アクティビティで行います。
また、アプリケーションを起動するたびに、イベントを登録するために投稿したコード ブロックを使用して、すべてのイベントを再度登録します。データベースから登録するイベントと時刻に関するデータを取得します。
私の問題は、これも機能しないことです。T+1 分の時間にイベントを追加すると、正しくトリガーされます。しかし、翌日、それはありません。
おそらく、カレンダー インスタンスに間違ったデータを与えたことが原因でしょうか? イベントがトリガーされた後、このカレンダー インスタンスを AlarmManager インスタンスに送信する前に、カレンダー インスタンスをセットアップする非常に長い関数があります。この関数では、新しい月、新年などをチェックし、カレンダー フィールド (年、月、月の日、時、日、分) を設定します。これも必要ですか?calendar.getTimeInMillis() はこれらすべてのフィールドを考慮しますか、それともhour_of_dayとminuteのみを考慮しますか? 何が問題なのか分かりますか? ありがとうございました!