我正在用一个应用程序进行测试,该应用程序可以对加速度计数据进行采样并进行处理。
第一次安装应用程序时,onSensorChanged()以1/2的速度调用,其速率在samplePeriodUs中指定
我尝试在onPause()中注销并注册onPause侦听器。一种看起来可行的方法是在onResume()中输入1/2的样本率。这不是正确的做事方式吗?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(this, accelerometer, 20000); }
public void onResume() {
super.onResume();
sensorManager.unregisterListener(this);
sensorManager.registerListener(this, accelerometer, 10000);
}
public void onPause() {
super.onPause();
sensorManager.unregisterListener(this); }我期望sensorManager.registerListener(这个,加速度计,20000);用于onResume()和onCreate()
发布于 2019-02-06 17:29:39
这种行为确实很奇怪。下面是我在机器学习应用程序中管理传感器的方法。
private SensorManager mSensorManager;
private Sensor mAccelerometer, mGyroscope, mMagnetometer;
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(mSensorEventListener, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
mSensorManager.registerListener(mSensorEventListener, mGyroscope, SensorManager.SENSOR_DELAY_NORMAL);
mSensorManager.registerListener(mSensorEventListener, mMagnetometer, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(mSensorEventListener);
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
mGyroscope = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
mSensorManager.registerListener(mSensorEventListener, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
/**
* Listener that handles sensor events
*/
private final SensorEventListener mSensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
//if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
if (event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
// Do work
} else if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) {
// Do work
} else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
// Do work
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
}; 完整的项目源可以在https://github.com/Wickapps/Activity-Tracker找到。
https://stackoverflow.com/questions/54558882
复制相似问题