Typy czujników

W tej sekcji opisujemy osie czujników, czujniki podstawowe i czujniki złożone (aktywności, orientacji, niekalibrowane i interakcji).

Osie czujnika

Wartości zdarzeń z wielu czujników są wyrażane w określonej ramce, która jest statyczna względem urządzenia.

Osie urządzenia mobilnego

Interfejs Sensor API jest względny tylko w stosunku do naturalnej orientacji ekranu (osie nie są zamieniane, gdy zmienia się orientacja ekranu urządzenia).

Układ współrzędnych interfejsu API czujnika na urządzeniach mobilnych

Rysunek 1. Układ współrzędnych (względem urządzenia mobilnego) używany przez interfejs Sensor API

Motoryzacja – osie

W implementacjach Androida Automotive osie są zdefiniowane względem ramy nadwozia pojazdu. Początkiem układu odniesienia pojazdu jest środek tylnej osi. Układ odniesienia pojazdu jest zorientowany w taki sposób, aby:

  • Oś X jest skierowana w prawo i znajduje się w płaszczyźnie poziomej, prostopadłej do płaszczyzny symetrii pojazdu.
  • Oś Y jest skierowana do przodu i znajduje się w płaszczyźnie poziomej.
Układ współrzędnych interfejsu API czujnika dla urządzeń motoryzacyjnych

Rysunek 2. Układ współrzędnych (względem urządzenia samochodowego) używany przez interfejs Sensor API

Układ odniesienia pojazdu to prawoskrętny układ współrzędnych. Dlatego oś Z jest skierowana do góry.

Oś Z układu odniesienia jest wyrównana z grawitacją, co oznacza, że osie X i Y są poziome. W rezultacie oś Y może nie zawsze przechodzić przez przednią oś.

Czujniki podstawowe

Podstawowe typy czujników są nazwane na podstawie fizycznych czujników, które reprezentują. Te czujniki przekazują dane z jednego czujnika fizycznego (w przeciwieństwie do czujników złożonych, które generują dane na podstawie innych czujników). Przykłady podstawowych typów czujników:

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

Czujniki podstawowe nie są jednak tym samym co czujniki fizyczne, na których są oparte, i nie należy ich z nimi mylić. Dane z czujnika podstawowego nie są surowymi danymi wyjściowymi z czujnika fizycznego, ponieważ są korygowane (np. kompensacja odchylenia i kompensacja temperatury).

Na przykład w tych przypadkach charakterystyka czujnika bazowego może się różnić od charakterystyki czujnika fizycznego, na którym jest oparty:

  • Żyroskop o zakresie odchylenia 1 stopień/sekundę.
    • Po kalibracji fabrycznej, kompensacji temperatury i kompensacji odchylenia rzeczywiste odchylenie czujnika Androida zostanie zmniejszone, być może do takiego stopnia, że będzie ono na pewno mniejsze niż 0,01 stopnia na sekundę.
    • W takiej sytuacji mówimy, że odchylenie czujnika Androida jest mniejsze niż 0,01 stopnia na sekundę, mimo że w arkuszu danych bazowego czujnika podano wartość 1 stopień na sekundę.
  • Barometr o poborze mocy 100 uW.
    • Ponieważ wygenerowane dane muszą być przesyłane z układu do SoC, rzeczywisty koszt energii potrzebnej do zebrania danych z barometru czujnika Androida może być znacznie wyższy, np. 1000 uW.
    • W takiej sytuacji mówimy, że czujnik Androida zużywa 1000 uW, mimo że zużycie energii zmierzone na wyprowadzeniach układu barometru wynosi 100 uW.
  • Magnetometr, który po kalibracji zużywa 100 μW, ale podczas kalibracji zużywa więcej.
    • Procedura kalibracji może wymagać aktywowania żyroskopu, co zużywa 5000 uW, oraz uruchomienia algorytmu, co kosztuje kolejne 900 uW.
    • W takiej sytuacji mówimy, że maksymalne zużycie energii przez czujnik Androida (magnetometr) wynosi 6000 uW.
    • W takim przypadku bardziej przydatnym pomiarem jest średnie zużycie energii, które jest raportowane w statycznych charakterystykach czujnika za pomocą HAL.

Akcelerometr

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) zwraca czujnik, który nie wybudza urządzenia

Akcelerometr podaje przyspieszenie urządzenia wzdłuż 3 osi czujnika. Mierzone przyspieszenie obejmuje zarówno przyspieszenie fizyczne (zmianę prędkości), jak i grawitację. Pomiar jest zgłaszany w polach x, y i z struktury sensors_event_t.acceleration.

Wszystkie wartości są podawane w jednostkach SI (m/s²) i mierzą przyspieszenie urządzenia pomniejszone o siłę grawitacji wzdłuż 3 osi czujnika.

Przykłady:

  • Podczas swobodnego spadania norma (x, y, z) powinna być bliska 0.
  • Gdy urządzenie leży płasko na stole i jest przesuwane w prawo, wartość przyspieszenia w osi X jest dodatnia.
  • Gdy urządzenie leży płasko na stole, wartość przyspieszenia wzdłuż osi z wynosi +9,81 m/s², co odpowiada przyspieszeniu urządzenia (0 m/s²) pomniejszonemu o siłę grawitacji (-9,81 m/s²).
  • Gdy urządzenie leży płasko na stole i jest skierowane ku górze, wartość przyspieszenia jest większa niż +9,81, co odpowiada przyspieszeniu urządzenia (+A m/s²) pomniejszonemu o siłę grawitacji (-9,81 m/s²).

Odczyty są kalibrowane za pomocą:

  • Kompensacja temperatury
  • Kalibracja odchylenia online
  • Kalibracja wagi online

Kalibrację odchylenia i skali należy aktualizować tylko wtedy, gdy czujnik jest wyłączony, aby uniknąć skoków wartości podczas przesyłania strumieniowego.

Akcelerometr podaje też oczekiwaną dokładność odczytów za pomocą wartości sensors_event_t.acceleration.status. Więcej informacji o możliwych wartościach tego pola znajdziesz w stałych SensorManager SENSOR_STATUS_*.

Temperatura otoczenia

