0

毎日同じ時間にイベントを思い出させるアプリを作ろうとしています。この目的のために、私は 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のみを考慮しますか? 何が問題なのか分かりますか? ありがとうございました!

4

1 に答える 1

1

時間を稼ぐためにこれをしてみませんか。

Calendar cal = Calendar.getInstance();

int now = cal.getTimeInMillis();

cal.add(Calendar.DAY_OF_MONTH, 1);

int tomorrow = cal.getTimeInMillis();

カレンダーがそれをしていると思います。

PS。前回の投稿でアラームを提案したのは私です :P 元気そうです。


その便利なコード:

//Create a calendar.
Calendar cal = Calendar.getInstance();

//Get the time in miilis since Jan 1st 1970 I think? 
cal.getTimeInMillis();

//Set the calendar
cal.set(year, month, day, hour, minute, second);

//set a certain aspect of the calendar
cal.set(Calendar.<What you want to set>, <amount>);

//for example
cal.set(Calendar.DAY_OF_MONTH, 1);

//Add to the calendar, Calendar.DAY_OF_MONTH what ever you are using specifies the amount of milliseconds to add, for example a day is 100*60*60*24 milliseconds where a second is 1000 milliseconds.
cal.add(Calendar.<Day or month or what ever>, <amount>);

//for example
cal.add(Calendar.MONTH, 1);

//Take of the calendar
cal.add(Calendar.MONTH, -1);

//Get that value
int day_of_month = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);

お楽しみください:)

于 2012-05-05T09:12:47.057 に答える