2016-05-22 7 views
-1

Ich verwende den folgenden Code. Aber es funktioniert nicht so, wie ich es erwartet hatte.Wie starte ich meine Android-App um 12:00 Uhr jeden Tag, auch wenn App geschlossen ist

AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(context, MyReciever.class); 
intent.putExtra(ONE_TIME, Boolean.TRUE); 
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); 
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 
     20*1000, pi); 

Dieser Code wird 20 sec einmal ausführen, aber wenn ich mit 20 * 1000 ersetzt durch 24 * 60 * 60 * 1000, wird es einmal pro Tag ausführen.

Aber wenn ich heute 16:00 Uhr installiere, denke ich, dass die Logik, die ich oben geschrieben habe, nicht um 12:00 Uhr ausgeführt wird, weil ich pro 24 Stunden einmal gegeben habe.

Können Sie mir bitte die richtige Logik mit gutem Beispiel vorschlagen.

Wirklich zu schätzen Ihre Hilfe. jetzt

// berechnen:

Vielen Dank im Voraus

+0

wenn Ihre App für die erste Zeit läuft die Zeit des Tages erhalten und berechnen Zeit bis 12.00 Uhr bleiben. Anschließend erstellen Sie den Alarmmanager zum ersten Mal mit diesem Wert. – pooyan

+0

zum ersten Mal die Uhrzeit und berechnen Zeit bis 12:00 Uhr bleiben dann verwenden Sie Kalender-Objekt, um genaue Zeit und dann an Alarm-Manager übergeben (calendar.get time();) – androidnoobdev

Antwort

0

Try this

long now = System.currentTimeMillis(); 

// morgen in Millisekunden berechnen:

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DAY_OF_MONTH, 1); // Add a day 
cal.set(Calendar.HOUR_OF_DAY, 0); // Set to 12:00 
cal.set(Calendar.MINUTE, 0); 
cal.set(Calendar.AM_PM, Calendar.PM); 
long tomorrow = cal.getTimeInMillis(); 

// Berechnen Sie den Abstand zwischen heute und morgen

long interval = tomorrow - now; 

Jetzt ersetzen 20 * 1000 mit dem Intervall.

Achten Sie darauf, dass Sie einen Tag zum Kalender hinzufügen. Wenn Sie also den Wecker um 8:00 Uhr morgens einstellen, wird am nächsten Tag um 12:00 Uhr Alarm ausgelöst.

+1

vergessen Sie nicht, wenn Sie das wollen Es funktioniert jeden Tag, Sie sollten einen neuen Alarm-Manager in der Antwort-Ergebnis-Klasse des ersten Alarm-Managers erstellen, dessen Timer auf 24 Stunden eingestellt wurde (ich hoffe, dass mir klar ist;)). – pooyan

0

Vielen Dank für Ihren wertvollen Kommentar für meine Frage. Hier ist die genaue Antwort, was ich für meine App implementiert habe. Mit dieser Logik beginnt meine App genau nach 12:00 Uhr mit dem 10-Minuten-Intervall. Sie läuft alle 10 Minuten weiter.

-Code wie unten

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.HOUR_OF_DAY, 0); // Set to 12:00 
cal.set(Calendar.MINUTE, 0); 
long tomorrow = cal.getTimeInMillis(); 
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(context, MyReciever.class); 
intent.putExtra(ONE_TIME, Boolean.TRUE); 
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); 
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 
10*60*1000, pi); 

Um auf mehr ausgeführt halten, bietet Android spl APIs langes Intervall, wie unten AlarmManager.Hour, FifteenMinutes, Halfday usw. zu schaffen ,.

Dank Krishh

Verwandte Themen