Как откалибровать компас на андроиде. Создание Android компаса с помощью датчика ориентации устройства

Встроенный GPS — это одна из стандартных функций современных смартфонов, благодаря которой мобильные юзеры могут пользоваться различными навигационными приложениями вроде Google Maps и получать точные координаты, к примеру, собственного местоположения, локализировать тот или иной объект на карте, прокладывать маршруты передвижения и т.д.

Однако, разные Android-девайсы оснащаются разнотипными датчиками GPS, которые в свою очередь отличаются по своим техническим параметрам.

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

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

В этой статье мы собрали некоторые полезные рекомендации, как повысить качество GPS в Android-смартфонах и планшетах . Итак

Для начала следует убедиться, что в вашем Android-девайсе функция GPS активирована. Для этого заходим в «Настройки » аппарата (мы пользуемся вот таким Lenovo P770), открываем раздел «Мое местоположение » (Location Access) и там включаем (проставляем галочки) опции «Доступ к данным о моем местоположении » (Access to my location) и «По спутникам GPS » (GPS Satellites).

Калибровка GPS
Часто причиной снижения качества GPS-сигнала может быть плохо откалиброванный компас в смартфоне, вследствие чего устройство неправильно рассчитывает координаты, постоянно выдавая неверные данные. Настроить компас в ОС Android можно с помощью специальной утилиты, коих в Сети множество. GPS Essentials , например. После установки этого приложения нужно просто его запустить и нажать кнопку Calibrate . Далее программка самостоятельно оптимизирует настройки GPS в вашем смартфоне.

Если после завершение калибровки качество GPS останется неудовлетворительным, то тогда можно с помощью функции диагностики попробовать выяснить причину неисправности и разобраться, связана ли она с недостатками установленного программного обеспечения, или проблема кроется в аппаратной базе. GPS Essentials запускает дополнительный тест, по результатам которого программа выдаст список возможных причин плохой работы GPS, в процессе также определяется, в том числе и количество спутников, с которых смартфон получает качественный сигнал.

В случае, если повысить качество GPS (или выяснить причину некачественной его работы) с помощью утилиты GPS Essentials не удалось (а бывает и такое), то в качестве крайней меры можно перезагрузить GPS-модуль вашего Android-смартфона. Дело в том, что иногда аппарат «зацикливается» на спутниках, которые находятся вне зоны досягаемости, и перестает принимать сигнал от доступных спутников. Полная перезагрузка GPS-модуля обнуляют все текущие настройки, и возобновляет изначальные. В нашем Lenovo P770 GPS-модуль мы перезагружали с помощью утилиты GPS Status & Toolbox , которую тоже скачивали с Google Play.

После установки и запуска приложения необходимо зайти в меню менеджера состояния A-GPS (Manager A-GPS State ) и просто нажать кнопку Reset Data . Программа сбросит все имеющиеся настройки GPS-модуля и восстановит заводские. Этот способ оптимизации можно использовать и так сказать в профилактических целях, когда качество GPS в смартфоне вновь будет ухудшаться.

Перепрошивка устройства
Еще один радикальный способ повысить качество GPS с Android-смартфоне или планшете предусматривает перепрошивку аппарата. Однако эффективно воспользоваться им могут только продвинутые пользователи. Неопытные же юзеры, наоборот, могут не только не исправить ситуацию с GPS, но, вероятнее всего, выведут устройство из строя. Тем не менее, при грамотном подходе к делу перепрошивка позволяет устранить недостатки в работе GPS и существенным образом повысить точность и качество GPS сигнала, а также ускорить поиск спутников. Разумеется, о резервном копировании данных не забываем.

В прошлых уроках мы уже осваивали работу с некоторыми датчиками, которыми оборудованы современные Android устройства. Мы недавно уже сделали фонарик и можем отыскать дорожку в темном переулке, осталось только найти себе путь, куда идти, и сегодня мы над этим поработаем, создав программу Компас, работающую с датчиком ориентации. Наш будущий компас будет (как и полагается) указывать на север и при смене положения устройства в элементе TextView в интерфейсе программы будет в градусах показываться отклонение положения устройства от севера. Примечательно, что программа легко работает и на довольно старых устройствах 2010-х годов, о чем их владельцы могут и не догадываться (как я например). Помню, как владелец iPhone 4 хвастался наличием компаса на своем яблоке, а я со своим Galaxy Gio был в печали, думая, что мой аппарат такими возможностями не обладает. Но оказалось то, что обладает, всего то не было еще соответствующего распространенного ПО! И созданный здесь компас отлично работает и на нем в том числе.

