setExactAndAllowWhileIdle - ist nicht genau wie Entwicklerreferenz
AlarmManager auf API19 hat die Methode setExact ()um eine genaue alarm.
Genau bedeutet --> Wenn ich einen Wecker um 2:01 Uhr es ausgelöst wird um 2:01 Uhr
Auf API-23 - Marhsmwallow (6.0) es ist eine neue Methode, setExactAndAllowWhileIdle()aber als der Referenz ist es nicht GENAU, denn es wird nur ausgelöst, jede minute und in low-power-idle-mode nur alle 15 Minuten.
Genau != alle 15 Minuten 🙂
Also, wie kann ich erreichen genaue alarm - mit AlarmManager in 6.0?
Wenn ein Benutzer fügt eine Erinnerung oder ein Termin im Kalender und möchte informiert werden 10 Minuten vor der Veranstaltung sollte zeigen, wird der alarm GENAU 10 Minuten vor der Veranstaltung. Mit setExactAndAllowWhileIdle() scheint dies nicht möglich ist.
Referenz-Link:
http://developer.android.com/reference/android/app/AlarmManager.html#setExactAndAllowWhileIdle(int, long, android.app.PendingIntent)
InformationsquelleAutor der Frage chrisonline | 2015-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie herzlich willkommen,versuchen Sie
setAlarmClock()
AFAIK ist es unberührt von Doze-Modus. AnsonstenAlarmManager
ist nicht eine praktikable option für Sie. Auch nachdem Sie Ihre app auf den Akku-Optimierung whitelist wird nicht helfen, wieAlarmManager
Verhalten nicht ändern basiert auf der whitelist.Sie sind willkommen zu verwenden, GCM, als eine hohe-Priorität-Nachricht sollten Sie sich eine Gelegenheit, um dem Benutzer darauf hinzuweisen. Dies setzt selbstverständlich Voraus, dass die Netzwerk-Konnektivität.
Nur offline-Lösung, dass ich mir bewusst bin — und das bin ich derzeit testen — ist der Benutzer fügen Sie Ihre app zur Akku-Optimierung whitelist, dann verwenden Sie ein Vordergrund-service (um zu versuchen, um Ihren Prozess herum), eine
ScheduledExecutorService
(für den Zeitpunkt), und eine teilweiseWakeLock
(halten die CPU auf). Dies wird ziemlich verheerend für den Benutzer die Batterie.InformationsquelleAutor der Antwort CommonsWare
Mit setExactAndAllowWhileIdle() for a one-time alarm wird ausgelöst, genau auf die angegebene Zeit sogar im Halbschlaf im idle-Modus. Also das ist wohl der Weg zu gehen.
Probleme beginnen, wenn Sie möchten, wiederholen Sie den alarm mit einer rate von < 15 min (oder jede andere in einer Zeit, < 15 min entfernt von der letzten)das wird nicht funktionieren, Windows im idle-Modus, wo solche Alarme sind gezwungen, die nächsten 15 min oder ausgeführt werden, wenn im Leerlauf die Wartung beginnt, was geschieht für etwa zehn Minuten erst nach 1 Stunde, dann nach weiteren 2 Stunden, nach weiteren 4 Stunden und so weiter.
- BEARBEITEN -
Heute Nov 17, Dianne Hackborn schreibt in dieser Beitrag's Kommentare:
"Für was es Wert ist, die minimale Zeit zwischen während im Leerlauf werden die Alarme ändern, um 9 Minuten irgendwann relativ bald (auch auf Geräten mit der aktuellen Marshmallow-builds)."
Dadurch ändert sich nichts grundsätzlich, wenn.
InformationsquelleAutor der Antwort sec_aw
Hier sind meine Diskussion mit Ian Lake auf Google+!
setExactAndAllowWhileIdle() ist exakt und sollte funktionieren.
Die 15-Minuten-time frame ist falsch in der java doc.
InformationsquelleAutor der Antwort chrisonline
Habe ich festgestellt, dass bisher die beste option ist die Verwendung einer SyncAdapter, erstreckt AbstractThreadedSyncAdapter. Ich lege es auf automatisch laufen halten meinen code an der gewünschten Intervall:
InformationsquelleAutor der Antwort Hashim Akhtar
Ich habe versucht, erstellen Sie eine automation system im hintergrund ausgeführt werden. Meine Frequenzbereich zwischen 1-15 Minuten. Mein Wunsch war es, nicht verwenden Sie ein Vordergrund-service. Indem Sie sich den Namen der Methode "setExactAndAllowWhileIdle", dachte ich, dass ja, es ist sicher zu gehen, mit ein-Zeit-Alarme, die Planung der nächsten, wenn Sie fertig.
Allerdings, ich konnte nicht finden, eine Möglichkeit zum ausführen von code im doze-Modus mit Alarm läuft häufiger als 15 Minuten. Stattdessen habe ich zu starten wählen Sie eine Vordergrund-service, wenn doze-Modus aktiviert wird und zu stoppen, die Vorder-Dienst, wenn das Telefon erwacht. Benutzer werden nicht sehen, Ihre Vorder-Benachrichtigung, wenn die mit seinem/Ihrem Handy. Ich don ' T Pflege viel über die, in den doze-Modus.
Müssen Sie sich "android.os.Aktion.DEVICE_IDLE_MODE_CHANGED" Vorsatz-filter in Ihrem WakefulBroadcastReceiver. Betreuung der Umsetzung in die manifest kann nicht helfen.
InformationsquelleAutor der Antwort Mertcan Çüçen