我已经为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
以毫秒为单位测量。
我想我不需要警告你不让设备进入环境对电池的不利影响。一个普通的Wear设备可能会也可能不会持续你提议的整整一个小时。
2)是的。这是Service
的一种定义,"一个应用程序组件,代表一个应用程序希望执行一个长时间运行的操作,而不与用户交互"(来自https://developer.android.com/reference/android/app/Service.html)。
3)是的。我在很多应用中都这么做;没有要求Data API调用必须在UI线程上。