Advertisement
  1. Code
  2. Android SDK

Android Things: Memahami dan Menulis Driver

by
Difficulty:BeginnerLength:MediumLanguages:
This post is part of a series called Android Things.
Android Things: Peripheral Input/Output
Android Things and Machine Learning

Indonesian (Bahasa Indonesia) translation by Kurniawan Sugi Purwanto (you can also view the original English article)

Di artikel sebelumnya pada seri ini, Anda mempelajari tentang berbagai tipe perangkat input dan output periferal dan koneksi yang bisa digunakan dengan Android Things. Selanjutnya, Anda bisa memperluas pengetahuan ini dengan menulis kelas-kelas baru, yang dikenal sebagai driver, yang membuat antarmuka dengan periferal semakin mudah. Artikel ini akan memfokuskan pada tipe driver yang bisa ditulis untuk Android Things.

Driver User-Space Android Things

Driver user-space mengizinkan pengembang untuk memasukkan perangkat keras baru ke dalam framework Android, memungkinkannya berinteraksi dengan Android API yang sudah ada. Meskipun Anda bisa berkomunikasi langsung langsung dengan perangkat melalui standar input/output API, menulis suatu driver kustom akan memungkinkan aplikasi Anda mendukung beragam profil perangkat keras dan secara langsung bekerja dengan Android OS.  Selain itu, kode Anda akan lebih terstruktur dan dengan mudah mendukung daur ulang kode.

Ada tiga klasifikasi primer driver yang akan Anda pelajari di artikel ini: driver GPS, driver Human Input Device (HID), dan driver sensor.

Driver GPS

Jika perangkat Anda membutuhkan informasi lokasi, maka Anda membutuhkan perangkat GPS ke dalam aplikasi Anda. Dengan registrasi periferal GPS Anda ke UserDriverManager, Anda akan mampu menginjeksikan data lokasi perangkat Anda ke framework Android, mengizinkannya untuk dimanfaatkan oleh layanan lokasi Android. Ini akan mengombinasikan data GPS dan WiFi serta sumber lokasi lainnya untuk menyediakan hasil data yang lebih akurat untuk aplikasi Anda.

Biasanya modul GPS Anda akan terhubung dengan suatu perangkat Android Things melalui koneksi UART. Kita tidak akan terlalu dalam membahas UART dalam tutorial ini, tetapi Anda bisa belajar segala sesuatu tentang cara kerjanya dalam tutorial sebelumnya di seri ini.

GPS module and Adafruit breakout board

Untuk bekerja dengan modul GPS, Anda harus membuat suatu komponen Java baru untuk berkomunikasi dengan perangkat baru Anda. Akan kita namai kelas ini GpsDriverService.

Untuk meregistrasi modul GPS Anda dengan framework Andoid untuk data lokasi, sebelumnya Anda harus membuat suaatu objek GpsDriver dalam GpsDriverService Anda. Objek ini bisa diregistrasikan dengan UserDriverManager dengan panggilan registerGpsDriver().

Begitu modul GPS Anda telah menerima data lokasi dan mengirimkannya ke perangkat Android Things melalui koneksi serial UART, Anda harus mem-parse-nya dan menambahkannya ke objek Location.

Kebanyakan modul GPS akan mengembalikan data lokasi dalam format NMEA, meskipun parsing data berada di luar lingkup pembahasan tutorial ini. Ada empat jenis item data yang disyaratkan untuk objek Location Anda: akurasi, waktu, garis lintang, dan garis bujur. Anda juga bisa memilih untuk memasukkan ketinggian, posisi, dan kecepatan (jika perangkatnya sedang bergerak).

Sekalinya objek Location Anda terisi, Anda bisa memasukkannya ke GpsDriver dengan memanggil reportLocation().

Begitu komponen Anda selesai dibuat, Anda harus menginstansiasinya, mulai membaca data, dan mendengarkan pembaruannya di aplikasi Anda.

Apabila aplikasinya sudah selesai, Anda harus unregister driver tersebut dan menghapus listener lokasinya.

Sebagai tambahan, Anda juga harus memastikan bahwa aplikasi Anda memiliki izin ACCESS_FINE_LOCATION. Anda bisa menemukan detail untuk memastikan aplikasi memiliki izin yang disyaratkan dalam tutorial ini.

Ketika bekerja pertama kali dengan aplikasi yang menggunakan izin baru di Android Things, Anda harus me-reboot perangkat Anda setelah memasang aplikasinya untuk memastikan bahwa izin telah diberikan.

Driver Human Input Device

Framework Android dilengkapi dengan suatu pipeline yang built-in untuk menangani masukan dari tombol pengguna dan even-even gerakan, yang digunakan untuk hal-hal seperti tombol media, kontroler joystick, dan tekanan pada tombol keyboard. Dengan membuat InputDriver, Anda bisa mengikat interaksi manusia Anda sendiri ke pipeline input Android standar sehingga perangkat Anda bisa bereaksi secara tepat dengan pengguna Anda.

Supaya lebih sederhana, kita hanya akan melihat even input tombol dan bagaimana mengikatnya dengan framework Android, meskipun even gerakan juga ditangani dengan cara yang sangat serupa. Hampir sama dengan bagian akhir tutorial ini, kita akan mengabaikan perincian implementasi yang lebih spesifik dari perangkat input dan berfokus pada mengikat even yang diterima ke platform Android.

Even-Even Tombol

