Show Sidebar Log in

HARDWARE SENSORS IN ANDROID

HARDWARE SENSORS IN ANDROID

Dibuat oleh:

1. Marudi Tri Subakti – PAPB B – 125150200111004
2. Sukarjo Sarilah – PAPB B

Perangkat Android dewasa ini tidak hanya sekedar berfungsi sebagai alat komunikasi atau untuk melakukan browsing. Perangkat tersebut juga dilengkapi dengan sensor-sensor yang dapat menyediakan informasi data mentah dengan presisi dan akurasi tinggi. Informasi yang didapat inilah dapat digunakan untuk menunjang fungsionalitas tertentu. Sensor-sensor yang ada pada Android dapat dikategorikan menjadi:

  1. Motion Sensors

Sensor-sensor ini mengukur akselerasi dan rotasi perangkat berdasarkan 3 sumbu. Yang termasuk di dalam kategori ini adalah Accelerometer, Gravity sensor, Gyroscopes, dan rotational vector sensor.

  1. Environmental Sensors

Sensor-sensor ini mengukur berbagai parameter lingkungan, seperti temperature udara dan tekanan lingkungan, cahaya (illumination), dan kelembapan (humidity). Yang termasuk di dalam kategori ini adalah barometer, thermometers, dan Proximity.

  1. Position Sensors

Sensor-sensor ini mengukur posisi fisik dari perangkat. Yang temasuk di dalam kategori ini adalah orientation sensor dan magnetometer.

Pada kesempatan ini akan dibuat aplikasi yang menggunakan dua buah sensor, yakni Proximity dan Accelerometer. Berikut ini sedikit penjelasan mengenai kedua sensor tersebut:

  1. Proximity

Sensor ini mengukur kedekatan sebuah objek dalam satuan cm relative terhadap tampilan layar dari perangkat. Sensor ini biasanya digunakan untuk menentukan apakah handset sedang didekatkan ke telinga. Gambar di samping adalah salah satu pemanfaatan sensor Proximity.

Proximity Sensor

  1. Accelerometer

Sensor ini mengukur akselerasi dalam m/s2 yang terjadi pada perangkat terhadap 3 sumbu (x, y, z) termasuk gaya gravitasi. Sensor ini biasanya digunakan untuk mendeteksi gerakan dari perangkat, seperti goncangan, kemiringan, dan lain-lain. Gambar di samping adalah keterangan 3 sumbu yang dapat diketahui nilai akselerasinya dengan menggunakan sensor Accelerometer.

Accelerometer Sensor

MUSIC SENSOR

Music Sensor adala sebuah aplikasi yang dapat mengontrol musik (lagu) yang diputar dengan memanfaatkan sensor yang ada pada Android. Pada tampilan aplikasi ini terdapat object ImageView unutk menampilkan state dari lagu (play/ pause) atau album art, SeekBar untuk menampilkan progress dari music yang diputar, dan TextView untuk informasi. Pengguna dapat mengusapkan tangan di atas sensor Proximity untuk memainkan atau menyela (pause) music yang diputar. Setiap kali Proximity Sensor tersebut memberikan respon, maka akan dicatat dalam textView dalam informasi ‘Number of hover’. Pengguna juga dapat mengubah gambar pada ImageView dengan cara menggoncang (shake) pada sumbu x (kanan-kiri).

Untuk membuat aplikasi tersebut, buatlah sebuah Project baru dengan cara pilih menu File à New à Android Application Project atau dengan klik ikon New Project pada toolbar , lalu pilih Android Application Project
Gambar-1.-File-New-Android-Application-Project

Gambar-2.-Icon-New-Project
Maka akan muncul jendela New Android Application. Anda bisa mengisikan nama aplikasi, nama project, dan konfigurasi versi SDK yang digunakan.
Gambar-3.-New-Android-Application-Project-Window

Dari penjelasan mengenai aplikasi di atas, maka kita membutuhkan beberapa file image dan music. Untuk file image, buat folder drawable-hdpi (atau drawable) sebagai sub folder res. Copy file-file image yang dibutuhkan seperti gambar di bawah ini. Untuk file music nya, kita buat folder raw sebagai sub folder dari res. Copy kan file .mp3 ke folder tersebut. Untuk penamaan file gunakan huruf kecil (lowercase). Berikut ini struktur lengkap file dan folder nya:

Gambar-4.-Struktur-folder-res-untuk-menyimpan-file-file-image-dan-music
Layout Aplikasi

File activity_main.xml
Untuk membuat tampilan aplikasi, maka modifikasi file .xml pada folder layout. Pada file activity_main.xml ini kita buat bebearpa object, yakni TextView, ImageView, dan SeekBar. Object TextView digunakan untuk menampilkan teks. ImageView digunakan untuk menampilkan gambar. Sedangkan object SeekBar akan menampilkan animasi progress dari music yang dimainkan.

