- Калибровка экрана на Андроид: как самостоятельно настроить сенсор
- Что обозначает «калибровка экрана» на смарфоне или планшете Android
- Калибровка экрана Андроид — пошаговые действия
- Через настройки устройства
- Калибровка тачскрина Android через инженерное меню
- Через приложение Touchscreen Calibration
- Через приложение Quick TuneUp
- Видео: как увеличить или уменьшить чувствительность сенсора
- Как настроить акселерометр или G-сенсор
- Через специальное приложение — GPS Status & Toolbox
- Через Engineering Menu
- Видео: настройка G-сенсора на Андроид
- Что делать, если сенсор срабатывает самопроизвольно
- Повороты экрана в Android без боли
- Предисловие
- Когда начались проблемы?
- Возможное решение
- Да начнется магия
- Реализация приложения
Калибровка экрана на Андроид: как самостоятельно настроить сенсор
Как любое устройство, телефон рано или поздно начинает ломаться и глючить. Существует большое количество проблем, которые могут возникнуть на Android. Одна из них — неадекватное реагирование экрана на нажатия.
Если сенсор вашего Андроид-устройства некорректно выполняет порученные ей задания, то, скорее всего, на телефоне сбились настройки калибровки экрана.
Что обозначает «калибровка экрана» на смарфоне или планшете Android
Калибровка экрана — это настройки сенсорного экрана устройства. То есть, если вы провели по дисплею пальцем или стилусом, то он должен с большой точностью отобразить ваши движения. В том случае, когда ваши действия и то, что в итоге произошло на экране, отличаются, следует откалибровать устройство заново. Проблемы, связанные с калибровкой, могут возникнуть при замене экрана, изменение настроек устройства или из-за программных и физических повреждений устройства.
Калибровка экрана Андроид — пошаговые действия
Существует несколько путей для калибровки Android-устройств. Одни ведут через программы, которые изначально заложены в телефон, другие — потребует закачку специальных приложений из Play Market. Начнем с тех, которые требует как можно меньше действий.
Через настройки устройства
Поскольку проблемы с калибровкой возникает у пользователей довольно часто, разработчики добавили возможность откалибровать устройство через настройки устройства:
- Открываем настройки телефона.
Заходим в настройки телефона
Заходим в раздел «Экран»
Проходим процесс калибровки
Калибровка тачскрина Android через инженерное меню
На Android-устройствах существует специальное меню, благодаря которому можно совершить много вещей, недоступных в обычном режиме.
- Для начала нужно войти в меню. Для этого наберите один из специальных кодов в месте, где обычно вводите номера телефонов — *#*#3646633#*#*, *#*#4636#*#* или *#15963#*.
Вводим код и добавляем *
Переходим в раздел Hardware Testing
Переходим в раздел Sensor
Переходим в раздел Sensor Celibration
Нажимаем кнопку Clear Calibration
Нажимаем кнопку Do calibration (20% tolerance)
Нажимаем на кнопку «Назад» несколько раз
Через приложение Touchscreen Calibration
В Play Market можно найти много приложений, отвечающих за калибровку экрана, одно из них — Touchscreen Calibration.
- В Play Market находим и устанавливаем приложение.
Нажимаем кнопку Calibrate
Выполняем несложные задачи
Уведомление о том, что калибровка закончена
Через приложение Quick TuneUp
Это приложение выполняет те же задачи, что и предыдущие, но другим способом.
- Устанавливаем приложение из Play Market.
Нажимаем кнопку Display Calibration
Ждем окончания процесса калибровки и перезагружаем телефон
Видео: как увеличить или уменьшить чувствительность сенсора
Как настроить акселерометр или G-сенсор
Также на всех современных устройствах присутствует акселерометр, который определяет положение телефона относительно ровной горизонтальной и вертикальной поверхности. Это функция используется во многих играх, чаще всего гонках, когда вы управляете машиной, поворачивая телефон, и в некоторых других приложениях.
Через специальное приложение — GPS Status & Toolbox
Откалибровать G-сенсор можно при помощи бесплатного приложения из Play Market:
- Устанавливаем приложение GPS Status & Toolbox из Play Market.
Нажимаем на кнопку «Инструменты»
Выбираем раздел «Калибровка акселерометра»
Нажимаем на кнопку «Откалибровать»
Уведомление о удачной калибровке акселерометра
Через Engineering Menu
Есть второй способ откалибровать G-sensor — через Engineering Menu:
- Наберите один из специальных кодов в месте, где обычно вводите номера телефонов — *#*#3646633#*#*, *#*#4636#*#* или *#15963#*.
Вводим специальный код и добавляем *
Переходим в раздел Hardware Testing
Переходим в раздел Sensor
Переходим в раздел Sensor Celibration
Нажимаем кнопку Gsensor Celibration
Нажимаем несколько раз кнопку «Назад», чтобы выйти из инженерного меню
Видео: настройка G-сенсора на Андроид
Что делать, если сенсор срабатывает самопроизвольно
Иногда случается, что экран в некоторых точках начинает нажиматься сам по себе. Такое может случиться, если было повреждено сенсорное стекло, из-за чего в определенных местах оно слишком сильно прилегает к дисплею. В этом случае нужно нести устройство в сервис и просить заменить стекло новым. Сенсорные стекла делятся на два типа:
- Резистивные — это сенсоры, которые реагируют на изменение давления, то есть срабатывают при нажатии. На таком стекло можно работать с помощью ногтя, стилуса и других предметов.
- Емкостные — это сенсоры, которые реагируют только на прикосновение пальцами.
Если экран перестал точно отображать то, что вы хотите сделать, значит, настало время провести повторную калибровку дисплея. Если телефон неправильно реагирует на изменение его расположения в пространстве, то стоит откалибровать G-sensor. И только если все предыдущие настройки не помогли, то стоит задуматься о смене сенсорного стекла, которое могло сломаться или поцарапаться.
Источник
Повороты экрана в 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.
Источник