Sensors API: bu nədir, sensor növləri və sensorlarla iş

Müəllif: IT Sectr Dərc olunub: 2026-03-26 Oxuma vaxtı: 10 dəq

Sensors API — cihazın aparat sensorlarına daxil olmaq üçün Android platforması interfeysidir. API akselerometr, giroskop, maqnitometr, işıq sensoru və digər sensorlardan məlumat əldə etməyin vahid yolunu təmin edir. Google, 2026 məlumatlarına görə, müasir Android cihazlarının 95%-dən çoxu ən azı üç növ sensorla təchiz edilmişdir ki, bu da kontekstual tətbiqlərin hazırlanması üçün geniş imkanlar açır.

Əsas məqamlar

  • Sensors API — cihazın aparat sensorları ilə işləmək üçün vahid Android interfeysi.
  • Üç kateqoriya — Motion, Position və Environment sensorları müxtəlif ölçü prinsipləri ilə.
  • SensorManager — sensor siyahısını əldə etmək və dinləyiciləri qeydiyyatdan keçirmək üçün sistem xidməti.
  • Yeniləmə tezliyi NORMAL-dan FASTEST-ə qədər SENSOR_DELAY sabitləri ilə təyin edilir.
  • Virtual sensorlar — Gravity, Rotation Vector və Linear Acceleration fiziki sensorların kombinasiyasına əsaslanır.

Android-də Sensors API nədir?

Sensors API — Android Framework-ün proqram interfeysidir, tərtibatçılara mobil cihazın aparat sensorlarına giriş imkanı verir. API 1.0 versiyasından etibarən Android SDK-nın tərkibinə daxildir və android.hardware paketi vasitəsilə əlçatandır. İnterfeys müxtəlif istehsalçıların — Qualcomm, MediaTek, Samsung Exynos — sensor tətbiqləri arasındakı fərqləri abstraksiya edir və sensorlarla iş üçün vahid model təqdim edir.

Sensors API-nin əsas imkanları

API üç əsas əməliyyatı yerinə yetirməyə imkan verir: mövcud sensorların siyahısını əldə etmək, məlumat almaq üçün dinləyiciləri qeydiyyatdan keçirmək və oxu tezliyini idarə etmək. SensorManager bütün əməliyyatlara mərkəzi giriş nöqtəsi kimi çıxış edir. Sistem tətbiqi onSensorChanged callback-i vasitəsilə float dəyərlər massivi olan SensorEvent obyektini ötürərək xəbərdar edir.

Sensors API-nin təkamülü

Android-in mövcud olduğu müddətdə API bir neçə inkişaf mərhələsindən keçmişdir. 2.3 (Gingerbread) versiyasında Batch Processing dəstəyi — enerji sərfiyyatını azaltmaq üçün sensor hadisələrinin qruplaşdırılması ortaya çıxdı. Android 4.0 (Ice Cream Sandwich) Gravity və Linear Acceleration virtual sensorlarını əlavə etdi. Android 8.0-dan etibarən sistem məxfilik üçün fon sensor girişini məhdudlaşdırdı.

kotlin
val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
val sensorList: List<Sensor> = sensorManager.getSensorList(Sensor.TYPE_ALL)
sensorList.forEach { sensor ->
    Log.d("Sensorlar", "${sensor.name} — ${sensor.type}")
}

Məhdudiyyətlər və tələblər

Bütün cihazlar eyni sensor dəstinə malik deyil. Tətbiq dinləyicini qeydiyyatdan keçirməzdən əvvəl konkret sensorun mövcudluğunu yoxlamalıdır. Android emulyatoru yalnız məhdud sensor dəstini — akselerometr və maqnitometri dəstəkləyir. Qalan sensorların sınaqdan keçirilməsi üçün fiziki cihaz tələb olunur. Android 12-dən etibarən tətbiqlər sensordan istifadəni manifestdə bəyan etməlidir.

Android sensor növləri: Motion, Position, Environment

Android bütün sensorları üç kateqoriyaya ayırır: Motion (hərəkət), Position (vəziyyət) və Environment (ətraf mühit). Motion sensorları akselerometr, giroskop və addımölçəni əhatə edir. Position sensorları maqnitometr və Orientation-ı ehtiva edir. Environment — işıq, təzyiq, temperatur və rütubət sensoru.