Untuk layout aplikasi digunakan tipe LinearLayout. Ketika menggunakan tipe layout ini, maka object-object yang ada didalamnya akan diletakkan berdasar urutan penulisan. Untuk lebar (layout_width) dan tingginya (layout_height) disesuaikan dengan Layout parent (match_parent), yakni fullscreen. Orientasi layar yang dipakai adalah dalam keadaan portrait (vertical). LinearLayout ini diberi total bobot (weightSum) dengan nilai 10 untuk total semua weight dari object-object yang ada di dalam LinearLayout ini.
LinearLayout untuk activity_main.xml
Selanjutnya, buat dua object TextView untuk menampilkan informasi berupa teks. Object pertama (baris 9-22) akan memuat tulisan penggunaan Proximity Sensor. Object ini diberi id ‘title’ dengan lebar dan tinggi disesuaikan isi content (wrap_content). Dengan diberi bobot (layout_weight) 1, isi kontennya yang berupa string dengan nilai yang diasosiasikan pada variable ‘title’ pada file res à values à strings.xml. String tersebut akan ditampilkan dalam ukuran (textSize) 15sp dengan style (textStyle) bold dan warna (textColor) hitam.
Gambar-6.-Object-TextView-dengan-id-title-dan-title2-untuk-menampilkan-informasi-penggunaan-sensor

Object TextView yang kedua hampir sama dengan TextView yang pertama, yang membedakan adalah id (title2), text (title2), dan textStyle (italic). Object kedua ini menginformasikan mengenai penggunaan sensor Accelerometer.

Object yang selanjutnya adalah ImageView dan SeekBar. Seperti yang telah dijelaskan di atas, ImageView digunakan untuk menampilkan image yang ada pada folder drawable-hdpi sebagai penanda state dari file music pada folder raw. Sedangkan SeekBar menandakan progress dari music yang sedang diputar. Seekbar ini menampilkan informasi detik posisi dari music yang diputar.

