2016-09-27 13 views
1

ユーザーが選択する時と分に他のアラームと同様にアクティブにするアラームを出しています。時刻が0:00に設定されているときに問題が発生しました。アラームがすぐにアクティブになります。時刻が0時に設定されたときに瞬時にアラームが呼び出されます

私は私はこのような繰り返しスケジュールを呼び出すAlarmManagerしたカスタムがあります。

​​

、問題例えば、これらの値が渡される:

Id = 619 
Hour = 0 
Minute = 0 

これはsetRepeatingAlarm()関数です。

public void scheduleRepeatingAlarm(Context context, int alarmID, int hour, int minute) { 
    System.out.println("schedule is running"); 
    Intent intent = new Intent(context, AlarmNotificationReciever.class); 
    Bundle extras = new Bundle(); 
    extras.putBoolean(KEY_REPEAT, true); 
    extras.putInt("AlarmId", alarmID); 
    intent.putExtras(extras); 
    PendingIntent pIntent = PendingIntent.getBroadcast(context, 
     alarmID, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

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

    if (android.os.Build.VERSION.SDK_INT >= 19) { 
     setSingleExactAlarm(calender.getTimeInMillis(), pIntent); 
    } else { 
     mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
      calender.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent); 

    } 
} 

私は問題がgoinであると仮定しています

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

とアラーム設定この行:仕事とオフに行くための時間として扱うように見える今までに他の時間と分の組み合わせについて

setSingleExactAlarm(calender.getTimeInMillis(), pIntent); 

をグラムは、ここではこれらの行であることを。しかし、時間= 0、分= 0の場合は、すぐに発火します。

ご協力いただきありがとうございます。

+1

問題は日です。時間を0:00に設定すると、同じ日にシステムが呼び出されます。翌日の午前0時に火事に1日追加する必要があります。設定された時間が経過するとアラームが発せられるため、直接起動します..... – Opiatefuchs

答えて

3

これは予期された動作です。

Calendar.getInstance()は、現在の日付/時刻に設定されたCalendarインスタンスを返します。

日付をそのままにして、時分フィールドを0に設定すると、アラームが過去に有効に設定されます(アラームが発生していないと見なされます)。どこまで過去に トリガに応じて

規定のトリガー時間が過去に、アラームがアラームカウントで、すぐ トリガされますされている場合:documentationsetRepeating() ofから

時間は繰り返し間隔に比例します。

あなたがチェックを実行するには、このような何かを行うことができます:

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

Calendar now = Calendar.getInstance(); 

if(calendar.before(now)) { 
    // handle this as you wish 

    // adding a day to calendar 
    calendar.add(Calendar.DATE, 1); 
} 
関連する問題