计步越来越成为人们的强需求,一般有手环计步,手表计步,手机计步等实现,这篇文章讨论下手机上实现计步的两种方案。
人在走路时,加速度传感器会形成一个类似正弦波形图,因此可以根据检测波峰波谷记步。见下图:
可以分为几步进行:
使用gsensor来计步可能会存在以下问题:
相对于使用加速度传感器获取数据和计算实现计步的方式,通过计步传感器sensor监测或者读取计步数对于终端的续航能力有了很大的提高。
在Android4.4(KITKAT)系统API提供了两种硬件计步传感器的支持,因为是硬件所以需要厂商支持。可以通过以下方式查看你的手机是否支持
adb shell pm list features如果有以下两项说明支持
feature:android.hardware.sensor.stepcounter
feature:android.hardware.sensor.stepdetector
代码检测Android4.4后更高并且有sensor支持
private boolean isKitkatWithStepSensor() {
// BEGIN_INCLUDE(iskitkatsensor)
// Require at least Android KitKat
int currentApiVersion = android.os.Build.VERSION.SDK_INT;
// Check that the device supports the step counter and detector sensors
PackageManager packageManager = getActivity().getPackageManager();
return currentApiVersion >= android.os.Build.VERSION_CODES.KITKAT
&& packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_STEP_COUNTER)
&& packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_STEP_DETECTOR);
// END_INCLUDE(iskitkatsensor)
}
在使用前需要声明权限
<uses-feature android:name="android.hardware.sensor.stepcounter" />
<uses-feature android:name="android.hardware.sensor.stepdetector" />
TYPE_STEP_COUNTERAPI的解释说返回从开机被激活后统计的步数,当重启手机后该数据归零,该传感器是一个硬件传感器所以它是低功耗的。为了能持续的计步,请不要反注册事件,就算手机处于休眠状态它依然会计步。当激活的时候依然会上报步数。该sensor适合在长时间的计步需求。
TYPE_STEP_DETECTOR翻译过来就是走路检测,API文档也确实是这样说的,该sensor只用来监监测走步,每次返回数字1.0。如果需要长事件的计步请使用TYPE_STEP_COUNTER。
用法比较简单,实现比较方便,由于我们需要长时间的计步,所以一般我们采用 TYPE_STEP_COUNTER
。
优点:
缺点:
总结来说,如果用g-sensor来实现计步会保证良好的兼容性,排除锁屏自动关闭sensor的定制系统除外,基本所有的Android手机都可以使用,但是需要一定时间的算法调试和后台保活机制的健全保证,开发周期较长;如果项目需求开发周期较短,并且没有强制性的全机型兼容,那么可以考虑使用step-sensor,优点比较明显,而且使用协处理器代替纯软件计算实现计步监测已经是大势所趋。另外以上两种方案都需要开机自启权限。