poniedziałek, 17 lutego 2014

Sprawdzanie jakie czujniki mamy dostępne


Kod źródłowy do tej lekcji znajduje się tutaj. Rozpakuj go i zaimportuj. W katalogu z kodem źródłowym znajdą się podkatalogi oznaczone numerami. Są to po prostu kolejne wersje kodu, tworzonego w ramach przykładów. Możesz analizować kolejne kroki tworzenia aplikacji, lub od razu zabrać się za kod z katalogu o najwyższym numerku.


Zanim zacznę korzystać z czujników jakiegoś urządzenia, chciałbym wiedzieć jakie w ogóle są dostępne. W pierwszej kolejności przyklejam na ekranie komponent typu TextView na którym wyświetlę wyniki:


W metodzie onCreate aktywności głównej dodaję parę linii kodu. Kod który ma realizować zadanie znajduje się właśnie w tej metodzie, ponieważ chcę aby wyniki wyświetliły się od razu po uruchomieniu programu. Linie 21,22 to podpięcie referencji do komponentu TextView i wyczyszczenie jego zawartości (napisu). Klasa SensorManager do której obiektu odwołuję się w linii 25 (sama deklaracja obiektu jest w linii 14) daje nam dostęp do czujników wbudowanych w urządzenie. Pobranie instancji tej klasy następuje poprzez wywołanie metody getSystemService z parametrem SENSOR_SERVICE. Aby odczytać nazwy czujników które są dostępne w urządzeniu, wykorzystuję metodę getSensorList klasy SensorManager ( linia 26 ). Metoda ta zwraca dostępne (czyli znajdujące się na danym urządzeniu) czujniki wskazanego typu. Tutaj podaję jako typ Sensor.TYPE_ALL, dzięki czemu w efekcie dostaję czujniki wszystkich typów. Mógłbym w tym miejscu wstawić np. Sensor.TYPE_GYROSCOPE i dostałbym listę wszystkich dostępnych w urządzeniu żyroskopów. Linie 27-29 to już iteracja po zwróconych obiektach i dodawanie kolejnych linii z nazwami kolejnych czujników do kompontentu tekstowego.




Efekt na Samsung ACE3:



2 komentarze:

  1. Zdecydowanie ładnie:
    sm = (SensorManager)getSystemService(SENSOR_SERVICE);
    for(Sensor s : sm.getSensorList(Sensor.TYPE_ALL)){
    tv.setText(tv.getText() + s.getName() + "\n");
    }

    OdpowiedzUsuń
    Odpowiedzi
    1. jakby się uprzeć to można:
      for(Sensor s : ((SensorManager)gerSystemService(SENSOR_SERVICE)).getSensorList(Sensor.TYPE_ALL)){
      // reszta
      }

      Usuń