2012-01-14 3 views
1

Я использовал:Android Несколько Реализации - только половина событий Срабатывает

public class MainGamePanel extends SurfaceView 
    implements SurfaceHolder.Callback, SensorEventListener 

реализовать сенсорные события и акселерометр события. Используя @Override, я преодолел события касания, и они работают правильно. Я ничего не получаю от событий акселерометра, хотя, например, onSensorChanged()

Есть ли очевидная причина?

+0

Поскольку вы не размещали ни одного кода: вы [зарегистрировались] (http://developer.android.com/reference/android/hardware/SensorManager.html) свою 'MainGamePanel' с помощью службы SensorManager? –

+0

Нет, как бы я это сделал? Я только что добавил mSensorManager = (SensorManager) getSystemService (SENSOR_SERVICE); mAccelerometer = mSensorManager.getDefaultSensor (Sensor.TYPE_ACCELEROMETER); , но это не кажется правильным. –

ответ

1

Вам необходимо будет зарегистрироваться в системе SensorManager, чтобы получать обновления от любых датчиков. Очень простой пример того, как это сделать, приведен в документации SensorManager.

Шагов:

1) Получить ссылку на SensorManager системы, а также датчик (ы) вы хотели бы слушать обновления. В вашем случае это будет, по крайней мере, акселерометр. Вам нужно запросить SensorManager из контекста. Так как ваш MainGamePanel расширяет SurfaceView, используйте getContext().

SensorManager mSensorManager = (SensorManager) getContext().getSystemService(Activity.SENSOR_SERVICE); 
Sensor mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 

2) После того, как вы приобрели эти, вам необходимо зарегистрировать свой класс для прослушивания фактических обновлений - это где SensorEventListener входит в картину. Ваш SurfaceView реализует его, так что вы должны быть в состоянии зарегистрировать его следующим образом:

mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME); 

3) То есть на самом деле все, что вам нужно сделать для того, чтобы начать получать обновления от аппаратных датчиков. Отсюда следует, что события должны начать использовать ваш переопределенный метод onSensorChanged(). Однако вам следует помнить о том, что обычная практика заключается в том, чтобы освобождать системные ресурсы, как только вы больше не будете их активно использовать/нуждаться в них. Следовательно, не забудьте отменить регистрацию обновлений датчиков. Соответствующим местом для этого будет вызов onPause() или onStop().

mSensorManager.unregisterListener(this); 

Google говорит:

Всегда убедитесь, чтобы отключить датчики не нужно, особенно когда ваша деятельность приостановлена. В противном случае можно разрядить батарею в всего несколько часов. Обратите внимание, что система автоматически отключит датчики , когда экран выключится.

Надеюсь, что вам поможет. Если нет, просмотрите немного, потому что есть многочисленные примеры, иллюстрирующие, как настроить прослушиватель для событий датчиков.

+0

Это было очень полезно. Спасибо. –

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