2013-04-01 6 views
8

ich eine Benachrichtigung zu einem bestimmten Zeitpunkt habe, sehen, meinen Code:Mitteilung zu einem bestimmten Zeit

//Create alarm manager 
AlarmManager alarmMgr0 = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 

//Create pending intent & register it to your alarm notifier class 
Intent intent0 = new Intent(this, AlarmReceiver_maandag_1e.class); 
intent0.putExtra("uur", "1e"); 
PendingIntent pendingIntent0 = PendingIntent.getBroadcast(this, 0, intent0, 0); 

//set timer you want alarm to work (here I have set it to 8.30) 
Calendar timeOff9 = Calendar.getInstance(); 
timeOff9.set(Calendar.HOUR_OF_DAY, 8); 
timeOff9.set(Calendar.MINUTE, 30); 
timeOff9.set(Calendar.SECOND, 0); 

//set that timer as a RTC Wakeup to alarm manager object 
alarmMgr0.set(AlarmManager.RTC_WAKEUP, timeOff9.getTimeInMillis(), pendingIntent0); 

Diese nur eines nicht perfekt funktioniert.

Die Benachrichtigung für 08.30 mit einem Alarmmanager gesetzt Wenn ich die app nach 08.30 Uhr, 09.00 Uhr zum Beispiel starten, zeigt die Meldung noch ..

Gibt es eine Möglichkeit, dass der Alarm geht um 8:30 Uhr aber nicht später?

bearbeiten

Für alle das gleiche Problem, hier ist die Lösung:

Setzen Sie diese in Ihrem broadcastreceiver:

long current_time = System.currentTimeMillis(); 

Calendar timeOff9 = Calendar.getInstance(); 
timeOff9.set(Calendar.HOUR_OF_DAY, 8); 
timeOff9.set(Calendar.MINUTE, 35); 
timeOff9.set(Calendar.SECOND, 0); 

long limit_time = timeOff9.getTimeInMillis(); 

if (current_time > limit_time) { 
    //nothing 
} else { 
    //show notification 
} 
+0

Überprüfen Sie die aktuelle Uhrzeit und Alarmzeit in Broadcast-Empfänger-Klasse. In dieser Klasse können Sie entscheiden, wo die Benachrichtigung angezeigt werden soll oder nicht. –

+0

Wissen Sie, wie ich die aktuelle Zeit mit 8:30 Uhr vergleichen kann? Weil ich denke, du meinst sowas wie: if (aktuelle Uhrzeit == 8:30) @Ilango – GromDroid

+0

Du kennst deine Alarmzeit und die aktuelle Uhrzeit mit System.currentTimeMillis() und checkst mit dieser Zeit. –

Antwort

2

Sie können auch diese Methode der Alarm Manager versuchen:

public void setExact (int type, long triggerAtMillis, PendingIntent operation) 

Aber es erfordert API-Level 19.