Создаем новый проект, выбираем Blank Activity, минимальная версия Android 2.2. Приложение будет состоять из одного xml файла и одного java класса.

Настроим внешний вид нашего будущего компаса в файле activity_main.xml . Добавим сюда 2 элемента: TextView для отображения градуса отклонения от севера, а также ImageView , который будет отображать изображение компаса:

< LinearLayout xmlns: android= "schemas.android.com/apk/res/android" android: layout_width= "match_parent" android: layout_height= "match_parent" android: orientation= "vertical" android: background= "#FFFFFF" > < TextView android: id= "@+id/Header" android: layout_width= "wrap_content" android: layout_height= "wrap_content" android: layout_centerHorizontal= "true" android: layout_marginBottom= "40dp" android: layout_marginTop= "20dp" android: text= "Отклонение от севера: 0.0" android: layout_gravity= "center" / > < ImageView android: id= "@+id/CompassView" android: layout_width= "wrap_content" android: layout_height= "wrap_content" android: layout_below= "@+id/tvHeading" android: layout_centerHorizontal= "true" android: src= "@drawable/compass_rus" android: layout_gravity= "center" / > < / LinearLayout >

Картинка, которую я использовал для компаса:

Вы при желании можете использовать любое другое изображение и поместить его в папку res/drawable .

Теперь немного теории. Как было упомянуто в начале урока, работа компаса в этом приложении основана на использовании датчика ориентации Android устройства. Доступ к использованию функционала датчика происходит через использование объекта SensorManager . Через SensorManager программисты получают доступ ко всем установленным на устройство датчикам: гироскоп, акселерометр, датчик освещения, барометр, датчик магнитных полей и другие, которых в современных аппаратах просто уйма, ведь сейчас смартфоны научились уже даже измерять пульс владельца. Доступ к необходимому датчику осуществляется через команду .getDefaultSensor () ,в которой указывается тип датчика, к которому получается доступ. В нашем случае эта команда выглядит так:

.getDefaultSensor(Sensor . TYPE_ORIENTATION )

Также в приложении используется слушатель изменений показаний датчика (SensorEventListener ), поэтому наше приложение должно выполнять этот интерфейс:

public class MainActivity extends Activity implements SensorEventListener {

Сами датчики не понимают, когда им пора на упокой, поэтому необходимо использовать методы onResume () и onPause () , чтобы указывать, когда приложение должно работать, а когда датчики могут быть свободны:). Если это не сделать, то датчик будет усердно трудиться и при закрытии программы, что уменьшит время работы устройства на несколько часов по причине стремительного разряда батареи.

Метод onSensorChanged () фиксирует изменения показаний датчика ориентации при его отклонении от севера, которому мы присваиваем значение 0 градусов. При повороте устройства в любую сторону в элементе TextView будет динамически отображаться изменение положения устройства в пространстве по отношению к северу в градусах.

Открываем файл MainActivity.java и добавляем все, о чем было упомянуто выше:

