2016-06-14 8 views
0

Ich möchte alle 30 Sekunden android Alarmmanager feuern (auch meine Anwendung in Tiefschlaf Stimmung im Hintergrund), da ich alle 30sec GPS-Standort sammeln und auf den Server hochladen muss.Android Repeating Alarm Manager in allen 30 Sekunden

AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
Intent i = new Intent(this, OnAlarmReceiver.class); 
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);    
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       SystemClock.elapsedRealtime() + 30000, 
       30000, 
       pi); 

Ich habe den Einsatz über Code und es funktioniert gut, wenn das Gerät ist in nicht schlafen mood.But scheint, wie es nicht richtig in Schlaf Stimmung funktioniert. Nach einigen Zeiten ist es Brände in 5-Minuten-Intervallen.

Meine Anwendung läuft auf Android 5.0.2 Samsung Tablet.

ich gefunden habe, gibt es ein Problem zu Alarm Manager im Zusammenhang mit Android 5.0 oben (speziell Samsung-Geräte) https://code.google.com/p/android/issues/detail?id=82001

jede Abhilfe für dieses?

Danke.

+0

Wenn dies auf einen Energiesparmodus zurückzuführen ist, besteht die einzige Möglichkeit darin, Ihre App manuell auf die weiße Liste zu setzen und Ihre Benutzer per Dialog darüber zu informieren. Ich hatte ein ähnliches Problem auf Huawei Mate 7 (Lollipop & Marshmallow), sie hatten auch ihre eigene Power-Management implementiert und es gibt keine Möglichkeit, dies loszuwerden. – Opiatefuchs

+0

Und eine Warnung: In zukünftigen Versionen, oder besser seit Marshmallow, können Sie diese Methode nicht verwenden (setRepeating). Und der AlarmManager kann nur alle 9 Minuten ausgelöst werden. Daher ist es eine schwierige Aufgabe, und Sie müssen einige Umgehungslösungen durchführen. Siehe Doze Mode Docs: https://developer.android.com/training/monitoring-device-state/doze-standby.html – Opiatefuchs

+0

Ok danke. Gibt es eine andere Möglichkeit, den GPS-Standort im Hintergrund zu finden? Meine Anwendung muss den GPS-Standort mehr als einen Tag erfassen. Ich denke Service ist keine zuverlässige Lösung dafür und die meisten Beispiele verwenden Alarm Manager/Wake Lock, um dies zu erreichen. –

Antwort

0

Verwenden Sie SetInexactRepeating für über 5.0 und verwenden Sie RTC_WAKEUP. Dies löst den Alarm sicher aus, auch wenn sich das Handy im Schlafmodus befindet. Das hat für mich funktioniert. Wenn Sie den Dienst nicht für GPS-Standorte verwenden möchten. Sie können den mit Google Maps verknüpften Code in den Broadcast Receiver einfügen und für das Hochladen auf den Server codieren. Im schlimmsten Fall ist der Dienst die beste Option für Hintergrundprozesse wie das Erfassen des GPS-Standorts.

+0

Ich habe dies auf Huawei Version 5.1.1 Tablet versucht und es funktioniert nicht. –