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

时间:2016-08-20 21:24:41

标签: android multithreading wear-os sensor android-wear-data-api

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

getWindow()clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)。 //允许去睡觉

原则上,我在主活动中有onSensorsChanged()方法。我愿意把它放在一个服务中,但从我的理解,如果它仍然在主UI线程中将无济于事。我可以将它放在自己的线程中,但我不确定这会使环境模式减慢传感器的速度。 问题: 1)有没有办法防止环境模式?或者如果检测到将其关闭? 2)如果传感器在他们自己的服务/线程中,我可以让活动进入睡眠状态并仍然保持全速传感器采集吗? 3)如果传感器在他们自己的服务/线程中,我是否仍然可以通过dataapi将数据发送到手机? 感谢。

1 个答案:

答案 0 :(得分:4)

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线程上。