Я беру показания акселерометра, чтобы поймать пользователей, встряхивающих телефон. Когда пользователь встряхивает телефон, я хочу создать его, чтобы что-то сделать. Он отлично работает, но я включил метод onPause(), потому что мне не нужен акселерометр, который обнаруживает любые дрожащие движения, когда пользователь не находится в приложении, поскольку это может иметь нежелательные результаты. Поэтому в onPause() я отменяю регистратор акселерометра от SensorManager.My onResume() выбрасывает исключение NullPointerException
Это была моя надежда, что в 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);
OnPause():
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
Я очень признателен за любую помощь вы, ребята, можете дать, и спасибо заранее!
Пожалуйста, добавьте несколько отладочных результатов. Является ли sensorMgr null? Что-то есть. –
На самом деле да, это говорит мне, что sensorMgr имеет значение null. Должен ли я повторно инициализировать его, хотя это глобальная переменная? – FeralShadow
Где вы называете 'sensorMgr = (SensorManager) getSystemService (SENSOR_SERVICE);'? – DeeV