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

Android Wear:测量传感器和防止环境模式/睡眠,android,multithreading,wear-os,sensors,android-wear-data-api,Android,Multithreading,Wear Os,Sensors,Android Wear Data Api,我已经为Android Wear构建了一个应用程序,需要连续测量运动(加速计)传感器一个小时左右,以便进行数据采集。在操作过程中,我遇到了设备进入环境模式(或睡眠)和减慢(或关闭)传感器的问题。 因此,我使用下面的命令来锁定屏幕,它似乎可以工作。但这似乎也是浪费,因为我实际上不需要屏幕,只需要传感器运行 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//允许睡觉 目前,我在主活动中有onSensors

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

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

目前,我在主活动中有onSensorsChanged()方法。我愿意把它放在一个服务中,但据我所知,如果它仍然在主UI线程中,这将不会有帮助。我可以把它放在自己的线程中,但我不确定它是否会通过减慢传感器的速度来呈现环境模式。 问题: 1) 有没有办法防止环境模式?或者如果检测到要关闭它? 2) 如果传感器处于其自己的服务/线程中,我是否可以让活动进入睡眠状态,并且仍然以全速率保持传感器采集? 3) 如果传感器在其自己的服务/线程中,我仍然可以通过dataapi向手机发送数据吗? 谢谢。

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

PowerManager powerMgr = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerMgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
wakeLock.acquire(duration);
其中,
标记
是一个字符串,用于指示持有唤醒锁的组件,
持续时间
以毫秒为单位测量

我想我不需要提醒您防止设备进入环境中会对电池产生不利影响。平均磨损装置可能会也可能不会持续你提议的整整一个小时

2) 对。这是
服务的一种定义,即“表示应用程序在不与用户交互的情况下执行较长运行操作的愿望的应用程序组件”(来自)

3) 对。我在很多应用程序中都这么做;不要求数据API调用必须在UI线程上。

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

PowerManager powerMgr = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerMgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
wakeLock.acquire(duration);
其中,
标记
是一个字符串,用于指示持有唤醒锁的组件,
持续时间
以毫秒为单位测量

我想我不需要提醒您防止设备进入环境中会对电池产生不利影响。平均磨损装置可能会也可能不会持续你提议的整整一个小时

2) 对。这是
服务的一种定义,即“表示应用程序在不与用户交互的情况下执行较长运行操作的愿望的应用程序组件”(来自)


3) 对。我在很多应用程序中都这么做;不要求数据API调用必须在UI线程上。

PowerManager.PARTIAL_WAKE_LOCK不会阻止手表进入环境模式,但会阻止cpu休眠。因此,这正是他想要的。PowerManager.PARTIAL_WAKE_LOCK不会阻止手表进入环境模式,而是阻止cpu睡眠。所以这就是他想要的,只是措辞错误。