import android.app.Activity ; import android.hardware.Sensor ; import android.hardware.SensorEvent ; import android.hardware.SensorEventListener ; import android.hardware.SensorManager ; import android.os.Bundle ; import android.view.animation.Animation ; import android.view.animation.RotateAnimation ; import android.widget.ImageView ; import android.widget.TextView ; public class MainActivity extends Activity implements SensorEventListener { //Объявляем картинку для компаса private ImageView HeaderImage ; //Объявляем функцию поворота картинки private float RotateDegree = 0f ; //Объявляем работу с сенсором устройства private SensorManager mSensorManager; //Объявляем объект TextView TextView CompOrient ; @Override protected void onCreate (Bundle savedInstanceState ) { super. onCreate(savedInstanceState); setContentView(R . layout. activity_main); //Связываем объект ImageView с нашим изображением: HeaderImage = (ImageView ) findViewById(R . id. CompassView ); //TextView в котором будет отображаться градус поворота: CompOrient = (TextView ) findViewById(R . id. Header ); //Инициализируем возможность работать с сенсором устройства: mSensorManager = (SensorManager ) getSystemService(SENSOR_SERVICE ); } @Override protected void onResume () { super. onResume(); //Устанавливаем слушателя ориентации сенсора mSensorManager. registerListener(this, mSensorManager. getDefaultSensor(Sensor . TYPE_ORIENTATION ), SensorManager . SENSOR_DELAY_GAME ); } @Override protected void onPause () { super. onPause(); //Останавливаем при надобности слушателя ориентации //сенсора с целью сбережения заряда батареи: mSensorManager. unregisterListener(this); } @Override public void onSensorChanged (SensorEvent event ) { //Получаем градус поворота от оси, которая направлена на север, север = 0 градусов: float degree = Math . round(event. values); CompOrient . setText("Отклонение от севера: " + Float . toString(degree) + " градусов" ); //Создаем анимацию вращения: RotateAnimation rotateAnimation = new RotateAnimation (RotateDegree , - degree, Animation . RELATIVE_TO_SELF , 0.5f , Animation . RELATIVE_TO_SELF , 0.5f ); //Продолжительность анимации в миллисекундах: rotateAnimation. setDuration(200 ); //Настраиваем анимацию после завершения подсчетных действий датчика: rotateAnimation. setFillAfter(true ); //Запускаем анимацию: HeaderImage . startAnimation(rotateAnimation); RotateDegree = - degree; } @Override public void onAccuracyChanged (Sensor sensor , int accuracy ) { //Этот метод не используется, но без него программа будет ругаться } }

Все, давайте скомпилируем проект и протестируем приложение (можно и не компилировать, а протестировать через реальное устройство, подключенное к Android Studio). Запускаем и видим:

Работает, надеюсь у вас все также получилось, удачи!

Описание приложения

Неплохое приложение, которое можно устанавливать из Плей Маркета. Представляет собой цифровой компас, для которого можно выбирать определение местоположения по магнитному или истинному северу.
Изначально весь интерфейс программы представлен на английском языке. Его можно изменить на любой другой в настройках, в том числе и на русский. Перевод не совсем точный или дословный. Еще здесь можно сменить вид компаса:

  1. Modern – черный.
  2. Golden – серебристый с голубой серединой.
  3. Nice – золотистый с синей серединой.

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

Плюсы и минусы

Из плюсов отмечу следующее:

  • эту утилиту можно для Андроид скачать бесплатно;
  • поддерживает GPS, можно увидеть свои координаты.

Минусы же такие:

  • наличие рекламы;
  • неполноценная русификация программы;
  • отсутствие возможности увидеть свое положение на карте.

Скачать

3D Compass Plus

Скриншоты приложения

Компас Сталь 3D

Скриншоты приложения

Описание приложения

Данная программа представляет собой компас 3D, причем довольно точный компас. Сразу после запуска утилита предлагает провести калибровку, прилагая графическую инструкцию для этого. Затем пользователь увидит непосредственно компас, который при смене положения смартфона тоже вращается, продолжая указывать на магнитный север.
В настройках можно изменить курс на истинный, после чего станет доступна функция указания направления на Солнце и Луну. Цвет компаса здесь тоже можно изменить в настройках программы на неон черный, сталь красный, сталь синий, сталь черный и сталь золото.
При желании можно оставлять экран постоянно включенным и включить режим низкой мощности. В нижней части экрана расположена информация о напряженности магнитного поля.

Плюсы и минусы

Положительное в этом приложение:

  • скачивание ее на Андроиде бесплатное;
  • красивая визуализация благодаря эффекту 3D;
  • возможность получить информацию о направлении Солнца и Луны;
  • все здесь полностью на русском языке.

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

Скачать

При необходимости знать свое местоположение с учетом сторон света подойдет любой из электронных компасов. Ни один из них не требует подключения к сети Интернет. По комфортности и функциональности предпочтительнее программа 3D Compass Plus.