2012-05-24 3 views
0

Я беру показания акселерометра, чтобы поймать пользователей, встряхивающих телефон. Когда пользователь встряхивает телефон, я хочу создать его, чтобы что-то сделать. Он отлично работает, но я включил метод 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 

Я очень признателен за любую помощь вы, ребята, можете дать, и спасибо заранее!

+0

Пожалуйста, добавьте несколько отладочных результатов. Является ли sensorMgr null? Что-то есть. –

+0

На самом деле да, это говорит мне, что sensorMgr имеет значение null. Должен ли я повторно инициализировать его, хотя это глобальная переменная? – FeralShadow

+0

Где вы называете 'sensorMgr = (SensorManager) getSystemService (SENSOR_SERVICE);'? – DeeV

ответ

4

sensorMgr является null, когда вы достигаете onResume(), так как вы принудительно установили его в null в вашем методе onPause(). Reinitialize sensorMgr (getSystemService(...)) перед тем, как позвонить registerListener().

+0

Да, прекрасное спасибо. Я не знаю, почему я не признал это в первую очередь. Возможно, я слишком долго смотрю на код? ха-ха. – FeralShadow

Смежные вопросы