您好我正在开发一个计步器应用程序,它使用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;
重新打开屏幕后,我最终只在计数中添加了一步。
答案 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"