Несколько реализаций Android - срабатывает только половина событий - PullRequest
1 голос
/ 15 января 2012

Я использовал:

public class MainGamePanel extends SurfaceView 
    implements SurfaceHolder.Callback, SensorEventListener

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

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

1 Ответ

1 голос
/ 15 января 2012

Вам нужно будет зарегистрироваться в 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 говорит:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...