Tryb raportowania: On-change

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) zwraca czujnik, który nie wybudza urządzenia

Ten czujnik podaje temperaturę otoczenia (pomieszczenia) w stopniach Celsjusza.

Czujnik pola magnetycznego

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) zwraca czujnik, który nie wybudza urządzenia

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

Czujnik pola magnetycznego (zwany też magnetometrem) podaje informacje o polu magnetycznym otoczenia mierzone wzdłuż 3 osi czujnika.

Pomiar jest podawany w polach x, y i z elementu sensors_event_t.magnetic, a wszystkie wartości są wyrażone w mikroteslach (uT).

Magnetometr podaje też oczekiwaną dokładność odczytów za pomocą wartości sensors_event_t.magnetic.status. Więcej informacji o możliwych wartościach tego pola znajdziesz w stałych SensorManager SENSOR_STATUS_*.

Odczyty są kalibrowane za pomocą:

  • Kompensacja temperatury
  • Fabryczna (lub internetowa) kalibracja z użyciem miękkiego żelaza
  • Kalibracja online twardego żelaza

Żyroskop

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) zwraca czujnik, który nie wybudza urządzenia

Żyroskop podaje szybkość obrotu urządzenia wokół 3 osi czujnika.

Obrót jest dodatni w kierunku przeciwnym do ruchu wskazówek zegara (reguła prawej dłoni). Oznacza to, że obserwator patrzący na urządzenie umieszczone w punkcie początkowym z dowolnego miejsca na osi x, y lub z wartością z   – z ujemną wartością z, zgłosiłby obrót w kierunku dodatnim, gdyby urządzenie obracało się w kierunku przeciwnym do ruchu wskazówek zegara. Pamiętaj, że jest to standardowa definicja matematyczna obrotu w kierunku dodatnim, która nie jest zgodna z definicją przechyłu w przemyśle lotniczym.

Pomiar jest podawany w polach x, y i z elementu sensors_event_t.gyro, a wszystkie wartości są wyrażone w radianach na sekundę (rad/s).

Odczyty są kalibrowane za pomocą:

  • Kompensacja temperatury
  • Wynagrodzenie na poziomie fabrycznym (lub online)
  • Kalibracja odchyleń online (aby usunąć dryf)

Żyroskop podaje też oczekiwaną dokładność odczytów za pomocą parametru sensors_event_t.gyro.status. Więcej informacji o możliwych wartościach tego pola znajdziesz w stałych SensorManager SENSOR_STATUS_*.

Żyroskopu nie można emulować na podstawie magnetometrów i akcelerometrów, ponieważ spowodowałoby to zmniejszenie lokalnej spójności i reaktywności. Musi być oparty na zwykłym chipie żyroskopowym.

Tętno

Tryb raportowania: On-change

getDefaultSensor(SENSOR_TYPE_HEART_RATE) zwraca czujnik, który nie wybudza urządzenia

Czujnik tętna podaje aktualne tętno osoby dotykającej urządzenia.

Aktualne tętno w uderzeniach na minutę (uderz./min) jest podawane w sensors_event_t.heart_rate.bpm, a stan czujnika – w sensors_event_t.heart_rate.status. Więcej informacji o możliwych wartościach tego pola znajdziesz w stałych SensorManager SENSOR_STATUS_*. W szczególności podczas pierwszej aktywacji, o ile nie wiadomo, że urządzenie nie jest na ciele, pole stanu pierwszego zdarzenia musi mieć wartość SENSOR_STATUS_UNRELIABLE. Ponieważ ten czujnik jest oparty na zmianach, zdarzenia są generowane tylko wtedy, gdy od ostatniego zdarzenia zmieni się wartość heart_rate.bpm lub heart_rate.status. Zdarzenia są generowane nie częściej niż co sampling_period.

Platforma automatycznie zastępuje sensor_t.requiredPermission odpowiednimi uprawnieniami, aby zachować zgodność. Framework używa uprawnienia SENSOR_PERMISSION_READ_HEART_RATE w przypadku Androida 16 i nowszych wersji oraz uprawnienia SENSOR_PERMISSION_BODY_SENSORS w przypadku Androida 15 i starszych wersji.

Jasne

Tryb raportowania: Po zmianie

getDefaultSensor(SENSOR_TYPE_LIGHT) zwraca czujnik, który nie wybudza urządzenia

Czujnik światła podaje aktualne oświetlenie w jednostkach SI (luksach).

Pomiar jest raportowany w sensors_event_t.light.

Bliskość

Tryb raportowania: Po zmianie

Zwykle definiowany jako czujnik wybudzania

getDefaultSensor(SENSOR_TYPE_PROXIMITY) zwraca czujnik wybudzania

Czujnik zbliżeniowy podaje odległość od czujnika do najbliższej widocznej powierzchni.

Do wersji Androida 4.4 czujniki zbliżeniowe zawsze były czujnikami wybudzającymi, które wybudzały układ SoC po wykryciu zmiany zbliżenia. W przypadku Androida 4.4 i nowszych zalecamy najpierw wdrożyć wersję tego czujnika, która wybudza urządzenie, ponieważ jest ona używana do włączania i wyłączania ekranu podczas rozmów telefonicznych.

Pomiar jest podawany w centymetrach w sensors_event_t.distance. Pamiętaj, że niektóre czujniki zbliżeniowe obsługują tylko pomiar binarny „blisko” lub „daleko”. W tym przypadku czujnik zgłasza wartość sensor_t.maxRange w stanie „daleko” i wartość mniejszą niż sensor_t.maxRange w stanie „blisko”.

Ciśnienie

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_PRESSURE) zwraca czujnik, który nie wybudza urządzenia

Czujnik ciśnienia (zwany też barometrem) podaje ciśnienie atmosferyczne w hektopaskalach (hPa).

Odczyty są kalibrowane za pomocą

  • Kompensacja temperatury
  • Kalibracja odchylenia fabrycznego
  • Kalibracja wagi w fabryce

Barometr jest często używany do szacowania zmian wysokości. Aby oszacować wysokość bezwzględną, należy użyć ciśnienia na poziomie morza (zmieniającego się w zależności od pogody) jako wartości odniesienia.

