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

问题描述:

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

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

当然,我在主要活动中有onSensorsChanged()方法。我愿意把它放在一个服务中,但是根据我的理解,如果它仍然在主UI线程中,它将无济于事。我可以把它放在自己的线程中,但我不确定这会使环境模式减慢传感器的速度。 问题: 1)有没有办法阻止环境模式?或者如果检测到关闭它? 2)如果传感器处于其自己的服务/线程中,我是否可以让活动进入睡眠状态并仍然保持全速传感器采集? 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