KateqoriyaSensorlarNöv (sabit)Fiziki/Virtual
MotionAkselerometrTYPE_ACCELEROMETERFiziki
MotionGiroskopTYPE_GYROSCOPEFiziki
MotionAddımölçənTYPE_STEP_COUNTERFiziki
MotionGravityTYPE_GRAVITYVirtual
PositionMaqnitometrTYPE_MAGNETIC_FIELDFiziki
PositionRotation VectorTYPE_ROTATION_VECTORVirtual
EnvironmentİşıqTYPE_LIGHTFiziki
EnvironmentTəzyiqTYPE_PRESSUREFiziki

Motion sensorları: akselerometr və giroskop

Akselerometr üç ox — X, Y və Z üzrə m/s² ilə təcil ölçür. Dəyərlər cazibə qüvvəsini (sükunət vəziyyətində Z oxu üzrə 9.8 m/s²) əhatə edir. Giroskop rad/s ilə bucaq sürətini — cihazın hər ox ətrafında fırlanma sürətini ölçür. Bu iki sensorun kombinasiyası naviqasiya, oyunlar və AR tətbiqlərində istifadə olunur.

kotlin
class SensorActivity : Activity(), SensorEventListener {
    override fun onSensorChanged(event: SensorEvent) {
        if (event.sensor.type == Sensor.TYPE_ACCELEROMETER) {
            val x = event.values[0]
            val y = event.values[1]
            val z = event.values[2]
            textView.text = "X: $x, Y: $y, Z: $z"
        }
    }
    override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {}
}

Position sensorları: maqnitometr və oriyentasiya

Maqnitometr (TYPE_MAGNETIC_FIELD) üç ox üzrə maqnit sahəsini mikrotesla (µT) ilə ölçür. Rəqəmsal kompas kimi istifadə olunur — akselerometrlə birlikdə cihazın azimutunu təyin etməyə imkan verir. Rotation Vector — giroskop, akselerometr və maqnitometr məlumatlarını birləşdirən virtual sensordur.

Environment sensorları: işıq, təzyiq, temperatur

İşıq sensoru (TYPE_LIGHT) xarici işıqlandırma səviyyəsini lüks (lx) ilə ölçür. Ekran parlaqlığının avtomatik tənzimlənməsi üçün istifadə olunur. Təzyiq sensoru (TYPE_PRESSURE) atmosfer təzyiqini hektopaskal (hPa) ilə ölçür — dəniz səviyyəsindən hündürlüyü təyin etmək üçün naviqasiya tətbiqlərində istifadə olunur.

Sensors API arxitekturası necə işləyir

Sensors API müştəri-server arxitekturası üzərində qurulmuşdur. Tətbiq müştəri, SensorManager — Android sistem xidməti rolunu oynayır. Tətbiq registerListener vasitəsilə dinləyicini qeydiyyatdan keçirdikdə, SensorManager Linux nüvəsi səviyyəsində işləyən aşağısəviyyəli sensor sürücüsü olan HAL (Hardware Abstraction Layer) ilə əlaqə qurur.

Sensor hadisəsinin həyat dövrü

HAL sürücüsü aparat çipindən xam məlumatları alır, səs-küyü filtrələyir və onları yuxarı — SensorService (sistem prosesi) vasitəsilə tətbiqə ötürür. Məlumatlar float dəyərlər massivi values və nanosaniyələrlə vaxt nişanı olan SensorEvent obyekti kimi ötürülür. Hadisələrin tezliyi seçilmiş çatdırılma rejimindən asılıdır.

Hadisə çatdırılma rejimləri

Dinləyici qeydiyyatdan keçirilərkən tərtibatçı SENSOR_DELAY_NORMAL (200 ms), SENSOR_DELAY_UI (60 ms), SENSOR_DELAY_GAME (20 ms) və SENSOR_DELAY_FASTEST (0 ms — maksimum tezlik) sabitləri vasitəsilə hadisələr arasında istənilən gecikməni təyin edir. Real tezlik fərqli ola bilər — sistem enerji sərfiyyatını optimallaşdırır.

kotlin
val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
sensorManager.registerListener(
    this,
    sensor,
    SensorManager.SENSOR_DELAY_GAME
)

Toplu emal (Batch Processing)

