簡體   English   中英

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 (在這種情況下,我想這是您implements SensorEventListener的活動):

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

因此,僅使用一次unregisterListener因為您沒有注銷單個傳感器,而是注銷了SensorListener如方法簽名所示:

公共無效的unregisterListener(SensorListener偵聽器)

更新:
如果需要斷開單個傳感器的連接,只需使用unregisterListener的重載版本

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM