Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android取消注册SensorManager不';改变屏幕方向后无法工作_Android_Sensormanager - Fatal编程技术网

Android取消注册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

我正在用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;

当屏幕方向没有改变,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()中注销它,因为我希望此传感器在后台或手机被阻止时也能工作。如果您希望传感器在后台或应用程序未激活时工作,则需要创建一个服务: