2

私は多くの記事を読みましたが、特定の質問に対する回答が見つからなかった/または見逃しただけです。一般的なケースを実装しようとしていると思うのは奇妙な原因です。ええと、私がしたいのは、週末を除く毎日、月曜日から金曜日までの特定の時間にアラームを鳴らすように設定することです。

現在、私は次のことをしています:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);

Intent intent = creating an Intent here
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);

am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

私が理解している限り、次のコードは指定した時間にアラームを発生させ、AlarmManager.INTERVAL_DAY のために毎日実行します。

私は自分の仕事を達成するために次のことを考えました:

  for(int i = 1; i < 6; i++) {
    calendar.add(Calendar.DAY_OF_WEEK, i);
  }

しかし、このロジックの正しさについてはわかりません。お願いできますか 1. 間違いがあれば訂正してください 2. 適切な解決策を提案してください

アップデート:

さて、私は次のことを考えました:

calendar.set(Calendar.DAY_OF_WEEK, 1);

その後

am.setRepeating(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 5, pendingIntent);

その結果、最初の日を月曜日に設定し、それを 5 回繰り返します。月曜日から金曜日まで、現在の日付に関係なく、ユーザーがアラームを設定している場合、それは正しいですか、それとも不足していますか? ところで、setRepeating を更新して、1 週間だけでなく毎週繰り返すように設定するにはどうすればよいですか?

アップデート1:

上記のコードを使用してエラーを理解したと思いますが、奇妙なことを行うため、初期化日は月曜日ですが、繰り返し間隔は月曜日から金曜日まで毎日ではなく、5 日に 1 回です。

4

1 に答える 1

1

唯一の解決策は設定することのようです

am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

Intent コンストラクターで指定した火災ハンドラーで、現在の日を確認し、土曜日または日曜日の場合は通知を回避します。

...
  if(intent.getBooleanExtra(INTENT_NOTIFY, false) && !isWeekend())
    showNotification();
...

  private boolean isWeekend() {
    Calendar calendar = Calendar.getInstance();
    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
    return (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY);
  }

ところで、教えてください、アラームを繰り返しモードに設定しました。初めてアラームが発生しました。次に、エミュレーターの設定を開き、手動で日付を明日に移動して時間を戻しますが、アラーム通知は発生しません。エミュレーターで問題ありませんかまたはコードにエラーがありますか?

于 2013-11-07T13:24:04.657 に答える