如何注销多个传感器 android

how to unregister multiple sensors android

我向我的传感器管理器注册了 3 个传感器:

if(sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) !=null ){
        accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        sensorManager.registerListener(this,accelerometer,SensorManager.SENSOR_DELAY_NORMAL);
    }

    if(sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) !=null ){
        gyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
        sensorManager.registerListener(this,gyroscope,SensorManager.SENSOR_DELAY_NORMAL);
    }

    if(sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) !=null ){
        magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
        sensorManager.registerListener(this,magnetometer,SensorManager.SENSOR_DELAY_NORMAL);
    }

和我的 onResume 方法:

@Override
protected void onResume() {
    super.onResume();
    sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
    sensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_NORMAL);
    sensorManager.registerListener(this, gyroscope, SensorManager.SENSOR_DELAY_NORMAL);

}

所以当我注销传感器管理器时,我应该注销 3 次,还是只注销一次?目前我使用这个:

 @Override
protected void onPause() {
    super.onPause();
    sensorManager.unregisterListener(this);
}

当你注册监听器时,你声明了一个 SensorListener(在这种情况下,我猜你的 activity 就是 implements SensorEventListener):

sensorManager.registerListener(this,accelerometer,SensorManager.SENSOR_DELAY_NORMAL);
//                             ↑  here

所以只使用一次 unregisterListener 因为你没有取消注册单个传感器,你取消注册 SensorListener 正如你在方法签名中看到的那样:

public void unregisterListener (SensorListener listener)

更新:
如果您需要断开单个传感器,只需使用 unregisterListener

的重载版本

public void unregisterListener (SensorEventListener listener, Sensor sensor)