2016-07-31 24 views
2

Ich entwickle eine App, die ich gerne Beschleunigungssensor-Daten ständig überwachen würde, auch wenn der Bildschirm ausgeschaltet ist, aber ich möchte auch, dass meine Batterie länger als 5 Stunden hält:/Die offensichtlichste Sache natürlich ist die Abtastrate sehr niedrig zu setzen. Ich habe versucht, das Beschleunigungsmesser registrieren sowohl mit SENSOR_DELAY_NORMAL und mit einem Mikro Wert von 1000000 (einmal pro Sekunde) mitWie wird Beschleunigungssensor mit einer sehr niedrigen Abtastrate in einem Hintergrunddienst verwendet? (um Batterien zu schonen)

senSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
senAccelerometer = senSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
senSensorManager.registerListener(this, senAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); 

aber dem Android O schnell (nachdem ich das Telefon für ein paar Sekunden wackeln) entscheidet diese außer Kraft setzen Empfohlene Abtastraten und startet meine App non-stop Beschleunigungssensor Ereignisse bei etwa 100/Sekunde, auch wenn ich den Bildschirm ausschalten. Unnötig zu sagen, das ist nicht gut für die Akkulaufzeit.

Was ich bisher versucht habe, ist ein bisschen ein Hack, und ich frage mich, ob 1. es gibt eine bessere, Android appoved Weg, es zu tun, und 2. wenn was ich getan habe, wird es nicht tatsächlich so arbeiten, wie ich es möchte. Meine aktuelle Lösung besteht darin, den Beschleunigungssensor sofort nach dem ersten Lesen (innerhalb des Listener-Rückrufs) aufzuheben, den Zeitpunkt der Aufhebung der Registrierung aufzuzeichnen und dann eine separate Timer-Schleife zu verwenden, die den Beschleunigungsmesser-Listener nach einer halben Sekunde erneut registriert. Diese scheint zu funktionieren, aber ich weiß nicht, ob es Probleme auf einigen Geräten verursacht, oder vielleicht die RegisterListener-Funktion selbst Batterien auf einigen Geräten ableitet? Irgendein Rat von irgendjemandem anderen, der einen nicht-Batterie-entwässernden immer-auf Hintergrundbeschleunigungsmesserhörer gebildet hat, würde sehr geschätzt. Vielen Dank.

EDIT 2016.09.07: Der Hack, die ich oben beschrieben ist, zu funktionieren scheint und scheint deutlich auf Batteriestrom zu sparen, solange ich die Abtastgeschwindigkeit auf etwa 0,5 oder 1,0 Sekunden verlangsamen. Wenn ich mehr Erfahrung, gut oder schlecht, mit dieser Technik habe, werde ich Sie alle wissen lassen. (Wenn es darauf ankommt, teste ich das auf einer Note 4, Android 5.1.1) (auch ein bisschen mehr erklärenden Code oben)

Antwort

0

Sie könnten sehen, wie es in diesem Projekt behandelt wird:

https://github.com/alanszlosek/androidstudio-accelerometer-gps/blob/master/app/src/main/java/com/alanszlosek/whenmoving/MainService.java

Scheint, Alarme zu verwenden, um die Protokollierung zu planen. Eine andere Situation mit noch geringerer Abtastfrequenz, also bin ich mir nicht sicher, welche Methode effizienter ist.

Wäre es möglich, dass Sie Ihren Logger-Code auf Github oder irgendwo stecken? Ich versuche Beschleunigungsmesser-Tracking für ein Grant-Projekt zu machen und habe Schwierigkeiten, die Dienste und Wakelocks gut zusammen zu spielen.