Wilgotność względna

Tryb raportowania: Po zmianie

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) zwraca czujnik, który nie wybudza urządzenia

Czujnik wilgotności względnej mierzy względną wilgotność powietrza w otoczeniu i zwraca wartość w procentach.

Złożone typy czujników

Czujnik złożony generuje dane, przetwarzając lub łącząc dane z jednego lub kilku czujników fizycznych. (Każdy czujnik, który nie jest czujnikiem podstawowym, nazywa się czujnikiem złożonym). Przykłady czujników złożonych:

Podobnie jak w przypadku czujników podstawowych, charakterystyka czujników złożonych wynika z charakterystyki danych końcowych. Na przykład zużycie energii przez wektor rotacji gry jest prawdopodobnie równe sumie zużycia energii przez układ akcelerometru, układ żyroskopu, układ przetwarzający dane i magistrale przesyłające dane. Innym przykładem jest dryf wektora rotacji gry, który zależy w równym stopniu od jakości algorytmu kalibracji, jak i od charakterystyki fizycznej czujnika.

W tabeli poniżej znajdziesz listę dostępnych typów czujników złożonych. Każdy czujnik złożony korzysta z danych z jednego lub kilku czujników fizycznych. Unikaj wybierania innych fizycznych czujników bazowych do przybliżania wyników, ponieważ zapewniają one użytkownikom niską jakość usługi.

Typ czujnika Kategoria Czujniki fizyczne Tryb raportowania

Wektor rotacji gry

Postawa

Akcelerometr, żyroskop, NIE WOLNO UŻYWAĆ magnetometru

Ciągły

Wektor obrotu geomagnetycznego Czujnik o niskim poborze mocy

Postawa

Akcelerometr, magnetometr, NIE UŻYWAJ żyroskopu

Ciągły

Gest szybkiego podglądu Czujnik o niskim poborze mocy

Interakcja

Niezdefiniowana

One-shot

Grawitacja

Postawa

akcelerometr, żyroskop (jeśli jest dostępny) lub magnetometr (jeśli żyroskop nie jest dostępny);

Ciągły

Żyroskop niekalibrowany

Nieskalibrowany

Żyroskop

Ciągły

Przyspieszenie liniowe

Aktywność

akcelerometr, żyroskop (jeśli jest dostępny) lub magnetometr (jeśli nie ma żyroskopu);

Ciągły

Pole magnetyczne nie jest skalibrowane

Nieskalibrowany

Magnetometr

Ciągły

Orientacja (wycofana)

Postawa

akcelerometr, magnetometr, żyroskop (jeśli jest dostępny);

Ciągły

Gest podniesienia Czujnik o niskim poborze mocy

Interakcja

Niezdefiniowana

One-shot

Wektor rotacji

Postawa

akcelerometr, magnetometr, żyroskop (jeśli jest dostępny);

Ciągły

Znaczący ruch Czujnik o niskim poborze mocy

Aktywność

akcelerometr (lub inny czujnik o bardzo niskim poborze mocy);

One-shot

Licznik kroków Czujnik o niskim poborze mocy

Aktywność

Akcelerometr

Przy zmianie

Detektor kroków Czujnik o niskim poborze mocy

Aktywność

Akcelerometr

Specjalny

Czujnik nachylenia Czujnik o niskim poborze mocy

Aktywność

Akcelerometr

Specjalny

Gest wybudzania Czujnik o niskim poborze mocy

Interakcja

Niezdefiniowana

One-shot

Czujnik o niskim poborze mocy = Czujnik o niskim poborze mocy

Złożone czujniki aktywności

Przyspieszenie liniowe

Czujniki fizyczne: akcelerometr i (jeśli jest) żyroskop (lub magnetometr, jeśli nie ma żyroskopu)

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) zwraca czujnik, który nie wybudza urządzenia

Czujnik przyspieszenia liniowego podaje przyspieszenie liniowe urządzenia w ramce czujnika, z wyłączeniem grawitacji.

Dane wyjściowe to w założeniu dane wyjściowe z akcelerometru pomniejszone o dane wyjściowe z czujnika grawitacji. Jest on podawany w m/s² w polach x, y i z w sensors_event_t.acceleration.

Gdy urządzenie jest nieruchome, odczyty na wszystkich osiach powinny być bliskie 0.

Jeśli urządzenie ma żyroskop, czujnik przyspieszenia liniowego musi używać żyroskopu i akcelerometru jako danych wejściowych.

Jeśli urządzenie nie ma żyroskopu, czujnik przyspieszenia liniowego musi korzystać z akcelerometru i magnetometru jako danych wejściowych.

Znaczący ruch

Czujnik fizyczny: akcelerometr (lub inny, o ile zużywa mało energii)

Tryb raportowania: One-shot

Niskie zużycie energii

Zaimplementuj tylko wersję tego czujnika, która wybudza urządzenie.

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION) zwraca czujnik wybudzania

Znaczny detektor ruchu jest wywoływany, gdy wykryje znaczący ruch, czyli ruch, który może spowodować zmianę lokalizacji użytkownika.

Przykłady takich istotnych ruchów:

  • pieszo lub rowerem,
  • Siedzenie w poruszającym się samochodzie, autokarze lub pociągu

Przykłady sytuacji, które nie powodują znaczącego ruchu:

  • Telefon w kieszeni, a osoba się nie porusza
  • Telefon leży na stole, który lekko drży z powodu ruchu ulicznego lub pralki w pobliżu.

W dużym uproszczeniu czujnik wykrywający znaczny ruch służy do zmniejszania zużycia energii podczas określania lokalizacji. Gdy algorytmy lokalizacji wykryją, że urządzenie jest nieruchome, mogą przejść w tryb niskiego zużycia energii, w którym do wybudzenia urządzenia, gdy użytkownik zmienia lokalizację, potrzebny jest znaczny ruch.

