- Почему не работает автоповорот экрана?
- Включена вертикальная ориентация экрана
- Программные ошибки
- Аппаратная неисправность
- Что делать, если не работает автоповорот экрана Android-устройства
- Включение автоповорота
- Отключился автоповорот
- Автоповорот экрана перестал реагировать на установленные настройки
- Сброс настроек для активации акселерометра
- Настройка калибровки сенсора
- Поломка акселерометра
- Фиксирование положения экрана на Андроид-устройствах
- Повороты экрана в Android без боли
- Предисловие
- Когда начались проблемы?
- Возможное решение
- Да начнется магия
- Реализация приложения
Почему не работает автоповорот экрана?
Автоматическая смена ориентации экрана является базовой функцией абсолютно любого смартфона на Android.
С ее помощью пользователь получает возможность отображать контент в наиболее удобной для себя форме (горизонтальной или вертикальной), просто переворачивая гаджет в нужное положение. Однако бывают ситуации, когда телефон отказывается выполнять даже такую простую команду, не позволяя переключиться с одного режима на другой. Почему возникает такая проблема и как с ней можно бороться?
Включена вертикальная ориентация экрана
Если ориентация экрана при повороте устройства не изменяется, нужно проверить, не включена ли фиксация его положения. Сделать это можно через стандартные настройки Android, открыв раздел под названием «Экран», а затем перейдя в «Автоповорот экрана». Обычно здесь расположен ползунок, который необходимо передвинуть вправо, чтобы активировать функцию.
Также отключить фиксацию дисплея можно с помощью кнопки, которая находится в шторке уведомлений Android. Если провести по экрану пальцем сверху вниз, откроется панель быстрого доступа к основным инструментам смартфона. Среди них должна быть кнопка «Автоповорот» с небольшим значком в виде замка. Нажав на нее, можно быстро отключить блокировку ориентации дисплея без помощи настроек.
Программные ошибки
Автоматический поворот экрана осуществляется за счет встроенного акселерометра, который непрерывно отслеживает текущее положение смартфона. Нарушение его нормальной работы может быть спровоцировано сбоями в системе Android, например, из-за внутренних проблем с распознаванием входных сигналов В таком случае должна помочь перезагрузка устройства. Если смартфон обладает съемной батареей, можно извлечь ее из корпуса на пару минут, а затем вставить обратно и включить гаджет.
Некоторые программы, работающие в фоновом режиме, способны негативно влиять на функции акселерометра. Чтобы проверить их причастность к данной проблеме, нужно удалить или отключить недавно установленные приложения через стандартное меню настроек смартфона.
Еще одной причиной неполадок с автоматическим поворотом экрана может быть очередное обновление Android. В таком случае остается ждать следующей версии официальной прошивки, где разработчики исправят баг.
Решить проблему с неработающим автоповоротом дисплея в некоторых ситуациях удается при помощи возврата к заводским параметрам. Пользоваться этим способом стоит только в крайних случаях, не забыв заранее скопировать все важные данные.
Аппаратная неисправность
Если автоматический поворот экрана не работает совсем или срабатывает самопроизвольно, скорее всего, это вызвано поломкой акселерометра. В таком случае устройство следует отнести в надежный сервисный центр, где будет произведена замена неисправных комплектующих.
Чтобы испытывать меньше дискомфорта из-за неработающего акселерометра, можно воспользоваться приложением Rotation Control. С его помощью можно вручную управлять положением дисплея, устанавливая удобную ориентацию для разных приложений.
Если встроенное оборудование, отвечающее за поворот экрана, работает неправильно, можно попробовать самостоятельно откалибровать его. Сделать это можно с помощью специальных приложений (GPS Status & Toolbox) или в инженерном меню Android. Во втором случае потребуется вызвать раздел «Sensor», положить телефон на ровную поверхность и нажать на кнопку «Gyro Selftest». Акселерометр будет автоматически откалиброван и готов к дальнейшей работе с приложениями.
Неработающий автоповорот экрана не всегда проявляется из-за внутренней поломки смартфона. Часто причина кроется в программных ошибках Android, последствия которых зачастую можно решить самостоятельно.
Источник
Что делать, если не работает автоповорот экрана Android-устройства
Автоповорот экрана используется всеми Android-устройствами. Благодаря этой удобной функции значительно упрощается просмотр видео- и фотоматериалов, веб-серфинг, набор текста и многие другие процессы. Данная функция время от времени становится неактивной. В этой статье рассматриваются причины, почему не работает автоповорот экрана на Android, а также способы исправить ситуацию.
Включение автоповорота
Если на телефоне не срабатывает акселерометр (небольшое устройство, которое обеспечивает работу функции автоповорота экрана), не спешите твердить о неисправности. Вполне возможно, что датчик наклона попросту не включен.
Необходимо найти ответ на вопрос, как настроить поворота экрана на Android. Сделать это достаточно просто. Необходимо открыть настройки экрана смартфона, найти пункт «Автоповорот экрана» и поставить галочку. Так включается акселерометр, который позволит поворачивать экран в соответствии с тем или иным предусмотренным разработчиками положением.
На всех устройствах установлены разные параметры поворотов. Например, на многих планшетах можно переворачивать экран практически в любом направлении, и он будет адаптироваться под нужды пользователя.
Решая задачу, как повернуть экран на Android на 90 градусов, можно установить устройство «вверх ногами», и оно гарантированно адаптирует положение экрана. Данная функция предусмотрена далеко не всеми гаджетами. В основном используются только три положения наклона дисплея.
Отключился автоповорот
Одной из распространенных проблем акселерометра является его самовольное отключение: только что все датчики работали, и вдруг пропал переворот экрана. Подобная ситуация зачастую возникает при установке дополнительного софта или при обновлении прошивки.
Когда пользователь доверяет программе, которую устанавливает – автоматически дает добро на внесение корректировок в работу гаджета. К примеру, стандартные настройки нового видеоредактора, который инсталлируется на смартфон, предполагает отключение акселерометра для экономии энергии. Решение такой проблемы осуществляется стандартными методами. Необходимо вновь включить датчик в настройках.
Автоповорот экрана перестал реагировать на установленные настройки
Когда в настройках все правильно, а экран не меняет свое положение, не стоит паниковать. Бывают ситуации, когда акселерометры просто немного подвисают.
Решая, что делать, если не поворачивается экран на планшете Android, попробуйте полностью выключить устройство и извлечь на несколько минут батарею. Потом следует вставить батарею обратно и включить устройство в обычном режиме.
Как только все настройки активируются, и система полностью загрузится, проверьте результат. Если не помогло, приступайте к более радикальным способам восстановления былой работоспособности.
Сброс настроек для активации акселерометра
Критические ошибки в системе могут привести к тому, что настройки датчика переворота не будут реагировать на манипуляции со стороны пользователя. В таких случаях следует применять сброс настроек к заводским.
Если у вас перестал работать автоповорот экрана, сброс – единственное, что можно самостоятельно попробовать перед походом в сервисный центр.
Вернув первоначальные установки, вы также исправите и многие другие проблемы, с которыми столкнулся ваш гаджет в процессе эксплуатации.
Предварительно необходимо скопировать с гаджета все важные данные, потому что сброс настроек подразумевает не только возврат к заводским установкам, но и удаление всех файлов пользователя.
Настройка калибровки сенсора
Довольно часто пользователи сталкиваются с ситуацией, когда плохо работает автоповорот экрана. То есть акселерометр реагирует на действия пользователя, но не выполняет или делает это не полностью адекватно. Причиной данной проблемы является сбитая калибровка сенсоров.
Для восстановления рабочих показателей понадобится вновь откалибровать акселерометр.
Поломка акселерометра
Датчик поворота экрана – сложный функциональный элемент, который в случае поломки требует замены. Если вы использовали все возможные программные методы для восстановления рабочих параметров акселерометра, а у вас по-прежнему не переворачивается экран на Android, будьте готовы потратиться на ремонт. Благо стоимость акселерометра в большинстве случаев незначительна.
Если поломка акселерометра для вас считается незначительной, но изредка вам все-таки необходимо использовать функции поворота, обратите внимание на дополнительный софт, который позволит в ручном режиме настраивать экран своего девайса. К наиболее популярным программам такого класса относятся Rotation – Orientation Manager, Rotation Manager – Control и Orientation Manager.
Фиксирование положения экрана на Андроид-устройствах
Если акселерометр у вас работает исправно, но необходимо зафиксировать ориентацию дисплея, например, вы смотрите на фотографии в транспорте и вас не устраивает постоянно меняющееся от встряски положение экрана, попробуйте дополнительный софт.
Отличным примером функциональных программ, которые позволяют запретить поворот экрана и зафиксировать его в том или ином положении, является Rotation control. С данной утилитой устанавливается удобный виджет, который можно выносить на главный экран для удобного управления расположением дисплея.
Источник
Повороты экрана в Android без боли
Важно!
Изначально в статье была реализация с ошибкой. Ошибку исправил, статью немного поправил.
Предисловие
Истинное понимание проблем каждой платформы приходит после того, как попробуешь писать под другую платформу / на другом языке. И вот как раз после того, как я познакомился с разработкой под iOS, я задумался над тем, насколько ужасна реализация поворотов экрана в Android. С того момента я думал над решением данной проблемы. Попутно я начал использовать реактивное программирование везде, где только можно и уже даже не представляю как писать приложения по-другому.
И вот я узнал про последнюю недостающую деталь — Data Binding. Как-то эта библиотека прошла мимо меня в свое время, да и все статьи, что я читал (что на русском, что на английском) рассказывали не совсем про то, что мне было необходимо. И вот сейчас я хочу рассказать про реализацию приложения, когда можно будет забыть про повороты экранов вообще, все данные будут сохраняться без нашего прямого вмешательства для каждого активити.
Когда начались проблемы?
По настоящему остро я почувствовал проблему, когда в одном проекте у меня получился экран на 1500 строк xml, по дизайну и ТЗ там было целая куча различных полей, которые становились видимыми при разных условиях. Получилось 15 различных layout’ов, каждый из которых мог быть видимым или нет. Плюс к этому была еще куча различных объектов, значения которых влияют на вьюху. Можете представить уровень проблем в момент поворота экрана.
Возможное решение
Сразу оговорюсь, я против фанатичного следования заветам какого-либо подхода, я пытаюсь делать универсальные и надежные решения, несмотря на то, как это смотрится с точки зрения какого-либо паттерна.
Я назову это реактивным MVVM. Абсолютно любой экран можно представить в виде объекта: TextView — параметр String, видимость объекта или ProgressBar’а — параметр Boolean и т.д… А так же абсолютно любое действие можно представить в виде Observable: нажатие кнопки, ввод текста в EditText и т.п…
Вот тут я советую остановиться и прочитать несколько статей про Data Binding, если еще не знакомы с этой библиотекой, благо, на хабре их полно.
Да начнется магия
Перед тем как начать создавать нашу активити, создадим базовые классы для активити и ViewModel’ли, где и будет происходить вся магия.
Update!
После общения в комментариях, осознал свою ошибку. Суть в том, что в моей первой реализации ничего не сериализуется, но все работает при поворотах экрана, да даже при сворачивании, разворачивании экрана. В комментариях ниже обязательно почитайте почему так происходит. Ну а я исправлю код и поправлю комментарии к нему.
Для начала, напишем базовую ViewModel:
Я уже говорил, что все что угодно можно представить как Observable? И библиотека RxBinding отлично это делает, но вот беда, мы работает не напрямую с объектами, типа EditText, а с параметрами типа ObservableField. Что бы радоваться жизни и дальше, нам необходимо написать функцию, которая будет делать из ObservableField необходимый нам Observable RxJava2:
Тут все просто, передаем на вход ObservableField и получаем Observable RxJava2. Именно для этого мы наследуем базовый класс от BaseObservable. Добавим этот метод в наш базовый класс.
Теперь напишем базовый класс для активити:
Я постарался подробно прокомментировать код, но заострю внимание на нескольких вещах.
Активити, при повороте экрана всегда уничтожается. Тогда, при восстановлении снова вызывается метод onCreate. Вот как раз в методе onCreate нам и нужно восстанавливать данные, предварительно проверив, сохраняли ли мы какие-либо данные. Сохранение данных происходит в методе onSaveInstanceState.
При повороте экрана нас интересует порядок вызовов методов, а он такой (то, что интересует нас):
1) onDestroy
2) onSaveInstanceState
Что бы не сохранять уже не нужные данные мы добавили проверку:
Дело в том, что метод isFinishing вернет true только если мы явно вызвали метод finish() в активити, либо же ОС сама уничтожила активити из-за нехватки памяти. В этих случаях нам нет необходимости сохранять данные.
Реализация приложения
Представим условную задачу: нам необходимо сделать экран, где будет 1 EditText, 1 TextView и 1 кнопка. Кнопка не должна быть кликабельной до тех пор, пока пользователь не введет в EditText цифру 7. Сама же кнопка будет считать количество нажатий на нее, отображая их через TextView.
Update!
Пишем нашу ViewModel:
Update
Вот тут и и были самые большие проблемы. Все работало и при старой реализации, ровно до того момента, пока в настройках разработчика не включить параметр «Don’t keep activities».
Что бы все работало как надо, необходимо реализовывать интерфейс Parcelable для ViewModel. По поводу реализации ничего писать не буду, только уточню еще 1 момент:
Данные-то мы возвращаем, а вот Observable мы теряем. Поэтому пришлось выводить в отдельный метод и вызывать его во всех конструкторах. Это очень быстрое решение проблемы, не было времени подумать лучше, нужно было было указать на ошибку. Если у кого-то есть идеи как реализовать это лучше, пожалуйста, поделитесь.
Теперь напишем для этой модели view:
Ну и теперь, мы пишем нашу активити:
Запускаем приложение. Кнопка не кликабельна, счетчик показывает 0. Вводим цифру 7, вертим телефон как хотим, через 2 секунды, в любом случае кнопка становится активной, тыкаем на кнопку и счетчик растет. Стираем цифру, вертим телефоном снова — кнопка все равно через 2 секунды будет не кликабельна, а счетчик не сбросится.
Все, мы получили реализацию безболезненного поворота экрана без потери данных. При этом будут сохранены не только ObservableField и тому подобные, но так же и объекты, массивы и простые параметры, типа int.
Источник