我有一个应用程序,样品加速度计数据并对其进行处理测试。
安装了该应用首次onSensorChanged()被调用以1/2其中速率在samplePeriodUs指定
我试过注销和注册的SensorManager听者的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使用()
这种行为实在奇怪。下面是我用在我的机器学习应用程序来管理传感器的方法。
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找到