Ten czujnik musi być energooszczędny. W tym trybie zużycie energii jest mniejsze, ale może to powodować niewielką liczbę wyników fałszywie negatywnych. Dzieje się tak z kilku powodów:

  • Celem tego czujnika jest oszczędzanie energii.
  • Wywoływanie zdarzenia, gdy użytkownik się nie porusza (fałszywie dodatni wynik), jest kosztowne pod względem zużycia energii, więc należy go unikać.
  • Nieuruchomienie zdarzenia, gdy użytkownik się porusza (fałszywie negatywny wynik), jest dopuszczalne, o ile nie powtarza się wielokrotnie. Jeśli użytkownik chodził przez 10 sekund, brak wywołania zdarzenia w tym czasie jest niedopuszczalny.

Każde zdarzenie czujnika jest zgłaszane w 1sensors_event_t.data[0].

Detektor kroków

Podstawowy czujnik fizyczny: akcelerometr (i ewentualnie inne czujniki o niskim poborze mocy)

Tryb raportowania: Specjalny (jedno zdarzenie na wykonany krok)

Niskie zużycie energii

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR) zwraca czujnik, który nie wybudza urządzenia

Detektor kroków generuje zdarzenie za każdym razem, gdy użytkownik zrobi krok.

Sygnatura czasowa zdarzenia sensors_event_t.timestamp odpowiada momentowi, w którym stopa dotknęła podłoża, co spowodowało dużą zmianę przyspieszenia.

W porównaniu z licznikiem kroków detektor kroków powinien mieć mniejsze opóźnienie (poniżej 2 sekund). Zarówno detektor kroków, jak i licznik kroków wykrywają, kiedy użytkownik chodzi, biega i wchodzi po schodach. Nie powinny one być aktywowane, gdy użytkownik jedzie na rowerze, prowadzi samochód lub korzysta z innych pojazdów.

Ten czujnik musi być energooszczędny. Oznacza to, że jeśli wykrywanie kroków nie może być realizowane sprzętowo, ten czujnik nie powinien być zdefiniowany. W szczególności, gdy detektor kroków jest aktywny, a akcelerometr nie, tylko kroki powinny wywoływać przerwania (a nie każde odczyty akcelerometru).

sampling_period_ns nie ma wpływu na detektory kroków.

Każde zdarzenie czujnika jest zgłaszane w 1sensors_event_t.data[0].

Licznik kroków

Podstawowy czujnik fizyczny: akcelerometr (i ewentualnie inne czujniki o niskim poborze mocy)

Tryb raportowania: Po zmianie

Niskie zużycie energii

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) zwraca czujnik, który nie wybudza urządzenia

Licznik kroków podaje liczbę kroków wykonanych przez użytkownika od ostatniego ponownego uruchomienia urządzenia, gdy był aktywny.

Pomiar jest raportowany jako uint64_tsensors_event_t.step_counter i resetowany do zera tylko po ponownym uruchomieniu systemu.

Sygnatura czasowa zdarzenia jest ustawiana na czas wykonania ostatniego kroku tego zdarzenia.

Znaczenie czasu kroku znajdziesz w opisie typu czujnika wykrywacz kroków.

W porównaniu z detektorem kroków licznik kroków może mieć większe opóźnienie (do 10 sekund). Dzięki temu opóźnieniu czujnik ten charakteryzuje się wysoką dokładnością. Liczba kroków po całym dniu pomiarów powinna mieścić się w zakresie 10% rzeczywistej liczby kroków. Zarówno detektor kroków, jak i licznik kroków wykrywają, kiedy użytkownik chodzi, biega i wchodzi po schodach. Nie powinny się one włączać, gdy użytkownik jeździ na rowerze, prowadzi samochód lub korzysta z innych pojazdów.

Sprzęt musi zapewniać, że wewnętrzna liczba kroków nigdy nie przekroczy limitu. Minimalny rozmiar wewnętrznego licznika sprzętowego musi wynosić 16 bitów. W przypadku zbliżającego się przepełnienia (maksymalnie co ok. 2^16 kroków) system SoC może zostać wybudzony, aby sterownik mógł przeprowadzić konserwację licznika.

Zgodnie z informacjami w sekcji Interakcja, podczas działania tego czujnika nie może on zakłócać pracy innych czujników, w szczególności akcelerometru, który może być w użyciu.

Jeśli dane urządzenie nie obsługuje tych trybów działania, HAL nie może zgłaszać tego typu czujnika. Oznacza to, że nie można „emulować” tego czujnika w HAL.

Ten czujnik musi być energooszczędny. Oznacza to, że jeśli wykrywanie kroków nie może być realizowane sprzętowo, ten czujnik nie powinien być zdefiniowany. W szczególności, gdy licznik kroków jest aktywny, a akcelerometr nie, tylko kroki powinny wywoływać przerwania (a nie dane z akcelerometru).

Czujnik przechyłu

Podstawowy czujnik fizyczny: akcelerometr (i ewentualnie inne czujniki o niskim poborze mocy)

Tryb raportowania: Specjalny

Niskie zużycie energii

Zaimplementuj tylko wersję tego czujnika, która wybudza urządzenie.

getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR) zwraca czujnik wybudzania

Detektor pochylenia generuje zdarzenie za każdym razem, gdy wykryje pochylenie.

Zdarzenie przechylenia jest definiowane przez zmianę kierunku średniej z 2-sekundowego okna grawitacji o co najmniej 35 stopni od momentu aktywacji lub ostatniego zdarzenia wygenerowanego przez czujnik. Algorytm wygląda tak:

  • reference_estimated_gravity = średnia pomiarów akcelerometru w pierwszej sekundzie po aktywacji lub szacunkowe przyspieszenie grawitacyjne w momencie wygenerowania ostatniego zdarzenia związanego z przechyleniem.
  • current_estimated_gravity = średnia pomiarów akcelerometru z ostatnich 2 sekund.
  • Wywołuj, gdy angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees

Duże przyspieszenia bez zmiany orientacji telefonu nie powinny wywoływać zdarzenia przechylenia. Na przykład gwałtowny skręt lub silne przyspieszenie podczas jazdy samochodem nie powinny wywoływać zdarzenia przechylenia, nawet jeśli kąt średniego przyspieszenia może się różnić o ponad 35 stopni. Zwykle ten czujnik jest implementowany tylko za pomocą akcelerometru. Można też używać innych czujników, jeśli nie zwiększają one znacząco zużycia energii. Jest to czujnik o niskim poborze mocy, który powinien umożliwiać przejście układu SoC w tryb zawieszenia. Nie emuluj tego czujnika w HAL. Każde zdarzenie czujnika zgłasza 1sensors_event_t.data[0].

