Современный смартфон – это сложное высокотехнологичное вычислительное устройство, которое мощнее тысяч бортовых компьютеров, полвека назад запускавших «Аполлоны» на Луну. Датчиков на борту флагманских мобильников тоже установлено едва не больше, чем на борту этого самого «Аполлона». Каждый из них незаметно, но добросовестно выполняет свою работу. Чем же занимаются все эти датчики смартфона, и как они устроены – подробнее читайте далее.

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

Датчик приближения

Это – оптический или ультразвуковой сенсор, определяющий, нет ли предметов перед экраном. Он посылает очень слабый световой или звуковой импульс, а если тот отразился – регистрирует отраженный сигнал. За счет этого осуществляется автоматическая блокировка экрана в режиме разговора или при перевороте смартфона дисплеем вниз. Традиционно сенсор приближения откалиброван таким образом, что регистрирует лишь 2 состояния: «посторонний предмет ближе N (обычно 5) сантиметров» и «посторонний предмет дальше N см».

Акселерометр

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

Обычный двухосевой акселерометр в смартфоне

Бывают двухосевые и трехосевые акселерометры. Особенностью акселерометра является то, что в состоянии покоя - одна из осей всегда будет показывать значение в районе 9-10 м/с 2 (в трехосевом трехмерном акселерометре). Это связанно с тем, что сила тяжести Земли составляет в среднем 9,8 м/с 2 .

Гироскоп

Гироскоп отвечает за определение движения и ориентации смартфона в пространстве. Он тоже конструкционно представляет MEMS (микроэлектромеханическую схему), расположенную на системной плате. Сферы его применени пересекаются с таковыми у акселерометра. Основные отличия состоят в том, что гироскоп имеет заметно большую точность и измеряет движение не в м/с 2 , а радианах или градусах на секунду. За счет этого его можно использовать для отслеживания поворотов головы в VR-гарнитуре, а также более точно реализовать жестовое управление.

Гироскоп MEMS под микроскопом

Магнитометр и датчик Холла

Магнитометр измеряет величину магнитного поля окружающего мира. Он также проводит измерения в трехмерном пространстве (по трем осям декартовых координат - X, Y и Z). Основная функция магнитометра – более точное определение местоположения в ходе навигации. В этом режиме использования он выполняет функцию цифрового компаса. Благодаря тому, что одна из осей, которая расположена в плоскости с Северным полюсом Земли, регистрирует постоянно повышенный фон. Магнитометр помогает более точно определять, в какую сторону относительно севера движется смартфон.

Магнитометр смартфона

Часто магнитометр называют датчиком Холла, однако это не совсем тождественные понятия. Подробнее о датчике Холла мы писали в другой статье . Отличия состоят в том, что первый является более универсальным и чувствительным. Магнитометр способен производить замеры магнитного излучения, в то время как только регистрирует его наличие/отсутствие и уменьшение/усиление. В современных смартфонах отдельный датчик Холла обычно не ставят, так как универсальный магнитометр полностью покрывает его функциональность.

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

Датчик гравитации

Измеряет силу притяжения нашей планеты в трехмерном пространстве. В состоянии покоя (когда смартфон лежит на столе), его показания должны совпадать с акселерометром: по одной из осей сила гравитации будет близка к 9,8 м/с 2 . Самостоятельно этот сенсор обычно не используется, но помогает работе других. В режиме навигации он определяет, в какой стороне земная поверхность, чтобы быстрее определить правильное положение смартфона. При использовании в VR за счет сенсора гравитации осуществляется правильное позиционирование картинки.

Датчик линейного ускорения в смартфоне

Принцип его работы практически идентичен акселерометру, единственное отличие кроется в инертности. То есть, показания этого сенсора не зависят ни от каких глобальных внешних факторов (вроде гравитации). Единственное, что он регистрирует – это скорость перемещений смартфона в пространстве относительно его прежнего положения.

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

Датчик вращения

Он определяет направление и частоту вращения смартфона относительно одной из осей трехмерного пространства. Как и датчик ускорения, является независимым и не привязан к внешним ориентирам. Часто выполняется в составе одного модуля с сенсором линейного ускорения. Отдельно, как правило, не задействуется, но позволяет корректировать работу других сенсоров для повышения точности. Также помогает при управлении жестами, например, покрутив смартфон в кисти руки активируется камера.

