poniedziałek, 17 lutego 2014

Czujnik zbliżeniowy


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.


Obsługa czujnika zbliżeniowego jest bardzo podobna do omawianego wcześniej czujnika orientacji. Do ekranu przyklejam jeden TextView na którym będę wyświetlał wyniki:




Podobnie jak i przy czujniku orientacji implementuję interfejs SensorEventListener. Kod metody onCreate jest praktycznie taki sam jak i przy czujniku orientacji, z tą różnicą że przy rejestracji listenera jako parametr podajemy typ sensora Sensor.TYPE_PROXIMITY a nie TYPE_ORIENTATION. Podobnie jak i przy czujniku orientacji metoda onSensorChanged jest automatycznie wywoływana w momencie zmiany odczytów czujnika. W linii 33 wyświetlam na komponencie textView odczyt. Na urządzeniu Samsung ACE3 wyświelał tylko dwie wartości – 0, albo 5 jeśli zbliżyłem rękę na mniej niż ok 2cm.



W bardzo podobny sposób możemy wykorzystywać inne czujniki – np. czujnik temperatury (jeśli urządzenie takowy posiada). Wystarczyłoby w takim wypadku zamienić w linii 22 typ sensora z Sensor.TYPE_PROXIMITY na Sensor.TYPE_TEMPERATURE.

4 komentarze:

  1. Pokazujesz na zdjęciach co innego niż co jest w twoim pobranym projekcie.

    OdpowiedzUsuń
    Odpowiedzi
    1. Właśnie. Kod źródłowy pokazany na "zdjęciu" zawiera błędy, a ten w projekcie jest prawidłowy.

      Usuń
  2. Patrząc na czujnik gołym okiem w ciemności lub przez aparat cyfrowy można zobaczyć, jak świeci się będąca jego częścią dioda IR. W moim smartfonie widać to nawet po wyjściu z aplikacji przyciskiem "Wstecz", dopiero zamknięcie jej poprzez usunięcie z listy ostatnio używanych aplikacji (Android 5.0.1) powoduje wyłączenie czujnika.

    OdpowiedzUsuń
    Odpowiedzi
    1. Dlatego warto zaimplementować metodę onPause(), dodając wpis sm.unregisterListener(this); - wtedy wyłączysz czujnik. Niestety, tego nie ma tutaj w kursie lecz http://developer.android.com/reference/android/hardware/SensorManager.html

      Usuń