Как вести сенсорный мониторинг при изменении ориентации экрана? - PullRequest
1 голос
/ 22 января 2012

В своей деятельности я слежу за датчиком методом 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.

Ответы [ 2 ]

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

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

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

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

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

0 голосов
/ 22 января 2012

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

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

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

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