Android 2.3-dən etibarən sensorlar toplu rejimi dəstəkləyir — hadisələr FIFO buferində toplanır və bir paketlə çatdırılır. Bu, prosessorun daha uzun müddət yuxu rejimində qalmasına imkan verir, enerji sərfiyyatını 60%-ə qədər azaldır. Bufer ölçüsü sensor çipindən asılıdır və Sensor.fifoMaxEventCount sahəsində göstərilir.

Sensorlara giriş üçün SensorManager istifadəsi

SensorManagergetSystemService(Context.SENSOR_SERVICE) vasitəsilə əlçatan olan sistem xidmətidir. Sensorların siyahısını əldə etmək, konkret defolt sensoru əldə etmək və dinləyiciləri qeydiyyatdan keçirmək/ləğv etmək üçün metodlar təqdim edir. SensorManager — singleton, bütün tətbiq üçün bir nümunə.

Sensorun mövcudluğunun yoxlanılması

Sensordan istifadə etməzdən əvvəl onun mövcudluğunu yoxlamaq lazımdır. getDefaultSensor(type) metodu cihazda sensor yoxdursa null qaytarır. null əldə etmək yoxlanılmazsa, dinləyici qeydiyyatı zamanı NullPointerException yaranacaq. Bütün sensorların siyahısını getSensorList(type) metodu qaytarır.

kotlin
fun checkSensorAvailability(type: Int): Boolean {
    val sensorManager =
        getSystemService(Context.SENSOR_SERVICE) as SensorManager
    return sensorManager.getDefaultSensor(type) != null
}

// Istifadə:
if (checkSensorAvailability(Sensor.TYPE_GYROSCOPE)) {
    Log.d("Sensor", "Giroskop mövcuddur")
}

Dinləyicinin qeydiyyatı və ləğvi

Dinləyici registerListener(listener, sensor, delay) vasitəsilə qeydiyyatdan keçirilir. Vacibdir: dinləyicini onPause() metodunda unregisterListener(listener) vasitəsilə ləğv etmək lazımdır. Bu edilməzsə, tətbiq hətta fonda belə sensor hadisələrini almağa davam edərək batareyanı boşaldacaq. Android 8+ qeydiyyatdan keçirilməmiş dinləyicilər barədə logcat-da xəbərdarlıq göstərir.

Dəqiqliyin dəyişməsinin idarə edilməsi

onAccuracyChanged(sensor, accuracy) metodu sensorun dəqiqliyi dəyişdikdə çağırılır. Dəyərlər: SENSOR_STATUS_ACCURACY_HIGH, MEDIUM, LOW və UNRELIABLE. UNRELIABLE alındıqda sensor məlumatları dəqiqlik bərpa olunana qədər nəzərə alınmamalıdır. Məsələn, maqnitometr kalibrləmə tələb edir — cihazı səkkiz rəqəmi formasında silkələmək.

Kotlin ilə sensorlarla iş üçün kod nümunələri

Kotlin dilində Android tətbiqlərində Sensors API-dən istifadənin praktik nümunələrinə baxaq. Birinci nümunə — akselerometr vasitəsilə ekran oriyentasiyasının təyini. İkinci — kalibrləmə ilə maqnitometr göstəricilərinin oxunması. Üçüncü — addımölçən istifadə edərək addım detektoru.

Cihaz oriyentasiyasının təyini

Oriyentasiyanı təyin etmək üçün akselerometr və maqnitometrin kombinasiyası istifadə olunur. SensorManager.getRotationMatrix() metodu fırlanma matrisini hesablayır, getOrientation() isə pitch, roll və azimuth bucaqlarını çıxarır. Azimuth (azimut) — maqnit şimalına nisbətən radianlarla bucaq.

kotlin
val gravity = FloatArray(3)
val geomagnetic = FloatArray(3)
val rotationMatrix = FloatArray(9)
val orientation = FloatArray(3)

SensorManager.getRotationMatrix(
    rotationMatrix, null, gravity, geomagnetic
)
SensorManager.getOrientation(rotationMatrix, orientation)
// orientation[0] — azimuth, [1] — pitch, [2] — roll
val azimuthDeg = Math.toDegrees(orientation[0].toDouble())

Addımölçən ilə addım detektoru

Addımölçən (TYPE_STEP_COUNTER) cihazın son yenidən başladılmasından etibarən istifadəçinin etdiyi addımların ümumi sayını qaytarır. Sensor aparat səviyyəsində işləyir — tətbiq işə salınmasa belə aktivdir. Sessiya ərzində addımları əldə etmək üçün ilkin dəyəri saxlamaq və fərqi hesablamaq lazımdır.

