Как вести сенсорный мониторинг при изменении ориентации экрана?

1

В своей деятельности я контролирую датчик, используя метод onSensorChanged.

Я запускаю мониторинг датчика при нажатии кнопки в этой активности (в методе "onClick").

Я регистрирую и отменю регистрацию прослушивания в методах onPause и onResume.

Вот код:

public void onCreate(Bundle savedInstanceState) {
  //Here i set "mySensor"
}

public void onClick(View view){
  sensorManager.registerListener(this, mySensor, SensorManager.SENSOR_DELAY_FASTEST);
}

protected void onPause() {
  sensorManager.unregisterListener(this, mySensor);
}

protected void onResume() {
  sensorManager.registerListener(this, mySensor, SensorManager.SENSOR_DELAY_FASTEST);
}

public final void onSensorChanged(SensorEvent event) {
  //do things
}

Проблема в том, что при изменении ориентации экрана мониторинг останавливается, вещи, которые я делаю внутри "onSensorChanged", останавливаются до тех пор, пока я снова не нажму кнопку.

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

Как я могу сохранить мониторинг? Я думаю, что это нужно сделать с помощью Bundle, но я не уверен.

Thanx.

Теги:
android-sensors

2 ответа

1
Лучший ответ

У вас есть несколько вариантов:

  1. Вы можете переместить слушателя вашего датчика в класс приложения, определенный android:name в <application> в манифесте. См. Здесь, назвав класс, который вы получили из android.app.Application. Я бы рекомендовал этот подход.

  2. Вы можете добавить android:configChanges="orientation" в свой манифест активности, но, как описано здесь, вам нужно будет обработать перезагрузку соответствующих ресурсов, таких как ориентационный макет, в onConfigurationChanged() вашей активности. Я бы не рекомендовал это, так как у вас все еще будет проблема с исчезновением мониторинга при возникновении других изменений конфигурации, или вам нужно будет определить, как ваше приложение должно их обрабатывать (и добавить их в список изменений в android:configChanges),

  3. Отключенная ориентация полностью меняется для вашего приложения с помощью android:screenOrientation как описано здесь, но я бы действительно не рекомендовал этого, если нет других причин, по которым вы хотите, чтобы ваше приложение работало только в определенной ориентации.

  • 0
    Спасибо за ответ. я думаю это то что мне нужно :)
0

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

В качестве альтернативы, если вы хотите обеспечить поддержку более чем одной ориентации (по умолчанию), вы можете переместить часть считывания сенсора либо в статический синглтон (который вы должны вызывать из того, что вы хотели), в подкласс класса Application, или отдельный класс, на который ссылается подкласс класса Application), который вы могли бы вызвать с помощью getApplication() - прочитайте это для получения дополнительной информации о классе Application). Все три альтернативы - довольно приличный выбор для поддержания глобального состояния в рамках всей деятельности в целом.

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

  • 0
    Спасибо за информацию, я посмотрю на класс приложения

Ещё вопросы

Сообщество Overcoder
Наверх
Меню