Вам необходимо будет зарегистрироваться в системе 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 говорит:
Всегда убедитесь, чтобы отключить датчики не нужно, особенно когда ваша деятельность приостановлена. В противном случае можно разрядить батарею в всего несколько часов. Обратите внимание, что система автоматически отключит датчики , когда экран выключится.
Надеюсь, что вам поможет. Если нет, просмотрите немного, потому что есть многочисленные примеры, иллюстрирующие, как настроить прослушиватель для событий датчиков.
Поскольку вы не размещали ни одного кода: вы [зарегистрировались] (http://developer.android.com/reference/android/hardware/SensorManager.html) свою 'MainGamePanel' с помощью службы SensorManager? –
Нет, как бы я это сделал? Я только что добавил mSensorManager = (SensorManager) getSystemService (SENSOR_SERVICE); mAccelerometer = mSensorManager.getDefaultSensor (Sensor.TYPE_ACCELEROMETER); , но это не кажется правильным. –