Как должен SensorManager.registerListener () вызываться в onResume ()? - PullRequest
0 голосов
/ 06 февраля 2019

Я тестирую с приложением, которое собирает данные акселерометра и обрабатывает их.

При первой установке приложения вызывается onSensorChanged () со скоростью 1/2, скорость которой указывается в samplePeriodUs

Я попытался отменить регистрацию и зарегистрировать прослушиватель sensorManager в onPause ().Один хак , который, кажется, работает, это ввести 1/2 частоты дискретизации в onResume ().Это не может быть правильным способом ведения дел?

 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 (this, акселерометр, 20000);для использования в onResume () и onCreate ()

1 Ответ

0 голосов
/ 06 февраля 2019

Такое поведение действительно странно.Вот подход, который я использую для управления датчиками в своем приложении машинного обучения.

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

...