0

Ich habe eine App für Android Wear entwickelt, die die Bewegungssensor (Beschleunigungssensor) kontinuierlich für eine Stunde oder so für Datenerfassungszwecke zu messen. Während des Betriebs hatte ich Probleme damit, dass das Gerät in den Umgebungsmodus (oder Schlafmodus) wechselte und die Sensoren verlangsamte (oder abschaltete). Als Ergebnis verwende ich den folgenden Befehl, um den Bildschirm zu sperren und es scheint zu funktionieren. Aber es scheint auch verschwenderisch, da ich den Bildschirm eigentlich nicht brauche, nur die Sensoren laufen.Android Wear: Messung von Sensoren und Verhinderung von Umgebungsmodus/Schlaf

getWindow(). ClearFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // Erlaube, schlafen zu gehen

Natürlich habe ich die onSensorsChanged() Methode in der Hauptaktivität. Ich bin bereit, es in einen Dienst zu stellen, aber von dem, was ich verstehe, wird es nicht helfen, wenn es immer noch im Haupt-UI-Thread ist. Ich könnte es in einen eigenen Thread setzen, aber ich bin mir nicht sicher, dass das den Ambient Mode davon abhalten wird, die Sensoren zu verlangsamen. Fragen: 1) Gibt es einen Weg, um den Umgebungsmodus zu verhindern? Oder wenn erkannt wird, es auszuschalten? 2) Wenn die Sensoren in ihrem eigenen Dienst/Thread sind, kann ich die Aktivität in den Ruhezustand versetzen und trotzdem die Sensorerfassung bei voller Geschwindigkeit aufrechterhalten? 3) Wenn die Sensoren in ihrem eigenen Dienst/Thread sind, kann ich noch Daten über die Datenleitung an das Telefon senden? Danke.

Antwort

3

1) Verwenden Sie eine Wecksperre. Damit die CPU wach, aber lassen Sie den Bildschirm dunkel gehen, können Sie Code wie den folgenden verwenden:

PowerManager powerMgr = (PowerManager) getSystemService(Context.POWER_SERVICE); 
wakeLock = powerMgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); 
wakeLock.acquire(duration); 

wo TAG eine Zeichenfolge ist die Komponente, um anzuzeigen, die Wach-Sperre hält, und duration wird in Millisekunden gemessen.

Ich gehe davon aus, dass ich Sie nicht vor den ungünstigen Auswirkungen der Batterie warnen muss, um das Gerät vor Umgebungseinflüssen zu schützen. Ein durchschnittliches Verschleißgerät kann oder kann nicht für die von Ihnen vorgeschlagene feste Stunde dauern.

2) Ja. Dies ist eine Art Definition einer Service, "eine Anwendungskomponente, die entweder den Wunsch einer Anwendung darstellt, eine länger andauernde Operation durchzuführen, während sie nicht mit dem Benutzer interagiert" (von https://developer.android.com/reference/android/app/Service.html).

3) Ja. Ich mache das in einer Reihe von Apps; Es ist nicht erforderlich, dass Daten-API-Aufrufe im Benutzeroberflächenthread enthalten sein müssen.

+0

PowerManager.PARTIAL_WAKE_LOCK stoppt nicht, dass die Uhr in den Umgebungsmodus wechselt, stoppt jedoch die CPU. Also ist es das, was er will, nur falsch formuliert. –

+0

@CraigJ danke, ich habe die Beschreibung geklärt. – String