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);

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

私はあなたたちが与えることができるどんな助けにも本当に感謝します、そして前もって感謝します!

4

1 に答える 1

4

sensorMgronResume()メソッドで強制的にnullに設定したため、に到達するとnullになりますonPause()。を呼び出す前にsensorMgr( )を再初期化します。getSystemService(...)registerListener()

于 2012-05-24T21:37:37.457 に答える