Сензорът за близост е инфрачервен сензор, който открива наличието на обект пред екрана на смартфона без физически контакт. Основната функция е изключване на дисплея по време на телефонен разговор за предотвратяване на случайни докосвания с бузата и пестене на батерията. Според Google Android Developer Guide, 2024, съвременните сензори за близост измерват разстояние от 0 до 10 см с точност от 0.5 см и време за реакция под 50 мс.
Основни точки
Сензорът за близост (proximity sensor) е безконтактен инфрачервен сензор, разположен в горната част на предния панел на смартфона, до говорителя за разговор. Състои се от инфрачервен светодиод (IR LED) и фотодетектор (фотодиод или фототранзистор). Първият масов смартфон със сензор за близост беше Apple iPhone (2007) — оттогава сенсорът стана задължителен компонент на всички модерни телефони.
Сензорът обикновено е скрит под стъклото на екрана и се вижда само под определен ъгъл като малка точка. В съвременните модели се използва оптичен модул с тясна диаграма на насоченост (15–30 градуса), за да се изключат фалшиви показания от отражения в стъклото. Производители — Sharp, ams OSRAM (серия TMD), Silicon Labs и техните договорни партньори.
| Параметър | Стойност |
|---|---|
| Дължина на вълната | 850–940 nm (невидим IR диапазон) |
| Обхват | 0–10 см |
| Резолюция | 0.5 см |
| Консумация | 0.3–0.7 mA |
| Време за реакция | 10–50 мс |
В мобилните устройства се използват дискретни сензори (отделен чип IR LED + фотодиод) и интегрирани модули (и двата елемента на един чип). Интегрираните решения (ams TMD2635, размер 1×1×0.5 mm) се използват в ултратънките корпуси на съвременните флагмани и заемат минимално място на платката.
Принципът на действие на сензора за близост се основава на измерване на интензитета на отразеното IR лъчение. Инфрачервеният светодиод излъчва светлинен импулс (850–940 nm), а фотодиодът измерва количеството светлина, отразена от обекта. Ако отразеният сигнал надвиши прага — обектът се счита за близък (по-малко от 3–5 см).
Основният технически проблем е слънчевата светлина и смущенията от други IR източници. Решението е модулация на лъчението: IR LED излъчва импулси с честота 10–100 kHz, а фотодетекторът синхронно открива сигнала, като филтрира постоянната компонента. Според ams Application Note AN000610 (2024), схемата за синхронно откриване потиска фоновата светлина с 40–60 dB.
Прагът на задействане се настройва от производителя на етапа на калибриране и зависи от прозрачността на стъклото на екрана. Типичен праг — отражението съответства на разстояние 2–4 см. Когато пръстът или ухото се намират на разстояние, по-малко от прага, сензорът връща стойност 0 (близо), в противен случай — максималната стойност на обхвата (8–10 см в зависимост от модела).
Сензорът за близост (IR proximity) измерва интензитета на отражение — двоичен сензор с две състояния. Time-of-Flight (ToF) измерва времето за преминаване на светлината до обекта и обратно, което позволява точно определяне на разстояние до няколко метра. В мобилните устройства ToF сензорите (VL53L5 от STMicroelectronics) се използват за автофокус на камерата и AR приложения.
За задачата изключване на екрана при обаждане е достатъчен прост двоичен IR сензор — цената му е 0.10–0.30 долара в сравнение с 1–3 долара за ToF модул. ToF сензорът добавя точна функция за измерване на разстояние, но е излишен за основната задача. В някои флагмани (Samsung Galaxy S23 Ultra) се използват комбинирани модули, които обединяват и двете технологии.
| Параметър | IR Proximity | ToF сензор |
|---|---|---|
| Принцип | Интензитет на отражение | Време на полет на светлината |
| Обхват | 0–10 см | 0–400 см |
| Точност | 0.5 см | 0.1 см |
| Цена | $0.10–0.30 | $1–3 |
| Приложение | Екран при обаждане | Автофокус, AR |
Android предоставя достъп до сензора за близост чрез Sensor.TYPE_PROXIMITY. Характеристика на API е, че сензорът връща само две практически значими стойности: 0 (обект близо) и стойността на максималния обхват (обикновено 5–10 см) при липса на обект. Вътрешните алгоритми скриват аналоговата природа на сигнала.
Двоичната природа на сензора означава, че приложението не може да получи точното разстояние до обекта — само факта на наличие или отсъствие на препятствие в зоната на чувствителност. Това е хардуерно ограничение. За по-точни измервания използвайте ToF сензора (ако е наличен) чрез стандартния API TYPE_PROXIMITY, но на устройства с ToF той връща аналогови стойности.
val proximitySensor = sensorManager
.getDefaultSensor(Sensor.TYPE_PROXIMITY)
sensorManager.registerListener(
object : SensorEventListener {
override fun onSensorChanged(event: SensorEvent) {
val distance = event.values[0]
val maxRange = proximitySensor?.maximumRange ?: 10f
when {
distance < maxRange -> lockScreen()
else -> unlockScreen()
}
}
override fun onAccuracyChanged(
sensor: Sensor, accuracy: Int
) {}
},
proximitySensor,
SensorManager.SENSOR_DELAY_UI
)
При регистриране на сензора за близост е важно да използвате SCREEN_OFF_WAKE_LOCK, ако приложението трябва да продължи да работи с изключен екран (например запис на разговор). Без Wake Lock процесорът може да премине в режим на сън и данните от сензора спират да пристигат. Флагът SENSOR_DELAY_UI (200 ms) е достатъчен за повечето сценарии.
Въпреки че основната функция на сензора е изключване на екрана при обаждане, разработчиците намират по-креативни приложения. Приложението Glimmer използва сензора за близост за превключване на песни чрез движение на ръката пред екрана — преместете дланта си, за да пропуснете песен. Зареждането на батерията не страда: консумацията на енергия на сензора е само 0.3–0.7 mA.
Основният проблем на сензорите за близост са фалшивите показания при използване на защитни стъкла и калъфи. Някои производители (Google Pixel 8, 2023) използват ултразвуков сензор за близост вместо IR — той работи през всякакви защитни стъкла и екрани с произволна дебелина, но има по-малка точност и по-голямо закъснение (до 100 ms). Дебелото стъкло (над 0.5 mm) разсейва IR лъчението, причинявайки постоянно задействане. Решението е да използвате калъфи с прецизен изрез за сензора. Вторият недостатък е невъзможността за работа чрез OLED екрани с променлива прозрачност (under-display sensor).
През 2024–2025 г. производителите започнаха да внедряват сензори за близост под дисплея (under-display), което позволи намаляване на горната рамка на смартфона до 1–2 mm. Първото серийно устройство с under-display proximity беше Xiaomi 14 Ultra (2024), последвано от OnePlus 12 и Samsung Galaxy S25. Технологията използва IR лъчение с дължина на вълната 940 nm, което частично преминава през пикселите на OLED дисплея. Според Samsung Display Technical Paper (2024), прозрачността на OLED за IR лъчение е 15–25% — достатъчна за работа на сензора при яркост на екрана до 600 cd/m². При по-висока яркост матрицата става непрозрачна за IR и сензорът изисква изключване на подсветката за 1–2 кадъра за измерване.
При разработка на приложения в Android емулаторът не поддържа сензор за близост — необходимо е да го емулирате програмно. На физическо устройство за отстраняване на грешки може да се използва adb команда: adb shell sendevent /dev/input/eventX със съответните кодове ABS_MT_TOUCH_MAJOR. За симулация на изключване на екрана при обаждане в тестове използвайте SensorManager с mock обект, връщащ стойност 0 при извикване на onSensorChanged.
За да проверите сензора за близост на Android устройство, отворете приложението Телефон, наберете *#0*# (на Samsung) и изберете опцията Sensor. При приближаване на пръста към горната част на екрана стойността на сензора трябва да се промени от «Far» на «Near». Ако сензорът не реагира — избършете горната част на екрана и проверете за защитно стъкло, покриващо сензора. На iPhone проверката се извършва чрез системна диагностика в настройките.
Често задавани въпроси
Най-често проблемът е в защитното стъкло или калъфа, които покриват сензора за близост. Уверете се, че областта до говорителя за разговор не е блокирана. Ако проблемът е на гол телефон — възможен е хардуерен дефект или замърсяване на сензора.
Сензорът се намира в горната част на предния панел, до говорителя за разговор. В съвременните смартфони е скрит под стъклото на екрана. Може да се види чрез осветяване с ярко фенерче под ъгъл — изглежда като малка точка или процеп.
Със стандартните средства на Android — не. Съществуват обаче приложения с достъп чрез инженерното меню (наберете *#0*# на Samsung) за тестване. На някои устройства чувствителността може да се настрои чрез сервизен режим.
Стандартното API на сензора за близост връща само факта на откриване — 0 или maxRange. За получаване на точно разстояние използвайте Time-of-Flight сензора (ако устройството е оборудвано) — достъпен чрез същия TYPE_PROXIMITY на съвместими устройства.
Зависи от дебелината и материала на стъклото. Тънките гъвкави стъкла (0.15–0.2 mm) не влияят на работата. Дебелите закалени стъкла (0.5+ mm) могат да разсейват IR лъчението и да причинят фалшиво задействане. Препоръчват се стъкла с прецизен изрез или черна рамка около сензора.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също