0

我正在读取加速度计读数以捕捉摇晃手机的用户。当用户摇动手机时,我想设计它来做一些事情。它工作正常,但我输入了一个 onPause() 方法,因为当用户不在应用程序中时,我不需要加速度计检测任何晃动运动,因为这会产生不希望的结果。所以在 onPause() 中,我从 SensorManager 中取消注册加速度计。

我希望在 onResume() 中我可以重新注册 SensorManager,然后继续我的业务。显然,它并不完全那样工作。我已经阅读了文档,老实说,我无法弄清楚发生了什么。

代码:

我声明全局变量sensorMgr:

private SensorManager sensorMgr;

然后我将它注册到加速度计:

sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);

    // Detect if device has accelerometer
    boolean accelSupported = sensorMgr.registerListener(this,
            SensorManager.SENSOR_ACCELEROMETER,
            SensorManager.SENSOR_DELAY_GAME);

    if (!accelSupported) {
        // No accelerometer on this device
        sensorMgr.unregisterListener(this,
                SensorManager.SENSOR_ACCELEROMETER);
    }
    sensorMgr.registerListener(this, SensorManager.SENSOR_ACCELEROMETER,
            SensorManager.SENSOR_DELAY_GAME);

暂停():

protected void onPause() {
    if (sensorMgr != null) {
        sensorMgr.unregisterListener(this,
                SensorManager.SENSOR_ACCELEROMETER);
        sensorMgr = null;
    }
    super.onPause();
}

onResume():

protected void onResume() {
    sensorMgr.registerListener(this, SensorManager.SENSOR_ACCELEROMETER,
        SensorManager.SENSOR_DELAY_GAME);
    super.onResume();
}

错误:

05-24 14:35:54.058: E/AndroidRuntime(16783): java.lang.RuntimeException: Unable to resume activity : java.lang.NullPointerException

我非常感谢你们可以提供的任何帮助,并提前感谢!

4

1 回答 1

4

sensorMgr到达时为 null onResume(),因为您在onPause()方法中将其强制设置为 null 。在调用之前重新初始化sensorMgr( ) 。getSystemService(...)registerListener()

于 2012-05-24T21:37:37.457 回答