kotlin
var initialSteps = 0
var isInitialized = false

override fun onSensorChanged(event: SensorEvent) {
    if (event.sensor.type == Sensor.TYPE_STEP_COUNTER) {
        if (!isInitialized) {
            initialSteps = event.values[0].toInt()
            isInitialized = true
        }
        val currentSteps = event.values[0].toInt()
        val sessionSteps = currentSteps - initialSteps
        Log.d("Addımlar", "Sessiyada addımlar: $sessionSteps")
    }
}

İşıq sensoruna əsasən adaptiv parlaqlıq

İşıq sensoru interfeysi ətraf mühit şəraitinə uyğunlaşdırmağa imkan verir. Aşağı işıqlandırmada (10 lx-dən az) tünd temaya keçmək olar. Parlaq günəş işığında (10000 lx-dən çox) — kontrastı artırmaq olar. Səs-küyün filtrasiyası üçün son 5 dəyər üzrə hərəkətli orta istifadə olunur.

Virtual sensorlar və birləşmə alqoritmləri

Android birbaşa aparat analoqu olmayan bir neçə virtual sensor təqdim edir. Virtual sensor öz göstəricilərini fiziki sensorların kombinasiyası əsasında hesablayır. Bu, tərtibatçının yükünü azaldır — sistem özü məlumat birləşmə alqoritmlərini həyata keçirir.

Gravity və Linear Acceleration

Gravity (TYPE_GRAVITY) sensoru aşağı keçid (low-pass) filtri ilə akselerometr göstəricilərindən cazibə komponentini ayırır. Linear Acceleration (TYPE_LINEAR_ACCELERATION) — əksinə, cazibəni silir və yalnız cihazın xətti təcilini saxlayır. Gravity və Linear Acceleration-ın cəmi akselerometrin xam göstəricilərini verir.

Rotation Vector

Rotation Vector — ən mürəkkəb virtual sensor. O, giroskop (yüksək tezlikli dəyişikliklər), akselerometr (cazibə vektoru) və maqnitometr (şimala nisbətən oriyentasiya) məlumatlarını birləşdirir. Nəticə — cihazın kosmosda mütləq oriyentasiyasını təsvir edən kvaternion. AR tətbiqlərində və VR dəbilqələrində istifadə olunur.

Game Rotation Vector

Game Rotation Vector — maqnitometr olmadan Rotation Vector-un sadələşdirilmiş versiyası. Bu, azimutun təyin edilməsində daha aşağı dəqiqlik, lakin daha yüksək yeniləmə tezliyi və sabitlik verir. Aşağı gecikmənin vacib olduğu, şimala nisbətən mütləq oriyentasiyanın vacib olmadığı oyunlar üçün tövsiyə olunur.

Sensorlarla işdə enerji sərfiyyatının optimallaşdırılması

Sensorlar — cihazın ən enerji tutumlu komponentlərindən biridir. Maksimum sorğu tezliyində akselerometr və giroskop batareyanı 3–4 saat fasiləsiz işdə boşalda bilər. Sensorlarla işin optimallaşdırılması Sensors API istifadə edən hər hansı tətbiq üçün kritik vəzifədir.

Optimal gecikmənin seçilməsi

Lazım olmadan SENSOR_DELAY_FASTEST istifadə etməyin. UI animasiyaları üçün SENSOR_DELAY_UI (60 ms) kifayətdir. Ekran oriyentasiyasını təyin etmək üçün — SENSOR_DELAY_NORMAL (200 ms). Tezlik nə qədər yüksək olsa, prosessor aktiv vəziyyətdə bir o qədər çox vaxt keçirir. NORMAL və FASTEST arasında fərq enerji sərfiyyatında 10x-ə qədərdir.

Fonda dinləyicilərin ləğvi

Android 8.0-dan (API 26) etibarən fon tətbiqləri sensor hadisələrini azaldılmış tezliklə alır. Android 12+-də Motion və Position sensorlarına fon girişi BODY_SENSORS_BACKGROUND icazəsi tələb edir. Tətbiq fon rejiminə keçdikdə dinləyicinin qeydiyyatını ləğv edin — bu, cihazın iş vaxtını uzadır.

Toplu emal və FIFO buferi