Гироскоп MEMS в разрезе

Температурные датчики

Современный смартфон обильно напичкан цифровыми термометрами. Конструкционно они представляют собой термопару: резистор с двумя выводами, сопротивление между которыми меняется в зависимости от температуры. Так как он относительно примитивен, то может быть выполнен даже внутри полупроводникового чипа.

В каждом смартфоне обязательно имеется датчик температуры батареи. При ее перегреве он отключает зарядку или снижает силу тока на выходе, чтобы предотвратить закипание электролита, которое влечет возгорание или взрыв. Также распространены термометры внутри SoC (в количестве от пары штук – до десятка и более). Они измеряют температуры процессорных ядер, графического ускорителя, различных контроллеров. Иногда встречаются и датчики окружающей температуры, но они распространены слабо. Причина тому – низкая точность, так как тепло от внутренностей аппарата и рук пользователя искажает показания.

Датчик давления (барометр) в смартфоне

Барометр в смартфоне измеряет атмосферное давление (в мм ртутного столба, бар или паскалях). Он позволяет корректнее определять местоположение и высоту над уровнем моря, так как при подъеме давление снижается. Также он может использоваться в качестве альтиметра, замеряя высоту над уровнем моря, но точность оставляет желать лучшего, так как атмосферное давление меняется вместе с погодой. Еще меньше востребована функция корректировки прогноза погоды в метеорологических программах и виджетах.

Гигрометр

Гигрометр измеряет влажность воздуха. Его основное предназначение очевидно, но популярностью данный сенсор не пользуется. В теории с его помощью можно корректировать данные прогноза погоды. Зная показания, можно также управлять микроклиматом в помещении, включив увлажнитель или осушитель воздуха. Единственный из известных смартфонов с гигрометром – уже старенький Samsung Galaxy S4.

Пульсометр или датчик сердечного ритма в смартфонах

Пульсометр способен измерять частоту и ритм сердечных сокращений. В процессе занятий спортом он дает возможность наблюдать за работой сердца и корректировать нагрузки для повышения эффективности тренировок. Недостатком пульсометра является потребность в плотном контакте смартфона с частью тела, в которой кровеносные сосуды находятся близко к поверхности (например, пальцами), чтобы уловить малейшие пульсации. Из-за этого популярности в смартфонах он не приобрел, а вот в смарт-часах и фитнес трекерах встречается повсеместно.

Статьи и Лайфхаки

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

Функции датчика расстояния в телефоне

  1. Так, во время разговора экран гаснет не потому, что телефон видит ухо. В данном случае датчик расстояния различает приближение объекта (не важно ухо это или любой другой объект) и сигнализирует об этом системе. Система дает команду отключить дисплей.

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

  2. После окончания разговора, когда пользователь убирает телефон от уха, система получает обратный сигнал и включает дисплей. Так что, как правило, пользователь даже не успевает заметить, что экран выключался, только если специально проследит.
  3. В современных устройствах этот сенсор выполняет множество других задач. На планшетах дает сигнал системе включать и выключать экран при приближении руки, а во время чтения помогает листать электронную книгу взмахом руки.

Часто встречающиеся трудности использования датчика расстояния

  • Вероятнее всего, сенсор «не видит» приближающиеся объекты из-за грязи. В таком случае его можно просто почистить щеточкой и он будет работать, как новенький. Эта процедура намного проще, чем кажется, ее можно выполнить и самому.
  • Если сенсор чист и все равно не работает или работает некорректно. Можно попробовать его откалибровать.

Калибровка датчика приближения

  • Положить устройство на стол.
  • Открыть настройки.
  • Выбрать «ALS PS calibration».
  • Поднести к датчику любой непрозрачный предмет, до нужного расстояния.
  • Выбрать «Calibrate».
В разных устройствах меню может выглядеть по разному и названия функций также могут отличаться. Может быть, что в меню телефона вообще не найдется подобной функции. Тогда нужно скачать необходимое приложение с официального сайта.

Если и после калибровки сенсор не работает некорректно, то самое лучшее решение – обращение в сервисный центр.

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

