В своей деятельности я контролирую датчик, используя метод 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:name
в <application>
в манифесте. См. Здесь, назвав класс, который вы получили из android.app.Application. Я бы рекомендовал этот подход.
Вы можете добавить android:configChanges="orientation"
в свой манифест активности, но, как описано здесь, вам нужно будет обработать перезагрузку соответствующих ресурсов, таких как ориентационный макет, в onConfigurationChanged()
вашей активности. Я бы не рекомендовал это, так как у вас все еще будет проблема с исчезновением мониторинга при возникновении других изменений конфигурации, или вам нужно будет определить, как ваше приложение должно их обрабатывать (и добавить их в список изменений в android:configChanges
),
Отключенная ориентация полностью меняется для вашего приложения с помощью android:screenOrientation
как описано здесь, но я бы действительно не рекомендовал этого, если нет других причин, по которым вы хотите, чтобы ваше приложение работало только в определенной ориентации.
На самом деле, действия на Android действительно разрушаются и воссоздаются при изменении ориентации устройства. Если вы не заботитесь обо всех ориентациях, вы можете "ограничить" свою деятельность единой ориентацией.
В качестве альтернативы, если вы хотите обеспечить поддержку более чем одной ориентации (по умолчанию), вы можете переместить часть считывания сенсора либо в статический синглтон (который вы должны вызывать из того, что вы хотели), в подкласс класса Application, или отдельный класс, на который ссылается подкласс класса Application), который вы могли бы вызвать с помощью getApplication()
- прочитайте это для получения дополнительной информации о классе Application). Все три альтернативы - довольно приличный выбор для поддержания глобального состояния в рамках всей деятельности в целом.
Несколько более надежный способ сделать это, если вы хотите продолжать считывать данные датчиков, даже когда приложение находится в фоновом режиме или после того, как ваше приложение завершено, заключается в использовании Сервиса и передаче данных взад и вперед с вашими действиями, когда приложение Бег.