2016-04-10 2 views
6

Die Referenz für Alarm Manager bestanden hat, sagt, dassandroid verhindern unmittelbare Auslöser des Alarmdienstes, wenn die Alarmzeit für den Tag

Wenn die angegebene Trigger-Zeit in der Vergangenheit ist, wird der Alarm sofort ausgelöst werden.

Ich bin in meiner Anwendung mit diesem Problem konfrontiert. Hier ist mein Alarm Manager Code:

Intent myIntent = new Intent(getActivity(), DinnerAlarmReceiver.class); 
       pendingDinnerIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0); 

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

       alarmManager.set(AlarmManager.RTC_WAKEUP, 
         calendar.getTimeInMillis(), pendingDinnerIntent); 

Gibt es eine Umgehungsmöglichkeit für dieses Problem?

----- ------ EDIT

ich einige Code geschrieben haben, zu schätzen, wenn die eingestellte Zeit für den Alarm vor der aktuellen Zeit ist. Hier ist der obige Teil mit entsprechenden Änderungen:

Calendar calendar = Calendar.getInstance(); 
       long currentTime = calendar.getTimeInMillis(); 
       calendar.set(Calendar.HOUR_OF_DAY, hourOfDay); 
       calendar.set(Calendar.MINUTE, minute); 
       long setTime = calendar.getTimeInMillis(); 
       Timestamp setTimestamp = new Timestamp(setTime); 
       Timestamp currentTimestamp = new Timestamp(currentTime); 
       if (setTimestamp.after(currentTimestamp)) 
       { 
        alarmManager.set(AlarmManager.RTC_WAKEUP, 
          calendar.getTimeInMillis(), pendingDinnerIntent); 
       } 
       else 
       { 
       } 

Was soll ich die alarmManager im Fall setTimestamp ist vor currentTimestamp?

Antwort

14

Sie müssen Timestamp s nicht erstellen. Sie können es mit Ihrem Calendar tun.

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

if(calendar.before(Calendar.getInstance())) { 
    calendar.add(Calendar.DATE, 1); 
} 

alarmManager.set(AlarmManager.RTC_WAKEUP, 
    calendar.getTimeInMillis(), pendingDinnerIntent); 

würde ich auch erwähnen, dass als von KitKat, wenn Ihr targetSdkVersion 19 oder höher ist, die AlarmManager#set() Verfahren nicht exakt ist. Wenn Sie möchten, dass Ihr Alarm zu einem bestimmten Zeitpunkt ausgelöst wird, müssen Sie eine setExact*() Methode verwenden.

Verwandte Themen