registerListener(listener, sensor, delay, maxReportLatencyUs) metodu vasitəsilə toplu emaldan istifadə edin. maxReportLatencyUs parametri hadisələrin çatdırılmasında maksimum gecikməni mikrosaniyələrlə təyin edir. 1000000 (1 saniyə) dəyərində hadisələr sensorun FIFO buferində toplanır və saniyədə bir dəfə çatdırılır — prosessor daha az yuxudan çıxır.

Tez-tez verilən suallar

Bütün Android cihazlarında hansı sensorlar var?

Minimal dəst — akselerometr və maqnitometr. Bu iki sensor cihazların 95%-dən çoxunda mövcuddur. Giroskop, işıq sensoru və yaxınlıq sensoru — müasir modellərin 70–80%-də. Qalan sensorlar (təzyiq, temperatur, rütubət, addımölçən) daha az rast gəlinir və cihazın qiymət kateqoriyasından asılıdır.

TYPE_ACCELEROMETER və TYPE_LINEAR_ACCELERATION arasında fərq nədir?

TYPE_ACCELEROMETER cazibə qüvvəsi də daxil olmaqla tam təcili qaytarır (9.8 m/s²). TYPE_LINEAR_ACCELERATION cazibə olmadan təcili — yalnız cihazın hərəkətindən yaranan təcili qaytarır. Cihaz hərəkətsiz durursa, akselerometr Z oxu üzrə 9.8 m/s² göstərəcək, Linear Acceleration isə bütün oxlarda 0 göstərəcək.

Cihazda lazımi sensorun olub-olmadığını necə yoxlamaq olar?

getPackageManager().hasSystemFeature() istifadə edin müvafiq sabitlərlə: FEATURE_SENSOR_ACCELEROMETER, FEATURE_SENSOR_GYROSCOPE, FEATURE_SENSOR_PROXIMITY və başqaları. Alternativ üsul — getDefaultSensor(type) çağırmaq və nəticəni null yoxlamaq. Birinci üsul inisiallaşdırma mərhələsində yoxlama üçün daha üstündür.

Sensor dəyərləri niyə sıçrayır və onları necə hamarlaşdırmaq olar?

Sensorlardan alınan xam məlumatlar səs-küy ehtiva edir. Hamarlaşdırmaq üçün aşağı keçid (low-pass) filtri istifadə edin: newValue = alpha * rawValue + (1 — alpha) * previousValue. Alpha = 0.1–0.3 əmsalı cavab vermə qabiliyyəti və hamarlıq arasında yaxşı balans verir. Giroskop üçün sıfır dreyfini aradan qaldırmaq üçün yüksək keçid (high-pass) filtri də tətbiq olunur.

Sensorlardan fon rejimində istifadə etmək olar?

Bəli, lakin məhdudiyyətlərlə. Android 8.0-dan etibarən sensor hadisələrinin tezliyi fon tətbiqləri üçün azaldılır. Android 12-dən etibarən fonda sensorlara giriş üçün BODY_SENSORS_BACKGROUND icazəsi tələb olunur. Fon işi üçün bildirişli Foreground Service istifadə etmək tövsiyə olunur.

Nəticə

  • Sensors API — SensorManager vasitəsilə cihazın aparat sensorlarından məlumat almaq üçün vahid Android interfeysi.
  • Üç kateqoriya — Motion (akselometr, giroskop), Position (maqnitometr) və Environment (işıq, təzyiq) müxtəlif iş prinsipləri və tətbiqləri ilə.
  • Virtual sensorlar — Gravity, Linear Acceleration və Rotation Vector fiziki sensorların məlumatlarının birləşməsinə əsaslanır və aparat analoqu yoxdur.
  • Optimallaşdırma — düzgün gecikmə seçimi (SENSOR_DELAY_NORMAL, UI, GAME, FASTEST) və toplu emal enerji sərfiyyatını 60%-ə qədər azaldır.
  • Məhdudiyyətlər — Android 8+ fonda sensor tezliyini azaldır, Android 12+ fon girişi üçün BODY_SENSORS_BACKGROUND tələb edir.
  • Əsas yoxlama — dinləyicini qeydiyyatdan keçirməzdən əvvəl sensorun mövcudluğunu getDefaultSensor və ya hasSystemFeature ilə yoxlayın.
  • Səs-küyü hamarlaşdırmaq üçün low-pass filtri istifadə edin və batareyaya qənaət etmək üçün fonda dinləyicinin qeydiyyatını ləğv edin.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun