屏幕关闭时Android TYPE_STEP_DETECTOR

时间:2014-09-24 07:48:56

标签: android

您好我正在开发一个计步器应用程序,它使用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 个答案:

答案 0 :(得分: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"