Если вы думаете, что датчики вашего Android телефона не работают так, как надо, вы всегда можете проверить, если это действительно работает нормально или нет. Итак, как вы точно определить, что не так с датчиками вашего телефона?

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

Android платформа поддерживает следующие три широкие категории датчиков:

Датчики движения

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

Экологические датчики

Датчик окружающей среды измеряет различные параметры окружающей среды. Примеры датчиков состояния окружающей среды являются барометры, фотометрические и термометры.

Датчики положения

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

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

гироскоп Датчик

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

Акселерометр Датчик

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

Световой датчик

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

датчик ориентации

Датчик ориентации определяет состояние направления вашего Android устройства. Он проверяет автоматический поворот экрана. Поверните ваш телефон, чтобы проверить, если датчик работает нормально.

Датчик приближения

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

Датчик температуры

Датчик температуры проверяет температуру батареи вашего Android устройства. Если вы путешествуете в Интернете с помощью 3G или играть в HD игры вы будете испытывать повышение температуры батареи, в которой он становится достаточно горячим на ощупь.

датчик звука

Датчик звука определяет интенсивность звука вокруг вас и дает вам подробную информацию об изменениях интенсивности.

Магнитный датчик поля

Магнитный датчик измеряет поле магнитных полей вдоль трех осей телефона. Он в основном используется для определения направления. Примерами могут служить приложение Google и приложение Compass. Просто двигаться с телефоном, чтобы проверить магнитный датчик.

Датчик давления

Датчик давления измеряет атмосферное давление. Он используется для прогноза погоды и для измерения температуры окружающей среды.

CPU-Z

Приложение CPU-Z собирает всю необходимую информацию о телефоне и представляет его в одном окне. Каждая опция вкладки в верхней части окна отображаются соответствующие детали.

Вкладка SOC - отображает система на кристалле (SoC) Архитектура детали вашего смартфона Android , как показано на рисунке ниже.

Вкладка Устройство - отображает детали устройства, как модель, производитель, аппаратные средства, размер экрана, общей и используемой оперативной памяти, общей и используемой памяти и т.д.

Вкладка Система - отображает подробную информацию о вашем смартфоне, как модель, производитель, тип платы, разрешение дисплея, на Android версии, установленной и т.д.

Вкладка батареи - отображает состояние зарядки аккумулятора, уровня, источник питания, статус, технологии, температуры и напряжения и т.д.

Тепловое вкладка - отображает список показаний температуры. Так как нагрузка на центральный процессор заставляет ваш телефон нагреваться, это хорошо, чтобы проверить, что температура не пересекает 60 ° C, поскольку это указывает на неисправность устройства. Этот датчик может быть не доступен во всех моделях устройства. Если он отсутствует, то вкладка не будет отображать любые значения.

Вкладка Датчики - отображает значения датчиков, поддерживаемых на устройстве. Вы можете играть с телефоном, чтобы проверить, если отдельные датчики работают; например, наклоняя телефон, чтобы проверить гироскоп или переместить ладони по экрану, чтобы проверить датчик близости и т.д. Если показания CPU-Z изменяются в ответ на ваши действия, то датчики отлично и работает. Если вы все еще чувствуете, что датчики не функционируют должным образом, то вам необходимо проверить и сравнить значения с другой аналогичной модели или устройства.

Датчик Кинетика

Датчик Кинетика позволяет просматривать, отслеживать и понимать поведение всех стандартных датчиков, установленных на вашем телефоне. Вы можете изменить настройку задержки или активировать или деактивировать определенные датчики. Это приложение демонстрирует использование каждого из датчиков, имеющихся в телефоне. Таким образом, вы можете легко проверить датчики в телефоне. Каждый датчик прикреплен к зрителю схему с необработанных и обработанных данных. Она также включает в себя документацию с легко понять примеры о том, как проверить каждого из датчиков на телефоне.

Испытание датчика

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

Sensor Box для Android

Sensor Box для Android приложение является хорошим ищет приложение с впечатляющим графическим представлением. Он обнаруживает все датчики, которые доступны на вашем Android устройстве. Приложение отображает все датчики и соответствующее сообщение появляется, если выбранный датчик не поддерживается вашим телефоном. Это приложение обнаруживает только изменения датчиков, если таковые имеются, и отображает значения. Он может не показывать правильные значения температуры, близость, света и давления, если не произойдет каких-либо изменений.

