如何注销多个传感器 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)
我向我的传感器管理器注册了 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)