Złożone czujniki położenia

Wektor rotacji

Czujniki fizyczne: akcelerometr, magnetometr i żyroskop

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) zwraca czujnik niewybudzający

Czujnik wektora rotacji podaje orientację urządzenia względem układu współrzędnych wschód-północ-góra. Zwykle uzyskuje się ją przez integrację odczytów akcelerometru, żyroskopu i magnetometru. Układ współrzędnych East-North-Up jest zdefiniowany jako bezpośrednia baza ortonormalna, w której:

  • X wskazuje kierunek wschodni i jest styczny do podłoża.
  • Oś Y jest skierowana na północ i jest styczna do podłoża.
  • Oś Z jest skierowana w górę i prostopadła do podłoża.

Orientacja telefonu jest reprezentowana przez obrót niezbędny do wyrównania współrzędnych wschodnich, północnych i w górę ze współrzędnymi telefonu. Oznacza to, że zastosowanie obrotu do układu współrzędnych świata (X,Y,Z) spowoduje jego wyrównanie z układem współrzędnych telefonu (x,y,z).

Obrót można traktować jako obracanie telefonu o kąt theta wokół osi rot_axis, aby przejść od orientacji urządzenia odniesienia (wyrównanej do kierunków wschód–północ–góra) do bieżącej orientacji urządzenia. Rotacja jest zakodowana jako 4 bezjednostkowe komponenty x, y, z, w kwaternionu jednostkowego:

  • sensors_event_t.data[0] = rot_axis.x*sin(theta/2)
  • sensors_event_t.data[1] = rot_axis.y*sin(theta/2)
  • sensors_event_t.data[2] = rot_axis.z*sin(theta/2)
  • sensors_event_t.data[3] = cos(theta/2)

Gdzie:

  • Pola x, y i z w rot_axis to współrzędne wektora jednostkowego o kierunku wschód-północ-góra, który reprezentuje oś obrotu.
  • theta to kąt obrotu.

Kwaternion jest kwaternionem jednostkowym: musi mieć normę 1. Jeśli tego nie zrobisz, klient może zachowywać się nieprzewidywalnie.

Ten czujnik podaje też szacunkową dokładność kierunku:

sensors_event_t.data[4] = estimated_accuracy (w radianach)

Błąd kierunku musi być mniejszy niż estimated_accuracy w 95% przypadków. Ten czujnik musi używać żyroskopu jako głównego źródła danych o zmianie orientacji.

Ten czujnik wykorzystuje też dane z akcelerometru i magnetometru, aby kompensować dryf żyroskopu. Nie można go zaimplementować, używając tylko akcelerometru i magnetometru.

Wektor rotacji gry

Czujniki fizyczne: akcelerometr i żyroskop (bez magnetometru)

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) zwraca czujnik, który nie wybudza urządzenia

Czujnik wektora rotacji gry jest podobny do czujnika wektora rotacji, ale nie korzysta z pola geomagnetycznego. Dlatego oś Y nie jest skierowana na północ, ale w innym kierunku. Odchylenie od tego punktu odniesienia może być tego samego rzędu co odchylenie żyroskopu wokół osi Z.

Więcej informacji o ustawianiu wartości sensors_event_t.data[0-3] znajdziesz w artykule o wektorze rotacji. Ten czujnik nie podaje szacunkowej dokładności kierunku: pole sensors_event_t.data[4] jest zarezerwowane i powinno mieć wartość 0.

W idealnym przypadku telefon obrócony i przywrócony do tego samego położenia w świecie rzeczywistym powinien zgłaszać ten sam wektor rotacji gry.

Ten czujnik musi być oparty na żyroskopie i akcelerometrze. Nie może używać magnetometru jako danych wejściowych, z wyjątkiem pośredniego szacowania odchylenia żyroskopu.

Grawitacja

Czujniki fizyczne: akcelerometr i (jeśli jest) żyroskop (lub magnetometr, jeśli nie ma żyroskopu)

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_GRAVITY) zwraca czujnik, który nie wybudza urządzenia

Czujnik grawitacji raportuje kierunek i wartość siły grawitacji w układzie współrzędnych urządzenia.

Składowe wektora grawitacji są podawane w m/s² w polach x, y i z struktury sensors_event_t.acceleration.

Gdy urządzenie jest w spoczynku, dane wyjściowe czujnika grawitacji powinny być identyczne z danymi akcelerometru. Na Ziemi wynosi ona około 9, 8 m/s².

Jeśli urządzenie ma żyroskop, czujnik grawitacji musi używać żyroskopu i akcelerometru jako danych wejściowych.

Jeśli urządzenie nie ma żyroskopu, czujnik grawitacji musi korzystać z akcelerometru i magnetometru jako danych wejściowych.

Wektor rotacji geomagnetycznej

Czujniki fizyczne: akcelerometr i magnetometr (bez żyroskopu)

Tryb raportowania: Ciągły

Niskie zużycie energii

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) zwraca czujnik, który nie wybudza urządzenia

Wektor rotacji geomagnetycznej jest podobny do czujnika wektora rotacji, ale korzysta z magnetometru i nie ma żyroskopu.

Ten czujnik musi być oparty na magnetometrze. Nie można go zaimplementować za pomocą żyroskopu, a dane wejściowe z żyroskopu nie mogą być używane przez ten czujnik.

Więcej informacji o ustawianiu wartości sensors_event_t.data[0-4] znajdziesz w artykule o wektorze rotacji.

Podobnie jak w przypadku czujnika wektora rotacji błąd kierunku musi być mniejszy niż szacowana dokładność (sensors_event_t.data[4]) w 95% przypadków.

Ten czujnik musi zużywać mało energii, więc musi być zaimplementowany w sprzęcie.

Orientacja (wycofana)

Czujniki fizyczne: akcelerometr, magnetometr i (jeśli jest) żyroskop

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_ORIENTATION) zwraca czujnik, który nie wybudza urządzenia