Телефон тестер

Телефон тестер приложение не только проверяет датчики на телефоне, но и проверяет состояние здоровья аппаратных устройств, Wi-Fi, телефония, GPS, сенсорный, батареи и системной информации. Он также проверяет, температуры окружающей среды, влажности, шаг детектора, монитор сердечного ритма и датчик отпечатков пальцев - при условии, что поддерживается Вашим устройством. A Pro версия приложения также доступна, который отображает дополнительную информацию, такую как память телефона, скорость процессора и памяти SD карты.

AndroSensor

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

Программы и опции Другие

Помимо упомянутых выше приложений, существует множество других приложений, доступных бесплатно с Google Play Store. Все эти приложения помогут вам в тестировании датчиков телефона. Некоторые из приложений, которые стоит упомянуть датчики Мультитул, датчик проверки и Advanced Sensor Checker. Вы можете установить и попробовать несколько приложений и посмотреть, если он предоставляет вам информацию, что вы искали.

Если вы используете телефон Samsung, наберите секретный код * # 0 * # , чтобы выполнить тест телефона без необходимости установки каких - либо дополнительных приложений. Выберите вкладку датчика с экрана, который отображается и следуйте инструкциям, чтобы проверить поддерживаемые датчики на телефоне.

Если у Вас возникли вопросы по этой теме, пожалуйста, не стесняйтесь задавать в разделе комментариев. Мы в TechWelkin и наш читатель сообщество будет пытаться помочь вам. Благодарим Вас за использование TechWelkin!

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

Что такое датчик приближения Андроид?

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

Датчик приближения Андроид очень полезен и даже необходим как минимум по двум причинам, а именно:

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

Датчик приближения находится в верхней части смартфона. Как правило, он размещён рядом с объективом фронтальной камеры. На некоторых устройствах датчик видно невооружённым взглядом, а на некоторых обнаружить его не так уж и просто. Чтобы определить местонахождение датчика приближения, достаточно во время разговора убрать устройство от уха и поднести палец к месту рядом с фронтальной камерой. Если дисплей погас, это означает, что вы нашли датчик.

Обычно, датчик включён по умолчанию, но если он у вас не активен или вы случайно его отключили, то включить датчик приближения Андроид всегда можно снова.

Для этого нужно:

  • Зайти в меню настроек телефона
  • Перейти в раздел «Вызовы »
  • После этого «Входящие вызовы »
  • Далее найти пункт «Датчик приближения »
  • Включить датчик приближения Андроид, активировав галочку

Как отключить датчик приближения на Андроид?

Иногда датчик работает некорректно, и для своего удобства некоторые потребители желают его отключить. Сделать это можно очень быстро и просто. Чтобы отключить датчик приближения на Андроид нужно выполнить все пункты вышеуказанной инструкции, но не ставить галочку в поле активации либо убрать ее.

Как настроить датчик приближения на Андроид?

В случае, если у вас включен, но не работает датчик приближения, его необходимо откалибровать или, простыми словами, настроить. Самый простой и безопасный вариант для решения этой проблемы – скачать бесплатное приложение «Датчик приближения Сброс ».

Чтобы настроить датчик приближения на Андроид с помощью данной программы вам нужно:

  • Скачать и установить приложение «Датчик приближения Сброс «
  • После запуска программы нажать Calibrate Sensor
  • Закрыть датчик приближения рукой и выбрать Next
  • Убрать руку и снова выбрать Next
  • После этого нажать Calibrate и Confirm
  • Дать программе доступ к рут-правам . В открывшемся окне кликнуть «Разрешить »
  • Подождать пока устройство перезагрузится
  • Проверить исправность работы датчика

Если эти действия не решили проблему, и у вас всё равно не работает датчик приближения, то возможно потребуется сделать калибровку дисплея. О том, как правильно откалибровать дисплей, читайте в нашей статье – . Также наладить работу датчика может перепрошивка устройства.

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

Как проверить датчик приближения Андроид с помощью инженерного меню?

