应该如何sensorManager.registerListener()在被称为的onResume()?

问题描述 投票:0回答:1

我有一个应用程序,样品加速度计数据并对其进行处理测试。

安装了该应用首次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使用()

android accelerometer sensormanager
1个回答
0
投票

这种行为实在奇怪。下面是我用在我的机器学习应用程序来管理传感器的方法。

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找到

© www.soinside.com 2019 - 2024. All rights reserved.