Uwaga: jest to starszy typ czujnika, który został wycofany z pakietu Android SDK. Został on zastąpiony przez czujnik wektora rotacji, który jest dokładniej zdefiniowany. W miarę możliwości używaj czujnika wektora rotacji zamiast czujnika orientacji.

Czujnik orientacji podaje położenie urządzenia. Pomiary są podawane w stopniach w polach x, y i z sensors_event_t.orientation:

  • sensors_event_t.orientation.x: azymut, czyli kąt między kierunkiem północy magnetycznej a osią Y wokół osi Z (0<=azimuth<360). 0=północ, 90=wschód, 180=południe, 270=zachód.
  • sensors_event_t.orientation.y: pochylenie, obrót wokół osi X (-180<=pitch<=180), z wartościami dodatnimi, gdy oś Z przesuwa się w kierunku osi Y.
  • sensors_event_t.orientation.z: przechylenie, obrót wokół osi Y (-90<=roll<=90), z wartościami dodatnimi, gdy oś X przesuwa się w kierunku osi Z.

Pamiętaj, że z przyczyn historycznych kąt przechyłu jest dodatni w kierunku zgodnym z ruchem wskazówek zegara. (Matematycznie rzecz biorąc, powinna być dodatnia w kierunku przeciwnym do ruchu wskazówek zegara):

Ilustracja orientacji względem urządzenia

Rysunek 3. Orientacja względem urządzenia

Ta definicja różni się od odchylenia, pochylenia i przechylenia używanych w lotnictwie, gdzie oś X przebiega wzdłuż dłuższego boku samolotu (od ogona do nosa).

Czujnik orientacji podaje też oczekiwaną dokładność odczytów za pomocą wartości sensors_event_t.orientation.status. Więcej informacji o możliwych wartościach tego pola znajdziesz w stałych SensorManager SENSOR_STATUS_*.

Nieskalibrowane czujniki

Nie skalibrowane czujniki dostarczają więcej surowych wyników i mogą zawierać pewne odchylenia, ale także mniej „skoków” wynikających z korekt zastosowanych w ramach kalibracji. Niektóre aplikacje mogą preferować te niekalibrowane wyniki, ponieważ są one płynniejsze i bardziej wiarygodne. Jeśli na przykład aplikacja próbuje przeprowadzić własne łączenie danych z czujników, wprowadzenie kalibracji może zniekształcić wyniki.

Akcelerometr bez kalibracji

Podstawowy czujnik fizyczny: akcelerometr

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) zwraca czujnik, który nie wybudza urządzenia

Nie skalibrowany akcelerometr podaje przyspieszenie urządzenia wzdłuż 3 osi czujnika bez korekty odchylenia (do nie skalibrowanych pomiarów stosowane są odchylenie fabryczne i kompensacja temperatury) oraz szacunkowe odchylenie. Wszystkie wartości są podawane w jednostkach SI (m/s²) i znajdują się w polach:sensors_event_t.uncalibrated_accelerometer

  • x_uncalib: przyspieszenie (bez kompensacji odchylenia) wzdłuż osi X
  • y_uncalib: przyspieszenie (bez kompensacji odchylenia) wzdłuż osi Y
  • z_uncalib: przyspieszenie (bez kompensacji odchylenia) wzdłuż osi Z
  • x_bias: szacowane odchylenie wzdłuż osi X
  • y_bias: szacowane odchylenie wzdłuż osi Y
  • z_bias: szacowane odchylenie wzdłuż osi Z

Żyroskop bez kalibracji

Czujnik fizyczny: żyroskop

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) zwraca czujnik, który nie wybudza urządzenia

Nie skalibrowany żyroskop podaje szybkość obrotu wokół osi czujnika bez kompensacji odchylenia, a także szacunkowe odchylenie. Wszystkie wartości są podawane w radianach na sekundę i znajdują się w polach sensors_event_t.uncalibrated_gyro:

  • x_uncalib: prędkość kątowa (bez kompensacji dryfu) wokół osi X
  • y_uncalib: prędkość kątowa (bez kompensacji dryfu) wokół osi Y
  • z_uncalib: prędkość kątowa (bez kompensacji dryfu) wokół osi Z
  • x_bias: szacunkowe odchylenie wokół osi X
  • y_bias: szacunkowe odchylenie wokół osi Y
  • z_bias: szacunkowe odchylenie wokół osi Z

Teoretycznie niekalibrowany pomiar to suma skalibrowanego pomiaru i oszacowania odchylenia: _uncalibrated = _calibrated + _bias.

Wartości x_bias, y_biasz_bias powinny się zmieniać od razu po zmianie szacunkowej wartości odchylenia, a przez resztę czasu powinny być stabilne.

Szczegółowe informacje o używanym układzie współrzędnych znajdziesz w definicji czujnika żyroskopu.

Do pomiarów należy zastosować kalibrację fabryczną i kompensację temperatury. Musi też być zaimplementowane szacowanie dryfu żyroskopu, aby można było podawać rozsądne szacunki w przypadku x_bias, y_biasz_bias. Jeśli implementacja nie jest w stanie oszacować dryfu, tego czujnika nie można zaimplementować.

Jeśli ten czujnik jest obecny, musi być też obecny odpowiedni czujnik żyroskopowy, a oba czujniki muszą mieć te same wartości sensor_t.namesensor_t.vendor.

Pole magnetyczne (nieskalibrowane)

Podstawowy czujnik fizyczny: magnetometr

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) zwraca czujnik, który nie wybudza urządzenia

Nieskalibrowany czujnik pola magnetycznego raportuje otaczające pole magnetyczne wraz z oszacowaniem kalibracji twardego żelaza. Wszystkie wartości są podawane w mikroteslach (uT) i wyświetlane w polach sensors_event_t.uncalibrated_magnetic:

  • x_uncalib: pole magnetyczne (bez kompensacji twardego żelaza) wzdłuż osi X
  • y_uncalib: pole magnetyczne (bez kompensacji twardego żelaza) wzdłuż osi Y
  • z_uncalib: pole magnetyczne (bez kompensacji twardego żelaza) wzdłuż osi Z
  • x_bias: szacowane odchylenie twardego żelaza wzdłuż osi X
  • y_bias: szacowane odchylenie twardego żelaza wzdłuż osi Y
  • z_bias: szacowane odchylenie twardego żelaza wzdłuż osi Z

