Android Wear:测量传感器并防止环境模式/睡眠

Android Wear: measuring sensors and preventing ambient mode / sleep

我为 Android Wear 构建了一个应用程序,需要连续测量运动(加速度计)传感器一个小时左右以收集数据。在操作期间,我遇到了设备进入环境模式(或睡眠)并减慢(或关闭)传感器的问题。 结果,我使用以下命令锁定屏幕并且它似乎可以工作。但这似乎也很浪费,因为我实际上不需要打开屏幕,只需要传感器 运行.

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // 允许进入睡眠

目前,我在主 activity 中有 onSensorsChanged() 方法。我愿意将它放在服务中,但据我了解,如果它仍在主 UI 线程中,那将无济于事。我可以将它放在自己的线程中,但我不确定这是否会因减慢传感器而呈现环境模式。 问题: 1)有没有办法防止环境模式?或者如果检测到将其关闭? 2) 如果传感器在它们自己的 service/thread 中,我可以让 activity 进入睡眠状态并仍然保持全速传感器收集吗? 3) 如果传感器在它们自己的 service/thread 中,我仍然可以通过 dataapi 将数据发送到 phone 吗? 谢谢

1) 使用唤醒锁。要让 CPU 保持清醒但让屏幕变暗,您可以使用如下代码:

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

其中 TAG 是一个字符串,表示持有唤醒锁的组件,duration 以毫秒为单位。

我想我不需要警告您防止设备进入环境的不利电池影响。普通的 Wear 设备可能会或可能不会持续您提议的完整小时数。

2) 是的。这是一种 Service、"an application component representing either an application's desire to perform a longer-running operation while not interacting with the user"(来自 https://developer.android.com/reference/android/app/Service.html)的定义。

3) 是的。我在许多应用程序中都这样做;不要求数据 API 调用需要在 UI 线程上。