我正在从重启这样的接收步骤中创建一个演示。
public class MainActivity extends AppCompatActivity implements SensorEventListener {
private SensorManager sensorManager;
@Override
public void onCreate(Bundle savedInstanceState) {
...
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
}
@Override
protected void onResume() {
super.onResume();
countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
sensorManager.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_UI);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_STEP_COUNTER) {
Log.i("TAG","step from reboot" + String.valueOf(event.values[0]));
}
}
}
但是当我在我的设备(SamSung Galaxy S4)上进行测试时,STEP_COUNTER有时效果不佳:(。我通过与SHealth进行比较来判断它
经过多次测试后我找到了
几乎所有时间,STEP_COUNTER都会返回等于SHealth 但的步骤。因此我认为SHealth可能会使用另一个传感器来计算步数,但我不知道哪个传感器?我认为它不是STEP_DETECTOR因为STEP_DETECTOR在关闭屏幕时返回的步骤非常少。
有时,STEP_COUNTER在SHealth仍然返回该步骤时停止工作,例如,我走了大约100步=> SHEalth显示器110和演示应用程序显示器100,然后我继续步行约200步=> SHEalth显示305和演示应用程序显示121(似乎停止工作)
我还收到许多用户使用不同设备的报告(评分很低:()但我只能在我的设备上重现。
我不知道如何解决这个问题。我认为STEP_COUNTER是接收步骤的最佳传感器(与STEP_DETECTOR比较)
非常感谢任何帮助或建议。
答案 0 :(得分:3)
在使用手机的默认步骤传感器时,我们也遇到过这个问题。但是,我们正在使用TYPE_STEP_DETECTOR - 我们没有您遇到的问题(超过100000个用户),所以可能出现了问题? 这个问题非常类似于你不能依赖这种机制的方式。对于我们的情况,我们在很短的时间内收到了很多步骤。即使你是老虎,也不能做那么多步骤。
就是这样,三星操纵操作系统,有很多东西可以说是nexus设备,但不是三星设备。 在尝试修复步进传感器的行为后,我们发现我们需要替代三星手机,或者对于不支持它的手机。
仅供参考,我们遇到过一些手机(主要是摩托罗拉)在设备中没有步骤传感器,所以试图找到传感器,返回null。
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor stepDetector = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
if (stepsDetector != null) {
//Do something
}
您可以使用wakelock and accelerometer(耗电量大,小心)实施自己的机制。
答案 1 :(得分:0)
离开应用程序时是否取消注册传感器?根据SDK文档:
“如果您想长时间持续跟踪步数,请勿取消注册此传感器,以便继续计算即使AP处于挂起模式,也会在AP处于唤醒状态时报告聚合计数。“
希望这会有所帮助......