Ketika suatu even tombol terjadi dari tombol yang telah Anda lekatkan ke perangkat Android Things, Anda akan merekamnya dan mengirimkannya ke pipeline Android Anda.

Hal pertama yang akan Anda butuhkan adalah membuat suatu objek InputDriver dengan menggunakan Service baru dan menginisialisasinya. Drivernya bisa diinisialisasi dengan builder yang menerima tipe input, nama input Anda, sebuah versi, dan suatu kode kunci yang diwakili tombol tersebut.

Sekalinya InputDriver Anda diinisialisasi, Anda bisa meregistrasinya dengan UserDriverManager dengan menggunakan panggilan registerInputDriver().

Begitu Anda selesai registrasi dengan InputDriver Anda, layanan driver dapat menunggu even yang dikirim dari kelas implementasi tombol Anda. Jika tombol kustom Anda ditekan, Anda bisa memberitahu layanannya dan membuat KeyEvent baru, yang bisa ditempatkan di pipeline masukan Android dengan menggunakan metode emit(KeyEvent). Metode ini akan mengembalikan nilai true jika KeyEvent dapat mengirim ke framework Android, dan false jika terjadi kesalahan.

Hal terakhir yang akan Anda butuhkan adalah unregister objek InputDriver Anda dari UserDriverManager ketika aplikasi Anda sudah selesai berjalan.

Mendengarkan Event Input

Sekarang Anda udah mampu memancarkan even input tombol ke pipeline input Android, saatnya mendengarkannya. Di sinilah semua pekerjaan untuk menyalurkan even tombol baru Anda ke framework Android akhirnya terbayar. Yang perlu Anda tambahkan di Activity aplikasi Anda adalah metode untuk ketika KeyEvent sedang down, dan satu metode lagi untuk ketika KeyEvent sedang up. Di metode-metode tersebut, Anda bisa mengecek kode kunci KeyEvent dan menangani evennya dengan benar.

Driver Sensor

Beberapa komponen paling umum yang akan Anda gunakan dengan suatu papan Android Things adalah sensor. Karena Android memiliki framework sensor yang hebat, masuk akal jika kita ingin bisa menambahkan data dari komponen eksternal kita ke dalam pipeline tersebut.

Untuk memulai, Anda harus membuat suatu kelas Java baru yang berinteraksi dengan sensor perangkat keras Anda. Kelas ini harus memperluas UserSensorDriver dan mengimplementasikan metode read(). Selain itu, jika sensor Anda mendukung rendah daya atau mode tidur, Anda bisa mengesampingkan metode setEnabled() dan bertindak sesuai dengan itu.

Kutipan kode berikut adalah versi yang stubbed dari komponen kelas yang akan membaca data melalui Peripheral I/O API untuk mendapatkan nilai data X, Y, Z dan mengembalikan UserSensorReading yang baru. Jika datanya saat ini tidak tersedia, kelas tersebut akan melemparkan IOException baru.

Sekalinya kelas komponen Anda tercipta, Anda bisa menciptakan Service baru yang akan menginstansiasinya, sekaligus membuat objek UserSensor baru dan melekatkannya ke pipeline sensor Android.

Ada dua tipe sensor yang bisa Anda tambahkan ke pipeline ini. Pertama adalah tipe yang predefined, seperti gyroscope, accelerometer, pencahayaan, dan proximity, dan bisa ditambahkan ke pipeline dengan cara itu:

Anda akan menemui bahwa SensorManager.DynamicSensorCallback digunakan untuk contoh di ata. Ini akan memberitahu aplikasi Anda bahwa sensor sudah siap untuk frameworknya, karena registrasi butuh sekian waktu, sehingga framework tidak akan mencoba untuk membaca data dari perangkat yang tidak ada.

Adafruit pressure and temperature sensor

Tipe kedua adalah custom, yang mencakup apa saja yang belum didukung di Android. Beberapa contoh adalah tingkat pH air, kecepatan angin, deteksi gerakan, atau apa saja yang bisa Anda ukur dengan perangkat keras yang baru.

Dengan mengganti parameter builder setType()  dengan setCustomType(), Anda bisa mengganti nama perangkat dan mode pelaporan untuk mengontrol bagaimana akan menjadi pemicu di pipeline.

Terakhir, apabila aplikasi Anda sudah selesai berjalan, Anda harus unregister komponen baru Anda dari UserDriverManager.

Kesimpulan

Di tutorial ini, Anda telah belajar bagaimana menggunakan komponen yang dibuat dengan Peripheral I/O API dan mengikatnya ke framework Android yang sesuai untuk digunakan di aplikasi Android Things Anda.

Di titik ini, dalam seri ini, Anda telah memiliki semua sarana yang diperlukan untuk membuat proyek-proyek Android Things yang lebih mendalam lainnya. Selain menulis driver Anda sendiri, Anda bisa menemukan driver yang sudah ditulis dan implementasikan ke proyek Anda sendiri. Anda bisa menemukan sumber untuk driver-driver itu dari repo GitHub Android Things, atau pelajari beberapa contoh kerja dengan menggunakan driver-driver tersebut.

Di artikel berikutnya dari seri ini, kita akan melangkah lebih jauh dan membuat suatu proyek lengkap Android Things yang mengambil gambar dari suatu Raspberry Pi dan mengunggahnya ke Firebase. Untuk sementara waktu pelajari beberapa tutorial kami yang lainnya tentang pengembangan aplikasi Android di sini di Envato Tuts+!

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.