Съвременният смартфон не е просто изчислително устройство, а набор от мощни сензори. Камера, акселерометър, жироскоп, NFC, скенер за лице — всичко това е достъпно за разработчиците чрез платформени API. Хардуерните функции ви позволяват да създавате приложения, които взаимодействат с физическия свят: от фитнес тракери до игри с добавена реалност. В тази статия ще разгледаме всички основни сензори и API за iOS и Android. За повече подробности вижте официалната документация за Android сензори.
Основни точки
Хардуерните функции на смартфона включват десетки сензори, които събират данни за околната среда и позицията на устройството. Тези данни са достъпни чрез Sensors API (Android) и Core Motion (iOS). Сензорите се делят на три категории: сензори за движение (акселерометър, жироскоп), сензори за позиция (магнитометър) и сензори за среда (барометър, светлина, температура).
Акселерометърът измерва ускорението на устройството по три оси (x, y, z) в m/s². Използва се за: откриване на ориентация на екрана (автоматично завъртане), броене на стъпки (пешеходна навигация), разпознаване на жестове (разклащане за отмяна), игри с управление чрез накланяне. Android Sensor.TYPE_ACCELEROMETER и Core Motion CMMotionManager (iOS) предоставят сурови данни с честота до 200 Hz.
Жироскопът измерва ъгловата скорост на въртене на устройството по три оси (rad/s). За разлика от акселерометъра, жироскопът не се влияе от гравитацията, което го прави идеален за проследяване на завъртания. Приложения: стабилизиране на видео, VR/AR приложения, навигация на закрито, игрови контролери. Sensor.TYPE_GYROSCOPE (Android) и CMMotionManager (iOS) са основните API.
Магнитометърът измерва магнитното поле на Земята по три оси (µT) и работи като електронен компас. Използва се в навигационни приложения за определяне на посоката към север. Магнитометърът е чувствителен към смущения от метални предмети и високоговорители; изисква се калибриране (характерното движение във формата на осмица). Sensor.TYPE_MAGNETIC_FIELD — Android API.
Барометърът измерва атмосферното налягане (hPa) и се използва за определяне на надморска височина с точност до 1 метър. Сензорът за близост изключва екрана, когато телефонът се доближи до ухото по време на разговор. Сензорът за околна светлина регулира яркостта на екрана. Всички тези сензори са достъпни чрез единния SensorManager (Android) или CMMotionManager (iOS) за повечето сензори за движение.
Камерата е един от най-търсените хардуерни компоненти. На Android достъпът е чрез CameraX (модерен Jetpack API) или Camera2 (нисконивов API). CameraX автоматично управлява жизнения цикъл, поддържа Preview, ImageCapture, ImageAnalysis (ML анализ на кадри) и VideoCapture. На iOS камерата е достъпна чрез AVFoundation: AVCaptureSession управлява заснемането, AVCaptureDevice конфигурира параметри (фокус, ISO, баланс на бялото).
Микрофонът се използва за запис на звук, гласово управление и разпознаване на реч. На Android — MediaRecorder или AudioRecord; на iOS — AVAudioRecorder. Достъпът до камера и микрофон изисква разрешение от потребителя: Manifest.permission.CAMERA и RECORD_AUDIO (Android), NSCameraUsageDescription и NSMicrophoneUsageDescription (iOS) — низове в Info.plist, описващи причината за използване.
В IT Sectr реализирахме над 20 проекта с персонализирани камери: от скенери за QR кодове до приложения с AR филтри. Ключов извод: на Android CameraX спестява седмици разработка в сравнение с Camera2, докато на iOS AVFoundation дава пълен контрол над параметрите на заснемане. Пример за основно заснемане на изображение чрез CameraX:
class CameraFragment : Fragment() {
private lateinit var imageCapture: ImageCapture
fun startCamera() {
val processCameraProvider =
ProcessCameraProvider.getInstance(requireContext())
processCameraProvider.addListener({
val cameraProvider = processCameraProvider.get()
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(viewFinder.surfaceProvider)
}
imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.build()
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
cameraProvider.bindToLifecycle(
this, cameraSelector, preview, imageCapture
)
}, ContextCompat.getMainExecutor(requireContext()))
}
}
Биометричните хардуерни функции позволяват на потребителите да влизат в приложение чрез пръстов отпечатък или лице. iOS използва Face ID (TrueDepth камера, 30 000 невидими точки) и Touch ID (капацитивен скенер за пръстови отпечатъци). Android използва BiometricPrompt, който комбинира скенер за пръстови отпечатъци (капацитивен или ултразвуков) и Face Unlock (камера + ML). Face ID е по-сигурен от Touch ID: вероятност за съвпадение 1:1 000 000 срещу 1:50 000.
NFC (Near Field Communication) е безжична комуникационна технология с обхват до 10 cm. Използва се за: безконтактни плащания (Google Pay, Apple Pay), четене на NFC етикети (умни плакати, визитки), верификация (документи, билети), прехвърляне на данни (Android Beam — остарял). Core NFC (iOS) и NfcAdapter (Android) са основните API. На iOS NFC е достъпен само за четене (с изключение на плащания с Apple Pay).
Bluetooth/BLE (Bluetooth с ниска енергия) — за свързване на външни устройства: слушалки, фитнес гривни, медицински сензори, умни ключалки. Core Bluetooth (iOS) и android.bluetooth (Android) — API за сканиране, свързване и обмен на данни. BLE е енергийно ефективен: устройство може да работи с батерия с години. На iOS за фонова работа на BLE се изисква активиране на Background Modes → Uses Bluetooth LE accessories.
Хардуерни функции за здраве: HealthKit (iOS) — рамка на Apple за агрегиране на здравни данни. Потребителят дава разрешение за четене и запис на конкретни типове данни: стъпки, пулс, сън, калории, тегло, кръвно налягане. Всички данни се съхраняват в защитено хранилище и се синхронизират чрез iCloud. HealthKit предоставя единен интерфейс за запис на HKQuantitySample и четене чрез HKSampleQuery или HKStatisticsQuery.
Google Fit — платформа на Google за фитнес данни на Android. API е разделен на два комплекта: Sensors API (реални данни от сензори на устройството — стъпки, калории) и History API (четене/запис на исторически данни). Google Fit също агрегира данни от други фитнес приложения (Strava, Runkeeper) чрез оторизация. На iOS Google Fit е достъпен чрез REST API.
Core Motion (iOS) — рамка за работа със сензори за движение без специален чип: акселерометър, жироскоп, крачкомер (CMPedometer), висотомер (CMAltimeter). CMPedometer брои стъпки, изминато разстояние, темп и изкачени етажи. На Android подобни възможности се предоставят от Sensor.TYPE_STEP_COUNTER и Step Detector. Всички фитнес данни изискват изричното съгласие на потребителя.
Добавената реалност (AR) и машинното обучение на устройството представляват върхът на хардуерните възможности на смартфона. ARKit (Apple, iOS 11+) използва камера, жироскоп, акселерометър и LiDAR (на Pro модели) за проследяване на околното пространство. ARCore (Google) е еквивалентът за Android с проследяване на равнини, разпознаване на изображения и оценка на осветление. И двете рамки използват Visual Inertial Odometry (VIO) — комбинация от камера и инерциални сензори.
ML Kit (Google) — SDK за машинно обучение на Android и iOS. Включва готови API: разпознаване на текст (OCR), сканиране на баркодове, разпознаване на лица, откриване на поза, проследяване на обекти, разпознаване на текст в изображения и обработка на естествен език. ML Kit работи изцяло на устройството — данните не се изпращат до сървъра, което гарантира поверителност и офлайн работа.
Core ML (Apple) — рамка за интегриране на ML модели в iOS приложения. Моделите (mlmodel) се конвертират от TensorFlow, PyTorch или Keras чрез Core ML Tools. Vision — рамка за компютърно зрение: откриване на лица, текст, баркодове, хоризонтално подравняване. Комбинирането на Vision и Core ML позволява изграждане на ML тръбопроводи в реално време: заснемане на кадър → анализ Vision → предсказване Core ML → актуализация на UI — всичко на устройството със закъснение под 50 ms.
Често задавани въпроси
Съвременният смартфон съдържа акселерометър, жироскоп, магнитометър (компас), барометър, сензор за близост, сензор за околна светлина, скенер за пръстови отпечатъци, камера, микрофон, NFC, Bluetooth, Wi-Fi, GPS. Флагманските модели също имат LiDAR, пулсомер и температурен сензор.
Face ID е биометрична автентикация по лице с помощта на TrueDepth камера (проекция на 30 000 точки). Touch ID е автентикация по пръстов отпечатък чрез капацитивен скенер. Face ID е по-сигурен (1 на 1 000 000 срещу 1 на 50 000) и работи без контакт.
Съвременният начин е CameraX (библиотека Jetpack). CameraX опростява работата с камерата: автоматично управлява жизнения цикъл, поддържа Preview, ImageCapture, ImageAnalysis и VideoCapture. За стари проекти се използва Camera2 API.
NFC позволява: четене и запис на NFC етикети (умни плакати, визитки), безконтактни плащания (Google Pay, Apple Pay), прехвърляне на данни между устройства, верификация на документи, отваряне на врати, използване на транспортни карти. На iOS NFC е достъпен само за четене (с изключение на Apple Pay).
ARKit е рамката на Apple за добавена реалност на iOS. ARCore е еквивалентът на Google за Android. И двете поддържат проследяване на равнини, разпознаване на изображения и оценка на осветление. ARKit използва LiDAR (на iPad Pro/iPhone Pro) за по-точно позициониране.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.