Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

Android od podstaw: czujniki sprzętowe

by
Difficulty:BeginnerLength:ShortLanguages:
This post is part of a series called Android From Scratch.
Android From Scratch: Understanding Android Broadcasts
Android From Scratch: Using REST APIs

Polish (Polski) translation by Mateusz Kurlit (you can also view the original English article)

Jedną z rzeczy, która wyróżnia programowanie dla urządzeń mobilnych na tle innych platform jest fakt, że telefon lub tablet posiada wiele czujników, które deweloperzy mogą wykorzystać do wprowadzania danych. W tym poradniku przedstawię ci strukturę czujników systemu Android. Dowiesz się jak wykryć dostępne czujniki w urządzeniu i odczytywać z nich dane.

Czujniki urządzenia

Istnieją trzy główne kategorie podstawowych czujników, które należy znać: ruchu, środowiskowe i pozycji urządzenia Czujniki ruchu wykrywają zmiany w siłach wokół trzech osi urządzenia: X, Y i Z jak pokazano poniżej:

The X Y and Z axes of a mobile device

Czujniki ruchu obejmują żyroskop, akcelerometr oraz czujniki wektora obrotowego.

Środowiskowe czujniki zbierają informacje o środowisku, w którym znajduje się telefon. Obejmują one czujniki wilgotności, temperatury otoczenia, oświetlenia i barometry.

Trzecia kategoria bazowych czujników oznacza dokładnie to, czego można było się spodziewać: wykrywa pozycję urządzenia. Kategoria obejmuje czujniki orientacji i magnetometr.

Każdy czujnik, który nie zalicza się do ani jednej podstawowej kategorii jest traktowany jako czujnik kompozytowy. Nie są to czujniki w tradycyjnym tego słowa znaczeniu, ponieważ zbierają swoje dane z wielu innych fizycznych czujników urządzenia i zestawiają je. Przykłady obejmują licznik kroków, czujnik grawitacji i wektora obrotowego.

Odczytywanie danych z czujnika

Skoro już trochę wiesz o rodzajach czujników w urządzeniach mobilnych, pora na rozpoczęcie odczytywania danych ze sprzętu. Zacznijmy od poznania czujników dostępnych w urządzeniu.

Odkrywanie czujników w urządzeniu

Aby uzyskać dostęp do czujników w urządzeniu, musisz skorzystać z klasy SensorManager, którą możesz pobrać jako usługę systemową z Activity.

Gdy uzyskasz już SensorManager, możesz pobrać domyślny Sensor w zależności od typu lub pobrać obiekty Sensor List bazując na rodzaju parametru. W tym przykładzie pobierzemy List wszystkich obiektów Sensor w ten sposób:

Zwróć uwagę, ze użyliśmy tutaj TYPE_ALL. Jeśli chcemy uzyskać dany podzestaw czujników, możemy przejść do obsługiwanych atrybutów typu, takich jak elementy na poniższej liście.

Po wybraniu obiektu Sensor, z którym chcesz pracować, możesz rozpocząć pobieranie z niego danych.

Nasłuchiwanie wydarzeń czujnika

Każdy obiekt Sensor zawiera informacje o fizycznym sprzęcie czujnika, takie jak zasilanie, opóźnienie wejścia, nazwę, typ i producent. Jeśli chcesz pobrać informację z tego czujnika, musisz najpierw zarejestrować SensorEventListener, który będzie wywoływany w określonych odstępach czasu z odczytami informacji.

Wyszczególniamy cztery prędkości odczytu: najszybsza, gra, normalna i UI. Niektóre umożliwiają odczytywanie informacji częściej, ale zużywają więcej energii urządzenia. Im rzadziej czujnik jest wywoływany, tym mniej energii pobiera.

Po zarejestrowaniu SensorEventListener, zostanie wywołana metoda onSensorChanged z nowym SensorEvent za każdym razem, gdy czujnik jest uruchamiany. SensorEvent owija obiekt Sensor, który dostarcza mu danych, jak również informacji o czasie, dokładności czujnika i rzeczywistych danych wejściowych.

Wprowadzone dane są przechowywane w tablicy float zwanej values. Długość values może się różnić w zależności od czujnika. Na przykład, akcelerometr będzie posiadał trzy wartości (wejście X, Y i Z), podczas gdy barometr tylko jedną. Podczas korzystania z danych z czujnika, warto zrozumieć jakie informacje mamy do dyspozycji oraz jak są one przechowywane w tablicy values, ponieważ w ten sposób będziesz wiadomo jak budować aplikację oraz jak uniknąć problemów związanych z wyjątkiem ArrayIndexOutOfBoundsException.

Kiedy uruchomisz akcelerometr urządzenia, powyższy fragment kodu dostarczy takich danych wyjściowych:

Ponieważ nasłuchiwanie pozwala na wprowadzanie danych w miarę upływu czasu, można je przenieść na wykres podobny do poniższego (choć sama biblioteka graficzna wykracza poza zakres tego poradnika).

Graph showing changes in X Y and Z axes over time

Wyzwalacze zdarzeń

Podczas gdy SensorEventListener ciągle podaje informacje w miarę upływu czasu, TriggerEventListener nasłuchuje wydarzeń i natychmiast się wyłącza. Ten rodzaj nasłuchiwania służy do sytuacji, w których występuje istotny ruch. Możesz dodać TriggerEventListener do SensorManager w ten sposób.

Jeśli Sensor przekazany do requestTriggerSensor jest znaczącym czujnikiem ruchu, to otrzyma on sygnał wyjściowy, gdy urządzenie się przemieści:

Należy zwrócić uwagę, że SensorEventListener oraz TriggerEventListener powinny zostać wyrejestrowane z SensorMagager po zakończeniu korzystania z nich, na przykład za pomocą onDestroy wewnątrz klas Fragment lub Activity w celu uniknięcia przecieków w aplikacji.

Podsumowanie

W tym poradniku przedstawiłem ci strukturę czujników systemu Android. Dowiedziałeś się jak odnaleźć czujniki w urządzeniu i pobrać z nich informacje. Dzięki czemu, możesz budować złożone aplikacje, które są świadome swojego środowiska i czynności użytkownika. Nauka obsługi danych z czujników pozwoli na stworzenie interesujących funkcji i sposobów działania, które możesz wykorzystać w swoich aplikacjach.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.