更改屏幕方向后,Android取消注册SensorManager不起作用

时间:2015-08-10 20:33:02

标签: android sensormanager

我正在使用SensorManager编写应用程序,我在更改屏幕方向后取消注册SensorManager时出现问题,我的意思是它无法正常工作。

我以这种方式创建它:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (null == mSensorManager) {
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mAccelerometr = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        mSensorManager.registerListener(this, mAccelerometr, SensorManager.SENSOR_DELAY_NORMAL);
    }
    buttonStart = (Button) findViewById(R.id.buttonStart);
    buttonStop = (Button) findViewById(R.id.buttonStop);
}

以及我如何取消注册:

mSensorManager.unregisterListener(this, mAccelerometr);
mSensorManager = null;

当屏幕方向没有改变时,它工作正常,传感器管理器成功取消注册,并且不再执行onSensorChanged方法。但是如果我改变方向而不是取消注册sensorManager,则onSensorChanged仍处于活动状态。知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您应该在onResume和onPause中注册和取消注册:

@Override
protected void onResume() {
    super.onResume();
    if (null == mSensorManager) {
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mAccelerometr = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        mSensorManager.registerListener(this, mAccelerometr, SensorManager.SENSOR_DELAY_NORMAL);
    }
}

@Override
protected void onPause() {
    super.onPause();
    if (null != mSensorManager) {
       mSensorManager.unregisterListener(this, mAccelerometr);
       mSensorManager = null;
    }
}

请参阅http://developer.android.com/training/basics/activity-lifecycle/pausing.html