Чтобы проверить датчик приближения Андроид с помощью , нужно в меню набора номера ввести комбинацию *#*#3646633#*#*. В открывшемся меню выбрать вкладку Hardware Testing, далее выбрать Sensor и нажать Light/Proximity Sensor. После этого - PS Data Collection, и вы попадёте в меню окна тестирования датчика приближения. Нужно нажать Get One Data, и во второй строчке должна появиться цифра «0». Далее положите руку на датчик приближения и ещё раз нажмите Get One Data, должно появиться число «255». Если у вас всё как в вышеуказанной инструкции, то датчик приближения работает корректно.



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

Датчики всякие нужны!

Для работы с аппаратными датчиками, доступными в устройствах под управлением Android, применяется класс SensorManager , ссылку на который можно получить с помощью стандартного метода getSystemService :

SensorManager sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);

Чтобы начать работать с датчиком, нужно определить его тип. Удобнее всего это сделать с помощью класса Sensor , так как в нем уже определены все типы сенсоров в виде констант. Рассмотрим их подробнее:

  • Sensor.TYPE_ACCELEROMETER - трехосевой акселерометр, возвращающий ускорение по трем осям (в метрах в секунду в квадрате). Связанная система координат представлена на рис. 1.
  • Sensor.TYPE_LIGHT - датчик освещенности, возвращающий значение в люксах, обычно используется для динамического изменения яркости экрана. Также для удобства степень освещенности можно получить в виде характеристик - «темно», «облачно», «солнечно» (к этому мы еще вернемся).
  • Sensor.TYPE_AMBIENT_TEMPERATURE - термометр, возвращает температуру окружающей среды в градусах Цельсия.
  • Sensor.TYPE_PROXIMITY - датчик приближенности, который сигнализирует о расстоянии между устройством и пользователем (в сантиметрах). Когда в момент разговора гаснет экран - срабатывает именно этот датчик. На некоторых девайсах возвращается только два значения: «далеко» и «близко».
  • Sensor.TYPE_GYROSCOPE - трехосевой гироскоп, возвращающий скорость вращения устройства по трем осям (радиан в секунду).
  • Sensor.TYPE_MAGNETIC_FIELD - магнитометр, определяющий показания магнитного поля в микротеслах (мкТл) по трем осям (имеется в смартфонах с аппаратным компасом).
  • Sensor.TYPE_PRESSURE - датчик атмосферного давления (по-простому - барометр), который возвращает текущее атмосферное давление в миллибарах (мбар). Если немного вспомнить физику, то, используя значение этого датчика, можно легко вычислить высоту (а ежели вспоминать ну никак не хочется, можно воспользоваться готовым методом getAltitude из объекта SensorManager ).
  • Sensor.TYPE_RELATIVE_HUMIDITY - датчик относительной влажности в процентах. Кстати, совместное применение датчиков относительной влажности и давления позволяет предсказывать погоду - конечно, если выйти на улицу. 😉
  • Sensor.TYPE_STEP_COUNTER (с API 19) - счетчик шагов с момента включения устройства (обнуляется только после перезагрузки).
  • Sensor.TYPE_MOTION_DETECT (с API 24) - детектор движения смартфона. Если устройство находится в движении от пяти до десяти секунд, возвращает единицу (по всей видимости, задел для аппаратной функции «антивор»).
  • Sensor.TYPE_HEART_BEAT (с API 24) - детектор биения сердца.
  • Sensor.TYPE_HEART_RATE (с API 20) - датчик, возвращающий пульс (ударов в минуту). Этот датчик примечателен тем, что требует явного разрешения android.permission.BODY_SENSORS в манифесте.

Перечисленные датчики являются аппаратными и работают независимо друг от друга, часто без всякой фильтрации или нормализации значений. «Для облегчения жизни разработчиков»™ Google ввела несколько так называемых виртуальных сенсоров, которые предоставляют более упрощенные и точные результаты.

Например, датчик Sensor.TYPE_GRAVITY пропускает показания акселерометра через низкочастотный фильтр и возвращает текущие направление и величину силы тяжести по трем осям, а Sensor.TYPE_LINEAR_ACCELERATION использует уже высокочастотный фильтр и получает показатели ускорения по трем осям (без учета силы тяжести).

