Android取消注册SensorManager不';改变屏幕方向后无法工作
我正在用SensorManager编写应用程序,在更改屏幕方向后注销SensorManager有问题,我的意思是它不工作 我是这样创建的:Android取消注册SensorManager不';改变屏幕方向后无法工作,android,sensormanager,Android,Sensormanager,我正在用SensorManager编写应用程序,在更改屏幕方向后注销SensorManager有问题,我的意思是它不工作 我是这样创建的: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (null == mSensorManager) { m
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;
当屏幕方向没有改变,sensorManager成功注销,onSensorChanged方法不再执行时,它工作正常。但如果我更改方向,而不是取消注册sensorManager,onSensorChanged仍处于活动状态。您知道如何解决此问题吗?您应该改为在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;
}
}
请参见您应该在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;
}
}
请参见在OnResume()中注册传感器之前,我已尝试过,但结果相同。我不想在onPause()中注销它,因为我希望此传感器在后台或手机被阻止时也能工作。如果您希望传感器在后台或应用程序未激活时工作,则需要创建一个服务:在OnResume()中注册传感器之前,我已尝试过,但结果相同。我不想在onPause()中注销它,因为我希望此传感器在后台或手机被阻止时也能工作。如果您希望传感器在后台或应用程序未激活时工作,则需要创建一个服务: