2016-07-12 5 views
0

Meine Anwendung sollte erkennen, ob der Benutzer zu schlafen war, um sich mit einer Willkommensnachricht zu starten, wenn der Benutzer aufwacht und sein Telefon zum ersten Mal morgens, nachmittags oder wann immer er aufwacht, durch Drücken des Power Puttons und Geben Sie das Muster auf dem Homescreen oder Pin oder was auch immer.Wie kann die Zeit bestimmt werden, für die das Gerät nicht verwendet wurde?

Ich möchte dies durch Messen der Zeit, die das Gerät das letzte Mal verwendet wurde. Ich gehe von 8 Stunden Schlaf aus, also wenn 8 Stunden seit dem letzten Ausschalten vergangen sind, startet beim nächsten Einschalten des Mobiltelefons die Anwendung (bzw. eine Funktion im Inneren).

Der Bildschirm, der wegen eines Alarms oder irgendetwas anderes als Benutzerinteraktion läuft, sollte nicht zählen.

Ich schaute auf Logcat und es gab mir die nützliche Information I/PowerManagerService: Going to sleep due to power button. Ein PowerManagerServiceListener könnte also ein Weg sein. Ich habe https://developer.android.com/reference/android/os/PowerManager.html gefunden, aber es dient dazu, das Display aktiv zu halten, nicht um es passiv zu melden. Ein anderer Kandidat ist KeyguardViewMediator: onStartedGoingToSleep(2) und KeyguardServiceDelegate: onScreenTurnedOff().

Sicher, ich könnte eine Abfrage-Anwendung erstellen, die durch Logcat aussieht, aber das klingt wie eine stark batterieverbrauchende Ansatz.

Welche Leistung freundliche Art ist da, um zu erreichen, was ich will?

Antwort

0

Laut Ihrer Beschreibung sind Sie an einer Granularität von Stunden interessiert. Dann können Sie jede Stunde einen Wiederholungsalarm planen (siehe Scheduling Repeating Alarms), die Zeit in einer gemeinsamen Präferenz speichern, eine BOOT_COMPLETED Sendung empfangen, die Zeiten vergleichen und entscheiden, was zu tun ist.

Allerdings schätze ich, dass viele Benutzer ihre Geräte nicht ausschalten, also würde ich versuchen herauszufinden, ob die Annahme, dass Ihr Ansatz basiert, gültig ist.

können Sie auch versuchen, getDetectedActivity() von Snapshot Awareness API und prüfen, ob DetectedActivity zum Beispiel STILL irgend bestimmten Intervall ist.

+0

Es geht um die Mittel zu einem Ende. Wie misst man die Zeit zwischen den Interaktionen mit dem Gerät, wie beim Tippen auf den Bildschirm, Drücken der Power-Taste ... –

Verwandte Themen