При разработке приложения, эксплуатирующего показания сенсоров, вовсе не обязательно бегать по улице или прыгать в воду с высокой скалы, так как эмулятор, входящий в поставку Android SDK, умеет передавать приложению любые отладочные значения (рис. 2–3).


Ищем датчики

Чтобы узнать, какие сенсоры есть в смартфоне, следует использовать метод getSensorList объекта SensorManager :

List sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);

Полученный список будет включать все поддерживаемые датчики: как аппаратные, так и виртуальные (рис. 4). Более того, некоторые из них будут иметь различные независимые реализации, отличающиеся количеством потребляемой энергии, задержкой, рабочим диапазоном и точностью.

Для получения списка всех доступных датчиков конкретного типа необходимо указать соответствующую константу. Например, код

List pressureList = sensorManager.getSensorList(Sensor.TYPE_PRESSURE);

вернет все доступные барометрические датчики. Причем аппаратные реализации окажутся в начале списка, а виртуальные - в конце (правило действует для всех типов датчиков).


Чтобы получить реализацию датчика по умолчанию (такие датчики хорошо подходят для стандартных задач и сбалансированы в плане энергопотребления), используется метод getDefaultSensor :

Sensor defPressureSensor = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);

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

О том, как самолично выбирать реализацию датчиков по критериям, написано во врезке, мы же плавно двигаемся дальше.

Снимаем показания

Чтобы получать события, генерируемые датчиком, необходимо зарегистрировать реализацию интерфейса SensorEventListener с помощью того же SensorManager . Звучит сложновато, но на практике реализуется одной строчкой:

Sensor defPressureSensor = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE); sensorManager.registerListener(workingSensorEventListener, defPressureSensor, SensorManager.SENSOR_DELAY_NORMAL);

Здесь мы полученный ранее барометр по умолчанию регистрируем с помощью метода registerListener , передавая в качестве второго параметра сенсор, а в качестве третьего - частоту обновления данных.

В классе SensorManager определены четыре статические константы, определяющие частоту обновления:

  • SensorManager.SENSOR_DELAY_FASTEST - максимальная частота обновления данных;
  • SensorManager.SENSOR_DELAY_GAME - частота, обычно используемая в играх, поддерживающих гироскоп;
  • SensorManager.SENSOR_DELAY_NORMAL - частота обновления по умолчанию;
  • SensorManager.SENSOR_DELAY_UI - частота, подходящая для обновления пользовательского интерфейса.

Нужно сказать, что, указывая частоту обновления, не стоит ожидать, что она будет строго соблюдаться. Как показывает практика, данные от сенсора могут приходить как быстрее, так и медленнее.

Оставшийся нерассмотренным первый параметр представляет собой реализацию интерфейса SensorEventListener , где мы наконец-то получим конкретные цифры:

Private final SensorEventListener workingSensorEventListener = new SensorEventListener() { public void onAccuracyChanged(Sensor sensor, int accuracy) { } public void onSensorChanged(SensorEvent event) { // Получаем атмосферное давление в миллибарах double pressure = event.values; } };

В метод onSensorChanged передается объект SensorEvent , описывающий все события, связанные с датчиком: event.sensor - ссылка на датчик, event.accuracy - точность значения датчика (см. ниже), event.timestamp - время возникновения события в наносекундах и, самое главное, массив значений event.values . Для датчика давления передается только один элемент, тогда как, например, для акселерометра предусмотрено сразу три элемента для каждой из осей. В следующих разделах мы рассмотрим примеры работы с различными датчиками.

Метод onAccuracyChanged позволяет отслеживать изменение точности передаваемых значений, определяемой одной из констант: SensorManager.SENSOR_STATUS_ACCURACY_LOW - низкая точность, SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM - средняя точность, возможна калибровка, SensorManager.SENSOR_STATUS_ACCURACY_HIGH - высокая точность, SensorManager.SENSOR_STATUS_UNRELIABLE - данные недостоверны, нужна калибровка.

После того как отпадает необходимость работы с датчиком, следует отменить регистрацию:

SensorManager.unregisterListener(workingSensorEventListener);

Меряем давление и высоту

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

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов.