屏幕关闭时的 Android TYPE_STEP_DETECTOR

Posted

技术标签:

【中文标题】屏幕关闭时的 Android TYPE_STEP_DETECTOR【英文标题】:Android TYPE_STEP_DETECTOR while screen off 【发布时间】:2014-11-18 14:52:54 【问题描述】:

您好,我正在为 android KitKat 开发一个使用 TYPE_STEP_DETECTOR 传感器类型的计步器应用程序,在我关闭屏幕或锁定手机之前,一切似乎都可以正常工作,我发现它在屏幕显示时不会触发事件已关闭。

我知道 TYPE_STEP_COUNTER 变体,但我不太热衷于每天开始时密切关注起始计数。我宁愿在检测到步数时触发事件,然后在当天的步数中添加“1”。

有没有人在关闭屏幕的情况下在后台运行的服务中成功使用 TYPE_STEP_DETECTOR?

sensorEventListener 中的代码是:

if (source.equals(countSensor))  // data came from step detector 
    // stepcount from step counter event.values[0]; 
    curStepCount = (int) event.values[0]; 
    stepcount += curStepCount;

重新打开屏幕后,计数只增加了 1 步。

【问题讨论】:

找到解决方案了吗? 【参考方案1】:

问题是功耗。如果手机在每一步发生时唤醒应用处理器,它会消耗更多的电量,并可能导致电池寿命变短。对于您的手机,制造商已决定不支持传感器的“唤醒”版本,该版本会在检测到脚步时打开手机。

为了节省电力,最好在某种运动协处理器中进行计数,通常是功耗极低的 ARM Cortex M4 处理器。这是在Nexus 5 中介绍的。如果您访问TYPE_STEP_COUNTER 传感器,这应该可以满足您的需求。

最后,Android 规范允许某人建立“唤醒”传感器,即打开应用处理器以向您的应用发出信号并允许您对其进行计数的东西。在这种特殊情况下,您不应该这样做,因为这会对电池寿命产生很大影响。

从第 449 行开始参见此处,注意它允许“唤醒和非唤醒”版本: http://source.android.com/devices/halref/sensors_8h_source.html

/*
 * SENSOR_TYPE_STEP_DETECTOR
 * reporting-mode: special
 *
 * A sensor of this type triggers an event each time a step is taken
 * by the user. The only allowed value to return is 1.0 and an event
 * is generated for each step.
 *
 * Both wake-up and non wake-up versions are useful.
 */

#define SENSOR_TYPE_STEP_DETECTOR                   (18)
#define SENSOR_STRING_TYPE_STEP_DETECTOR            "android.sensor.step_detector"

【讨论】:

以上是关于屏幕关闭时的 Android TYPE_STEP_DETECTOR的主要内容,如果未能解决你的问题,请参考以下文章

wifiLock 和 wakeLock 在 Android 上无法正常工作

在 xamarin.android 中管理屏幕旋转时的片段外观

从 Android 应用安装程序和主屏幕启动应用程序时的活动堆栈排序问题

Android 退出应用程序关闭

进入后台时的Android缩略图

应用关闭时的 Android Studio 推送通知