0

我已經構建了一個Android Wear應用程序,需要連續測量運動(加速度計)傳感器一個小時左右才能進行數據收集。在操作過程中,我遇到了設備進入環境模式(或睡眠)並放慢(或關閉)傳感器的問題。 因此,我正在使用以下命令來鎖定屏幕,它似乎工作。但它也似乎是浪費,因爲我實際上不需要屏幕,只是傳感器運行。Android Wear:測量傳感器並防止環境模式/睡眠

getWindow()。clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); //允許睡覺

當然,我在主要活動中有onSensorsChanged()方法。我願意把它放在一個服務中,但是根據我的理解,如果它仍然在主UI線程中,它將無濟於事。我可以把它放在自己的線程中,但我不確定這會使環境模式減慢傳感器的速度。 問題: 1)有沒有辦法阻止環境模式?或者如果檢測到關閉它? 2)如果傳感器處於其自己的服務/線程中,我是否可以讓活動進入睡眠狀態並仍然保持全速傳感器採集? 3)如果傳感器在自己的服務/線程中,我仍然可以通過數據傳輸將數據發送到手機嗎? 謝謝。

回答

3

1)使用喚醒鎖。爲了保持CPU清醒,但讓屏幕黯淡下去,你可以使用如下代碼:

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

其中TAG是一個字符串來表示持有喚醒鎖組件,並duration以毫秒爲單位進行測量。

我假設我不需要警告您保持設備不會進入環境的不良電池效應。平均佩戴設備可能會持續或可能不會持續您提出的實時小時。

2)是的。這是Service的定義,「應用程序組件代表應用程序希望在不與用戶交互的情況下執行長時間運行的操作」(來自https://developer.android.com/reference/android/app/Service.html)。

3)是的。我在很多應用程序中都這樣做;沒有要求Data API調用需要在UI線程上。

+0

PowerManager.PARTIAL_WAKE_LOCK不會停止手錶進入環境模式,但會阻止CPU進入睡眠狀態。所以這就是他想錯誤措辭的原因。 –

+0

@CraigJ謝謝,我已經澄清了描述。 – String