2017-05-01 4 views
-1

私はAlarmManagerを使用してアラームを設定し、timePickerから時刻を渡しました。直近のアラームトリガー

私はアラームを所定の時間に設定したいが、時間(設定しようとしているもの)が経過していれば、アラームはにすぐにをトリガーする。

例: - 現在の時刻が午後9時で、午後7時にアラームを設定すると、アラームがすぐにトリガーされます。以下は

は私のコードでは、我々は、アラームを設定しているため時間が経過した場合、アラームのトリガを制御する方法

public void startAlarm(Calendar c, int id){ 
    Toast.makeText(this, "Alarm in on", Toast.LENGTH_SHORT).show(); 
    Intent intent = new Intent(this,AlarmReciever.class); 
    intent.putExtra("id",id); 

    //int _id = (int)System.currentTimeMillis(); 

    PendingIntent pendingIntent = PendingIntent.getBroadcast(this,id,intent,PendingIntent.FLAG_ONE_SHOT); 
    alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(), 1000*60,pendingIntent); 
    //alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pendingIntent); 
} 

のですか?

答えて

1

カレンダーの時間が過去であるかどうかを検出し、それに応じて調整する必要があります。これと同じように:

public void startAlarm(Calendar c, int id){ 
    Toast.makeText(this, "Alarm in on", Toast.LENGTH_SHORT).show(); 
    Intent intent = new Intent(this,AlarmReciever.class); 
    intent.putExtra("id",id); 

    //Check if calendar is set in the past 
    if (c.getTimeInMillis() < System.currentTimeMillis()) { 
     //Add one day to the calendar (or whatever repeat interval you would like) 
     c.add(Calendar.DAY_OF_YEAR, 1); 
    } 

    //int _id = (int)System.currentTimeMillis(); 

    PendingIntent pendingIntent = PendingIntent.getBroadcast(this,id,intent,PendingIntent.FLAG_ONE_SHOT); 
    alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(), 1000*60,pendingIntent); 
    //alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pendingIntent); 
} 

私はあなたが一日の追加は常にトリックを行います場合、ユーザーは、私はよく分からない時間を設定することができているかわからないと。たとえば、ユーザーがカレンダーから日付を選択することを許可した場合、これは過去の年である可能性があります。希望の繰り返し間隔とユーザーが時間を設定する方法に基づいて、追加する時間を調整する必要があります。

関連する問題