我已经为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);
其中TAG
的字符串表示持有唤醒锁的组件,duration
以毫秒为单位。
我认为我不需要警告您有关使设备避免进入环境的不利电池影响。一个普通的Wear设备可能会持续一整个小时,也可能不会持续一整个小时。
2)是的。这是“”的一种定义Service
,“一个应用程序组件代表应用程序希望在不与用户交互的同时执行长时间运行的操作”(来自https://developer.android.com/reference/android/app/ Service.html)。
3)是的。我在许多应用程序中都这样做;不需要Data API调用必须位于UI线程上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句