Object ImageView digunakan untuk menampilkan image yang ada di folder drawable (drawable-hdpi). Untuk memanggil image nya, cukup dituliskan nama file nya (sebagai default, file yang dipilih untuk aplikasi ini adalah file pause (baris 47). Untuk bobotnya diberi nilai 3.
Gambar-7.-Object-TextView-dan-SeekBar-pada-activity_main

Untuk SeekBar nya didefinisikan id (seekBar1), jarak dengan sisi kiri dan kanan (marginLeft dan marginRight). Untuk bobotnya diberi nilai 2 (baris 50-57).

Dua buah object yang selanjutnya adalah object TextView. TextView yang pertama (id txtState) untuk menampilkan tulisan ‘Number of Hover’ (baris 60-72), sedangkan object kedua (id number) adalah menampilkan informasi jumlah Hover yang telah dilakukan dan diatangkap oleh sensor Proximity (baris 74-85). Object TextView yang kedua ini ditampilkan dalam ukuran (textSize) yang cukup besar, yakni 75sp dan dengan warna (textColor) merah gelap (holo_red_dark).
Gambar-8.-Object-TextView-txtState-dan-number-pada-file-activity_main

 

Beberapa object yang ada pada file activity_main.xml di atas menggunakan file variable string untuk menyimpan informasi. Variabel-variabel ini disimpan di file terpisah, yakni pada res à values à strings.xml. Nilai variable strings.xml ini juga digunakan pada file AndroidManifest.xml untuk menyimpan informasi nama aplikasi (app_name).
Gambar-9.-File-strings.xml-yang-memuat-informasi-nilai-varibael-String
Behavior Aplikasi

File MainActivity.java
Setelah membuat tampilannya, maka sekarang kita buat behavior (tingkah laku) dari objek-objek yang ada pada .xml. Behavior ini dituliskan dengan menggunakan file Java pada folder src. Oleh karena itu, kita modifikasi file MainActivity.java (untuk menghandle activity_main.xml).

Untuk dapat menjalankan beberapa fungsi yang ada pada aplikasi, maka dibutuhkan beberapa class yang harus diimport. Sensor yang akan digunkana dapat dikonfigurasi dengan mengimport android.hardware.Sensor, SensorEvent, dan SensorEventListener. Untuk dapat memutar music, maka diperlukan class android.media.MediaPlayer. Sedangkan untuk menghubungkan dengan object-object yang telah dibuat di activity_main.xml, maka import android.widget.ImageView, SeekBar, dan TextView. Ada juga object Toast (android.widget.Toast) untuk menampilkan informasi singkat (baris 3-15).
Gambar-10.-Class-yang-diimport-pada-MainActivity

Pada method onCreate() (baris 36-76) biasanya digunakan untuk mendeklarasikan variable atau object dari suatu class. Method ini meng-override method onCreate() dari class Activity. Agar object-object yang telah dibuat di file activity_main.xml ditampilkan dan bisa diakses melalui file MainActivity.java, maka menjalankan method setContentView(). number adalah object dari class TextView yang diasosiasikan dengan object TextView dengan id number pada file activity_main.xml (baris 40).
Gambar-11.SensorEventListener-pada-method-onCreate

Agar dapat berinteraksi dengan sensor, maka ada beberapa object dari class-class Sensor. sm adalah object dari class SensorManager yang digunakan untuk melakukan register atau unregister listener dari sensor-sensor yang akan digunakan. sel adalah object dari class SensorEventListener yang berguna untuk menangani aksi-aksi dari sensor. Oleh karena itu, saat pendeklarasian object ini maka didefinisikan (implement) pula method onAccuracyChanged() dan onSensorChanged(). Pada method onSensorChanged() akan dapat dibedakan aksi yang akan terjadi berdasarkan sensor yang memberi respon. Jika yang mendapat aksi pengguna adalah sensor Proximity dan jaraknya 1 cm, maka akan memanggil method controlMusic() (baris 51-55). Jika yang dikenai aksi oleh pengguna adalah sensor Accelerometer dan music nya sedang dimainkkan, maka akan memanggil method controlPict() (baris 56-59).

Dalam method onCreate() juga diinstansiasi pula object dari masing-masing sensor yang akan digunakan. ProximitySensor adalah object dari class Sensor dengan tipe sensor Proximity (baris 63). Object sm kemudian mendaftarkan object ProximitySensor dengan sel sebagai penangan listener dan delay sensor diset normal (baris 64). Sedangkan untuk menangani sensor Accelerometer dibuatlah object AccSensor (baris 66-67). Object ImageView yang ada pada pada file activity_main.xml diasosiasikan dengan object im (baris 69). Sedangkan untuk memutar music nya, diinstansiasi object mp dari class MediaPlayer (baris 71). Sedangkan seekBar digunakan untuk menghubungkan dengan object SeekBar pada file activity_main.xml (baris 73). seekBar tersebut diset agar tidak bisa diklik (baris 74).
Gambar-12.-Deklarasi-beberapa-object-pada-method-onCreate

 

Untuk mengontrol music (play/ pause) digunakan Proximity Sensor. Method yang digunakan untuk mengkontrolnya adalah method controlMusic() (baris 78-98). Jika music sedang tidak dimainkan, maka status (notPlayed) diubah menjadi false, nilai count ditambah 1, dan gambar ImageView diset menjadi gambar file play pada folder drawable (baris 80-82). Nilai img diubah menjadi ‘0’ dan music dimainkan (baris 83-84). Aplikasi akan menampilkan pesan ‘Playing sound’ melalui Toast dan mengubah nilai object number serta mengupdate progress dari seekBar (baris 85-88). Sedangkan jika music sedang dimainkan, maka gambar pada im diubah (baris 92) dan music dihentikan/ pause (baris 93).
Gambar-13.-Method-controlMusic-pada-class-MainActivity

Pada saat music sedang dimainkan (status play), maka kita dapat mengubah gambar pada object im dengan cara menggoyangkan perangkat pada sumbu x. Hal ini ditangani dengan sensor Accelerometer yang diatur pada method controlPict(). deltaX digunakan untuk menghitung perpindahan perangkat dengan mencari selisih nilai sumbu x yang sekarang dengan sebelumnya (baris 101). Jika nilai perpindahan kurang dari 2, maka diangap tidak ada perpindahan atau deltaX = 0 (baris 102-104). Hal ini untuk mengabaikan geseran-geseran kecil dikarenakan sensor yang sangat sensitive terhadap gerakan. Jika nilai deltaX lebih dari 10, maka akan dicek, jika img bernilai ‘0’ (berarti gambar yang sedang tampil adalah file ‘play’), maka object im akan diset untuk menampilkan file ‘play1’ (baris 107-109). Sebaliknya, jika img bernilai ‘1’ (berarti gambar yang sedang tampil adalah file ‘play1’), maka object im akan diset untuk menampilkan file ‘play’ (baris 110-112).
Gambar-14.-Method-controlPict

Untuk mengupdate progress pada seekBar, maka dijalankan method updateProgress(). Untuk mendapat panjang durasi music untuk nilai akhir/maksimum seekBar, dipanggil fungsi getDuratinon() oleh object mp (baris 120). Untuk mendapatkan posisi (detik) music yang dimainkan saat ini, menggunakan fungsi getCurrentPosition(). seekBar akan diupdate tiap 100 miliseconds/ 1 detik (baris 125) sehingga seolah-olah terdapat animasi seekBar yang berjalan.
Gambar-15.-Method-updateProgress

Kontrol terhadap aplikasi ini masih dapat dilakukan meskipun aplikasi terletak di background. Berikut ini tampilan aplikasi yang sudah selesai dibuat:

Gambar 16.
Gambar 17.
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NB: Aplikasi Music Sensor telah dicoba ke Smartphone Android (Acer Liquid E3) dan sukses

Artikel ini juga bisa diakses melalui link berikut:
http://blog.ub.ac.id/marudi3ice/2014/11/12/hardware-sensors-in-android-kontrol-musik-dengan-sensor-android/

Referensi:
Meier, Reto. Professional Android 4 Application Development. 2012. Indianapolis: John Wiley & Sons

http://developer.android.com/guide/topics/sensors/sensors_overview.html

http://www.vogella.com/tutorials/AndroidSensor/article.html

————————————————————- SELESAI ————————————————————-

Discussion (0)

There are no comments for this doc yet.

Comment posting has been disabled on this doc.