2015-08-13 89 views
2

多個傳感器我註冊了3個傳感器到我的傳感器管理器:如何註銷的Android

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); 
} 

回答

4

當你註冊,你declarare的聽衆SensorListener(在這種情況下,我想是你的活動,implements SensorEventListener):因爲你不

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

所以只能使用一次unregisterListener t取消註冊個別傳感器,您註銷SensorListener,如方法簽名中所示:

public void unregisterListener(SensorListener listener)

UPDATE:
如果你需要斷開單個傳感器只使用重載的版本unregisterListener

公共無效unregisterListener的(SensorEventListener監聽器,傳感器傳感器)