Teoretycznie niekalibrowany pomiar to suma skalibrowanego pomiaru i oszacowania odchylenia: _uncalibrated = _calibrated + _bias.

Nie skalibrowany magnetometr umożliwia algorytmom wyższego poziomu obsługę nieprawidłowych szacunków twardego żelaza. Wartości x_bias, y_biasz_bias powinny gwałtownie wzrosnąć, gdy tylko zmieni się szacunkowa wartość twardego żelaza, a przez resztę czasu powinny być stabilne.

Do pomiarów należy zastosować kalibrację z użyciem miękkiego żelaza i kompensację temperatury. Należy też zaimplementować szacowanie twardego żelaza, aby można było zgłaszać rozsądne szacunki w polach x_bias, y_biasz_bias. Jeśli implementacja nie jest w stanie oszacować odchylenia, nie należy implementować tego czujnika.

Jeśli ten czujnik jest obecny, musi być też obecny odpowiedni czujnik pola magnetycznego, a oba czujniki muszą mieć te same wartości sensor_t.namesensor_t.vendor.

Kąt zawiasu

Tryb raportowania: Po zmianie

getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) zwraca czujnik wybudzania

Czujnik kąta zawiasu mierzy kąt w stopniach między dwoma integralnymi częściami urządzenia. Ruch zawiasu mierzony przez ten typ czujnika powinien zmieniać sposób, w jaki użytkownik może korzystać z urządzenia, np. poprzez rozkładanie lub odsłanianie wyświetlacza.

Złożone czujniki interakcji

Niektóre czujniki są używane głównie do wykrywania interakcji z użytkownikiem. Nie określamy, w jaki sposób te czujniki mają być wdrażane, ale muszą one zużywać mało energii. Za weryfikację ich jakości pod kątem wygody użytkownika odpowiada producent urządzenia.

Gest wybudzania

Czujniki fizyczne: nieokreślone (dowolne urządzenie o niskim poborze mocy)

Tryb raportowania: One-shot

Niskie zużycie energii

Zaimplementuj tylko wersję tego czujnika, która wybudza urządzenie.

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) zwraca czujnik wybudzania

Czujnik gestów wybudzających umożliwia wybudzanie urządzenia na podstawie określonego ruchu. Gdy ten czujnik zostanie aktywowany, urządzenie zachowuje się tak, jakby naciśnięto przycisk zasilania, czyli włącza ekran. Użytkownik może wyłączyć to działanie (włączanie ekranu po aktywacji tego czujnika) w ustawieniach urządzenia. Zmiany ustawień nie wpływają na działanie czujnika, a jedynie na to, czy po jego aktywacji system włączy ekran. Rzeczywisty gest, który ma zostać wykryty, nie jest określony i może zostać wybrany przez producenta urządzenia.

Ten czujnik musi zużywać mało energii, ponieważ prawdopodobnie będzie aktywny przez całą dobę.

Każde zdarzenie czujnika jest zgłaszane w 1sensors_event_t.data[0].

Gest podnoszenia

Czujniki fizyczne: nieokreślone (dowolne urządzenie o niskim poborze mocy)

Tryb raportowania: One-shot

Niskie zużycie energii

Zaimplementuj tylko wersję tego czujnika, która wybudza urządzenie.

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) zwraca czujnik wybudzania

Czujnik gestu podniesienia aktywuje się, gdy urządzenie zostanie podniesione, niezależnie od tego, gdzie było wcześniej (na biurku, w kieszeni lub torbie).

Każde zdarzenie czujnika jest zgłaszane w 1sensors_event_t.data[0].

Gest spojrzenia

Czujniki fizyczne: nieokreślone (dowolne urządzenie o niskim poborze mocy)

Tryb raportowania: One-shot

Niskie zużycie energii

Zaimplementuj tylko wersję tego czujnika, która wybudza urządzenie.

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) zwraca czujnik wybudzania

Czujnik gestów umożliwia krótkie włączenie ekranu, aby użytkownik mógł szybko sprawdzić wyświetlane na nim treści na podstawie określonego ruchu. Gdy ten czujnik zostanie aktywowany, urządzenie na chwilę włączy ekran, aby użytkownik mógł sprawdzić powiadomienia lub inne treści, gdy urządzenie jest zablokowane i nie można z nim wchodzić w interakcję (tryb uśpienia). Następnie ekran ponownie się wyłączy. To działanie (krótkie włączenie ekranu po aktywacji czujnika) może zostać wyłączone przez użytkownika w ustawieniach urządzenia. Zmiany ustawień nie wpływają na działanie czujnika. Zmieniają tylko to, czy po jego aktywacji ekran na chwilę się włączy. Rzeczywisty gest, który ma zostać wykryty, nie jest określony i może zostać wybrany przez producenta urządzenia.

Ten czujnik musi zużywać mało energii, ponieważ prawdopodobnie będzie aktywny przez całą dobę. Każde zdarzenie czujnika zgłasza 1sensors_event_t.data[0].

Czujniki IMU o ograniczonej liczbie osi

Dostępne od Androida 13 czujniki IMU o ograniczonej liczbie osi to czujniki, które obsługują przypadki użycia, w których nie są dostępne wszystkie 3 osie (x, y, z). Standardowe typy IMU w Androidzie (np. SENSOR_TYPE_ACCELEROMETER SENSOR_TYPE_GYROSCOPE) zakładają, że obsługiwane są wszystkie 3 osie. Jednak nie wszystkie formaty i urządzenia obsługują 3-osiowe akcelerometry i 3-osiowe żyroskopy.

Akcelerometr z ograniczoną liczbą osi

Czujniki fizyczne: akcelerometr

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES) zwraca czujnik, który nie wybudza urządzenia

Czujnik akcelerometru z ograniczonymi osiami jest odpowiednikiem czujnika TYPE_ACCELEROMETER, ale obsługuje przypadki, w których 1 lub 2 osie nie są obsługiwane.

