我正在读取加速度计读数以捕捉摇晃手机的用户。当用户摇动手机时,我想设计它来做一些事情。它工作正常,但我输入了一个 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
我非常感谢你们可以提供的任何帮助,并提前感谢!