我正在开发一个使用TYPE_STEP_DETECTOR的应用程序。即使手机屏幕关闭,我也想检测用户是否正在走路。但是当屏幕关闭时,传感器TYPE_STEP_DETECTOR不起作用。 所以我使用PowerManager / WakeLock使CPU不休眠。但它仍然不起作用。 作为比较,我在我的演示应用程序中添加了磁传感器监听器和步进检测器监听器,当屏幕打开时,它们都可以接收数据,但是当屏幕关闭时,只有磁传感器可以接收数据。
PowerManager manager = (PowerManager)getSystemService(Context.POWER_SERVICE);
mWakeLock = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
mWakeLock.acquire();
然后:
stepDetectorSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
sensorManager.registerListener(stepDetectorListener, stepDetectorSensor, SensorManager.SENSOR_DELAY_NORMAL);
然后:
magnetSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
sensorManager.registerListener(magnetSensorListener, magnetSensor, SensorManager.SENSOR_DELAY_NORMAL);
和
stepDetectorListener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
@Override
public void onSensorChanged(SensorEvent arg0) {
//NO DATA when screen off
}
};
magnetSensorListener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
@Override
public void onSensorChanged(SensorEvent arg0) {
//DATA when screen off
}
};
答案 0 :(得分:0)
如果您想检查用户是否正在行走 - 您必须采取完全不同的方法。谷歌发布了ActivityRecognitionApi
。通过此框架,您可以跟踪用户当前的活动(例如WALKING,RUNNING和其他活动。)
它还允许您在应用处于后台时跟踪活动。