Ostatnie 3 wartości zdarzenia czujnika zgłoszone przez czujnik wskazują, czy obsługiwane są wartości przyspieszenia dla osi X, Y i Z. Wartość 1.0 oznacza, że oś jest obsługiwana, a wartość 0 oznacza, że nie jest obsługiwana. Producenci urządzeń określają obsługiwane osie w momencie tworzenia urządzenia, a wartości nie zmieniają się w czasie działania.

Producenci urządzeń muszą ustawić wartości przyspieszenia dla nieużywanych osi na 0 zamiast pozostawiać je niezdefiniowane.

Żyroskop z ograniczoną liczbą osi

Czujniki fizyczne: żyroskop

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES) zwraca czujnik, który nie wybudza urządzenia

Żyroskop z ograniczoną liczbą osi jest odpowiednikiem TYPE_GYROSCOPE, ale obsługuje przypadki, w których jedna lub dwie osie nie są obsługiwane.

Ostatnie 3 wartości zdarzeń czujnika zgłoszone przez czujnik określają, czy obsługiwana jest wartość prędkości kątowej dla osi x, y i z. Wartość 1.0 oznacza, że oś jest obsługiwana, a wartość 0 oznacza, że nie jest obsługiwana. Producenci urządzeń określają obsługiwane osie w momencie tworzenia urządzenia, a wartości nie zmieniają się w czasie działania.

Producenci urządzeń muszą ustawić wartości prędkości kątowej dla nieużywanych osi na 0.

Akcelerometr – ograniczone osie bez kalibracji

Czujniki fizyczne: akcelerometr

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED) zwraca czujnik, który nie wybudza urządzenia

Akcelerometr z ograniczoną liczbą osi bez kalibracji jest odpowiednikiem czujnika TYPE_ACCELEROMETER_UNCALIBRATED, ale obsługuje przypadki, w których 1 lub 2 osie nie są obsługiwane.

Ostatnie 3 wartości zdarzenia czujnika zgłoszone przez czujnik wskazują, czy obsługiwane są wartości przyspieszenia i odchylenia dla osi x, y i z. Wartość 1.0 oznacza, że oś jest obsługiwana, a wartość 0 oznacza, że nie jest. Producenci urządzeń określają obsługiwane osie w momencie tworzenia urządzenia, a wartości nie zmieniają się w czasie działania.

Producenci urządzeń muszą ustawić wartości przyspieszenia i odchylenia dla nieużywanych osi na 0.

Żyroskop – ograniczone osie bez kalibracji

Czujniki fizyczne: żyroskop

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED) zwraca czujnik, który nie wybudza urządzenia

Nie skalibrowany czujnik żyroskopu o ograniczonej liczbie osi jest odpowiednikiem czujnika TYPE_GYROSCOPE_UNCALIBRATED, ale obsługuje przypadki, w których 1 lub 2 osie nie są obsługiwane.

Ostatnie 3 wartości zdarzenia czujnika zgłoszone przez czujnik określają, czy obsługiwane są wartości prędkości kątowej i dryfu dla osi x, y i z. Wartość 1.0 oznacza, że oś jest obsługiwana, a wartość 0 oznacza, że nie jest. Producenci urządzeń określają obsługiwane osie w momencie tworzenia urządzenia, a wartości nie zmieniają się w czasie działania.

Producenci urządzeń muszą ustawić wartości prędkości kątowej i dryfu dla nieużywanych osi na 0.

Złożony czujnik IMU o ograniczonej liczbie osi

Czujniki fizyczne: dowolna kombinacja 3-osiowego akcelerometru, 3-osiowego żyroskopu, 3-osiowego akcelerometru bez kalibracji i 3-osiowego żyroskopu bez kalibracji.

Tryb raportowania: Ciągły

Złożony czujnik IMU o ograniczonej liczbie osi jest odpowiednikiem czujnika IMU o ograniczonej liczbie osi, ale zamiast być obsługiwany w warstwie HAL, przekształca dane z czujnika 3-osiowego na odpowiednie warianty o ograniczonej liczbie osi. Te czujniki złożone są włączone tylko na urządzeniach samochodowych.

W tabeli poniżej znajdziesz przykład konwersji ze standardowego 3-osiowego akcelerometru na złożony akcelerometr o ograniczonej liczbie osi.

Wartości SensorEvent dla SENSOR_TYPE_ACCELEROMETER Przykład zdarzenia SENSOR_TYPE_ACCELEROMETER SensorEvent Złożone zdarzenie SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES SensorEvent
values[0]

-0,065

-0,065

wartości[1]

0,078

0,078

values[2]

9808

9808

wartości[3]

Nie dotyczy

1,0

values[4]

Nie dotyczy

1,0

wartości[5]

Nie dotyczy

1,0

Czujniki samochodowe

Czujniki obsługujące zastosowania w motoryzacji.

Nagłówek

Czujniki fizyczne: dowolna kombinacja GPS-a, magnetometru, akcelerometru i żyroskopu.

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_HEADING) zwraca czujnik, który nie wybudza urządzenia

Dostępny od Androida 13 czujnik kierunku mierzy w stopniach kierunek, w którym jest skierowane urządzenie, względem północy geograficznej. Czujnik kierunku zawiera 2 wartości SensorEvent. Jeden dla nagłówka zmierzonego urządzenia i jeden dla dokładności podanej wartości nagłówka.

Wartości kierunku podawane przez ten czujnik muszą mieścić się w przedziale od 0.0 (włącznie) do 360.0 (wyłącznie), przy czym 0 oznacza północ, 90 – wschód, 180 – południe, a 270 – zachód.

Dokładność tego czujnika jest określana przy poziomie ufności 68%. W przypadku, gdy rozkład podstawowy jest rozkładem normalnym Gaussa, dokładność wynosi jedno odchylenie standardowe. Jeśli na przykład czujnik kierunku zwróci wartość kierunku 60 stopni i wartość dokładności 10 stopni, istnieje 68-procentowe prawdopodobieństwo, że rzeczywisty kierunek będzie mieścić się w przedziale od 50 do 70 stopni.