162
vii Aplikasi Monitoring Keberadaan Objek Melalui Perangkat Bergerak Berbasis Android. Nama Mahasiswa : Iqbal Dwiki Kurniawan NRP : 5110 100 070 Jurusan : Teknik Informatika FTIf-ITS Dosen Pembimbing 1 : Dwi Sunaryono, S.Kom., M.Kom Dosen Pembimbing 2 : Adhatus Solichah A., S.Kom., M.Sc. ABSTRAK Di masa ini, aplikasi yang memanfaatkan GPS pada perangkat bergerak dalam menentukan suatu tempat tertentu sudah banyak dikenal dan digunakan oleh masyarakat. Salah satu pemanfaatan GPS adalah untuk memonitor objek. Dalam kehidupan sehari-hari dapat diambil contoh seperti ketika seorang anak izin untuk sekolah, ternyata kenyataannya tidak sesuai dengan yang anak itu katakan. Dengan menggunakan aplikasi Monitoring Keberadaan Objek Melalui Perangkat Bergerak Berbasis Android keberadaan anak dapat diketahui. Aplikasi yang dibuat dengan memanfaatkan GPS, Google Maps dan layanan pesan singkat. Dengan memanfaatkan metode reverse geocoding dan broadcast receiver, pengirim pesan singkat akan dapat mengetahui posisi dari pemegang Android mobile device dengan cara mengirim sebuah perintah pesan dan akan dibalas secara otomatis oleh aplikasi tersebut. Dari hasil pengujian di lapangan dengan pengguna menunjukkan bahwa 100% pengguna setuju aplikasi ini yang mengimplementasikan metode reverse geocoding dapat menentukan lokasi objek yang berupa perangkat bergerak Android dengan tepat baik melalui pesan singkat maupun melalui aplikasi ini sendiri. Sedangkan 100% pengguna setuju aplikasi ini dapat memperbarui riwayat lokasi pengguna ke dalam basis data ketika pengguna berpindah tempat. Kata kunci: Android, Reverse Geocoding, Pesan singkat, Google Maps API.

Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

vii

Aplikasi Monitoring Keberadaan Objek Melalui Perangkat Bergerak Berbasis Android.

Nama Mahasiswa : Iqbal Dwiki Kurniawan NRP : 5110 100 070 Jurusan : Teknik Informatika FTIf-ITS Dosen Pembimbing 1 : Dwi Sunaryono, S.Kom., M.Kom Dosen Pembimbing 2 : Adhatus Solichah A., S.Kom., M.Sc.

ABSTRAK

Di masa ini, aplikasi yang memanfaatkan GPS pada perangkat bergerak dalam menentukan suatu tempat tertentu sudah banyak dikenal dan digunakan oleh masyarakat. Salah satu pemanfaatan GPS adalah untuk memonitor objek. Dalam kehidupan sehari-hari dapat diambil contoh seperti ketika seorang anak izin untuk sekolah, ternyata kenyataannya tidak sesuai dengan yang anak itu katakan. Dengan menggunakan aplikasi Monitoring Keberadaan Objek Melalui Perangkat Bergerak Berbasis Android keberadaan anak dapat diketahui.

Aplikasi yang dibuat dengan memanfaatkan GPS, Google Maps dan layanan pesan singkat. Dengan memanfaatkan metode reverse geocoding dan broadcast receiver, pengirim pesan singkat akan dapat mengetahui posisi dari pemegang Android mobile device dengan cara mengirim sebuah perintah pesan dan akan dibalas secara otomatis oleh aplikasi tersebut.

Dari hasil pengujian di lapangan dengan pengguna menunjukkan bahwa 100% pengguna setuju aplikasi ini yang mengimplementasikan metode reverse geocoding dapat menentukan lokasi objek yang berupa perangkat bergerak Android dengan tepat baik melalui pesan singkat maupun melalui aplikasi ini sendiri. Sedangkan 100% pengguna setuju aplikasi ini dapat memperbarui riwayat lokasi pengguna ke dalam basis data ketika pengguna berpindah tempat. Kata kunci: Android, Reverse Geocoding, Pesan singkat, Google Maps API.

Page 2: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

ix

Object Existance Monitoring Application on Android-Based Mobile Device

Student Name : Iqbal Dwiki Kurniawan NRP : 5110 100 070 Major : Teknik Informatika FTIf-ITS Advisor 1 : Dwi Sunaryono, S.Kom., M.Kom Advisor 2 : Adhatus Solichah A., S.Kom., M.Sc.

ABSTRACT

At this time, applications that utilize GPS on a mobile devices in determining a particular place have been much known and used by the public. One of the utilization of the GPS is to monitor objects. In daily life can be taken as examples of when a child permission to the school, turned out to be incompatible with the fact that the child has to say. By using the application Object Existance Monitoring Application on Android-Based Mobile Device he existence of that child can be known.

Application made by utilizing GPS, Google Maps and short message service. By utilizing the method of reverse geocoding and broadcast receiver, short message senders will be able to know the position of the holder of the Android mobile device by sending a command message and will be replied to.

From the results of testing on the field with the user indicates that 100% of users agree this application which implements a reverse geocoding methods can determine the location of the object in the form of an Android mobile device appropriately whether through text messaging or through the application itself. While 100% of users agree this application can update your location history the user into the database when the user switch places. Keywords: Android, Reverse Geocoding, Short Message Service, Google Maps API.

Page 3: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

xxiii

DAFTAR KODE SUMBER

Kode Sumber 7.1 Fitur Memonitor Lokasi Pengguna Dengan Mengirim Pesan Singkat ........................................................... 122 Kode Sumber 7.2 Melihat Riwayat Lokasi Pengguna Melalui Pesan Singkat ............................................................................ 125 Kode Sumber 7.3 Memperbarui Lokasi Ketika Berpindah Tempat ................................................................................................... 129 Kode Sumber 7.4 Mengubah Pengaturan Notifikasi Ketika Baterai Habis ............................................................................. 133 Kode Sumber 7.5 Memasukkan Nomor Pemonitor ke Dalam Sistem ........................................................................................ 135 Kode Sumber 7.6 Menekan Tombol Darurat ............................ 138 Kode Sumber 7.7 Melihat Riwayat Lokasi Pengguna Melalui Google Maps ............................................................................. 141 Kode Sumber 7.8 Kontroler ke Dalam Basis Data SQLite ....... 153

Page 4: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

7

2 BAB II DASAR TEORI

Pada bab ini akan dibahas mengenai teori-teori yang menjadi dasar dari pembuatan Tugas Akhir.

2.1 SQLite SQLite adalah sebuah pustaka in-process yang

mengimplementasikan self-contained, serverless dan tanpa konfigurasi. SQLite merupakan proyek yang bersifat open source karena itu dapat digunakan secara cuma-cuma, baik untuk tujuan komersial atau pribadi. SQLite saat ini ditemukan di banyak aplikasi, termasuk beberapa aplikasi yang besar.

Pustaka SQLite mengimplementasikan hampir seluruh elemen-elemen standar yang berlaku pada SQL-92, termasuk transaksi yang bersifat atomic, konsistensi basis data, isolasi, dan durabilitas (dalam bahasa inggris lebih sering disebut ACID), trigger, dan kueri-kueri yang kompleks. Tidak ada pengecekan tipe sehingga data bisa dientrikan dalam bentuk string untuk sebuah kolom bertipe integer. Beberapa kalangan melihat hal ini sebagai sebuah inovasi yang menambah nilai guna dari sebuah basis data, utamanya ketika digunakan dalam bahasa pemrograman berbasis script (PHP, Perl), sementara kalangan lain melihat hal tersebut sebagai sebuah kekurangan.

Beberapa proses dapat berjalan secara bersamaan dan mengakses basis data yang sama tanpa mengalami masalah. Hal ini disebabkan karena akses baca data dilakukan secara paralel. Sementara itu akses tulis data hanya bisa dilakukan jika tidak ada proses tulis lain yang sedang dilakukan; jika tidak, proses tulis tersebut akan gagal dan mengembalikan kode kesalahan (atau bisa juga secara otomatis akan mencobanya kembali sampai sejumlah nilai waktu yang ditentukan habis). Hanya saja ketika sebuah tabel temporer dibuat, mekanisme penguncian pada proses multithread akan menyebabkan masalah. Update yang terkini (versi 3.3.4) dikatakan telah memperbaiki masalah ini.

Page 5: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

8

SQLite adalah sebuah mesin basis data SQL tertanam. SQLite library didesain untuk mandiri dan hanya memerlukan bantuan yang minimal dari library lain sehingga bisa mudah diaplikasikan pada aneka platform. SQLite tidak memerlukan proses server yang tersendiri untuk mengakses data. Keseluruhan operasi di SQLite adalah berdasarkan konsep baca dan tulis langsung ke file di storage atau memory. SQLite mendukung 90% standar SQL syntax. Hal ini akan mempermudah kurva belajar para pengembang aplikasi yang sudah terbiasa dengan SQL Programming dan juga memiliki kompatibilitas yang tinggi untuk diaplikasikan pada banyak platform dan beraneka jenis bahasa pemrograman [1].

SQLite ini mempunyai fitur mandiri, maksudnya yaitu tidak membutuhkan banyak pengaturan dan cocok untuk aplikasi yang membutuhkan basis data tertanam. Karena fitur ini SQLite digunakan sebagai basis data untuk fitur memasukkan nomor pemonitor ke dalam sistem dan memperbarui lokasi ketika berpindah tempat.

2.2 Sistem Operasi Android Sistem operasi Android adalah sistem operasi berbasis

Linux yang dirancang khusus untuk perangkat bergerak seperti smartphone dan tablet. Android dikembangkan pertama kali oleh Android, Inc. yang akhirnya dibeli oleh Google pada tahun 2005 [2].

Hingga saat ini, jenis sistem operasi yang dikembangkan pada Android ada beberapa macam: • Cupcake (versi 1.5) • Donut (versi 1.6) • Eclair (versi 2.0-2.1) • Froyo (versi 2.2) • Gingerbread (versi 2.3) • Honeycomb (versi 3.1-3.2) • Ice Cream Sandwich (versi 4.0) • Jellybean (versi 4.1-4.3)

Page 6: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

9

• Kit Kat (versi 4.4) Sistem operasi Android sampai saat ini terus

dikembangkan, bahkan sistem operasi ini tidak hanya digunakan pada perangkat bergerak saja, namun perangkat lain yang pada awal pengembangannya tidak ada kaitan langsung dengan perangkat bergerak seperti produk televisi, yaitu Smart TV dan kamera digital, yaitu Galaxy Camera yang dirilis oleh perusahaan raksasa asal Korea, Samsung. Tidak hanya televisi dan kamera digital, bahkan baru-baru ini Google mengembangkan sistem operasi Android yang ditanamkan pada produk mereka, yaitu kacamata pintar Google Glass. Selain itu dikembangkan juga jam tangan pintar yang dapat mengendalikan perangkat bergerak seperti yang dikembangkan oleh Samsung yaitu Galaxy Gear dan Sony dengan produknya Smart Watch Sony.

2.3 Layanan Pesan Singkat Layanan pesan singkat (bahasa Inggris: Short Message

Service disingkat SMS) adalah sebuah layanan yang dilaksanakan dengan sebuah telepon genggam untuk mengirim atau menerima pesan-pesan pendek. Pada mulanya SMS dirancang sebagai bagian daripada Global System for Mobile Communications (GSM), tetapi sekarang sudah didapatkan pada jaringan bergerak lainnya termasuk jaringan Universal Mobile Telecommunications System (UMTS).

Sebuah pesan SMS maksimal terdiri dari 140 bytes, dengan kata lain sebuah pesan bisa memuat 140 karakter 8-bit, 160 karakter 7-bit atau 70 karakter 16-bit untuk bahasa Jepang, bahasa Mandarin dan bahasa Korea yang memakai Hanzi (Aksara Kanji/Hanja). Selain 140 bytes ini ada data-data lain yang termasuk. Ada beberapa metode untuk mengirim pesan yang lebih dari 140 bytes, tetapi seorang pengguna harus membayar lebih dari sekali [3].

Page 7: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

10

2.4 Broadcast Receiver Broadcast receiver merupakan kode program untuk

menyiarkan pesan dari aplikasi lain atau dari sistem itu sendiri. Pesan ini biasa disebut event atau intent. Contohnya ketika ada pesan masuk ke dalam sistem dan sebelum sistem mengetahui maka broadcast receiver ini memotong pesan yang masuk dan mengambil tindakan yang tepat untuk meresponnya [4].

Broadcast receiver ini adalah sebuah komponen Android yang berguna untuk mendengar dan mendaftarkan perubahan orientasi dari device seperti pesan pendek yang diterima, menerima panggilan telepon, status perubahan baterai, dan Wi-fi yang ada [5].

Dengan bantuan broadcast receiver dapat menangkap event perangkat bergerak Android dengan spesifik kemudian dapat mengimplementasikan kode untuk event tersebut.

Ada 2 cara untuk mengimplementasikan broadcast receiver, cara tersebut adalah sebagai berikut:

Cara pertama adalah sebagai berikut sebuah broadcast receiver diimplementasikan sebagasi sebuah subclass dan overriding metode onReceive dimana tiap pesan diterima sebagai objek parameter intent seperti yang ada pada Gambar 2.1.

Gambar 2.1 Kelas Broadcast Receiver

Aplikasi yang menggunakan broadcast receiver harus mendaftarkan sebuah broadcast receiver ke dalam AndroidManifest.xml sedangkan action di dalamnya menandakan

Page 8: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

11

jenis tindakan yang akan diambil menandakan bahwa tindakan akan diambil ketika ada pesan singkat yang masuk seperti yang terlihat pada Gambar 2.2.

Gambar 2.2 Kode AndroidManifest.xml Broadcast Receiver

Sedangkan cara kedua adalah mendaftarkan broadcast receiver secara dinamis. Contohnya adalah seperti pada Gambar 2.3.

Gambar 2.3 Broadcast Receiver Dinamis

Cara pertama yaitu mendaftarkan broadcast receiver ke dalam file AndroidManifest.xml secara statis digunakan oleh fitur memonitor lokasi pengguna dengan mengirim pesan singkat dan melihat riwayat lokasi pengguna melalui pesan singkat untuk

Page 9: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

12

menerima pesan singkat dari pemonitor ke dalam aplikasi karena fitur ini membutuhkan broadcast receiver secara terus dan tidak perlu unregister. Sedangkan cara kedua digunakan fitur mengubah pengaturan notifikasi ketika baterai habis untuk mengakses baterai dan agar bisa diaktifkan maupun nonaktifkan perlu untuk register maupun unregister broadcast receiver. 2.5 Eclipse

Eclipse merupakan suatu Integrated Development Environment (IDE) yang bersifat ekstensibel. Tujuan utamanya ialah memberikan layanan untuk mengatur suatu kumpulan alat yang saling bekerja sama dalam mendukung tugas-tugas pemrograman. Eclipse banyak dikenal sebagai alat pemrograman berbahasa Java, tetapi Eclipse juga digunakan oleh aplikasi seperti Lotus Notes, Nasa’s Rover Command dan kontrol perangkat lunak. Eclipse juga merupakan sebuah program open source yang terbuka bagi pemakai individu maupun perusahaan [6] karena bersifat open source maka Eclipse dipilih untuk mengerjakan Tugas Akhir ini.

2.5.1 ADT (Android Development Tools) Android Development Tools (ADT) adalah sebuah plugin

Eclipse IDE yang dirancang untuk memberikan sebuah lingkungan yang terintegrasi dan kuat yang mana untuk membuat aplikasi Android.

ADT menambah kemampuan dari Eclipse untuk membuat sebuah proyek Android dengan cepat. Membuat tampilan antarmuka dari sebuah aplikasi, menambah package berdasarkan Android Framework API. Debug aplikasi menggunakan Android SDK, dan juga dapat mengeluarkan file .apk untuk menyebarkan aplikasi Android yang telah dibuat.

Pengembangan sebuah aplikasi Android menggunakan ADT adalah cara yang tercepat dan sangat direkomendasikan. Karena ADT dilengkapi petunjuk pengembangan proyek pengembangan aplikasi Android yang banyak, juga peralatan

Page 10: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

13

pengintegrasian custom xml editor [7]. Dikarenakan pengerjaan Tugas Akhir ini menggunakan Eclipse maka pengembang juga menggunakan ADT agar bisa membuat aplikasi Android.

2.5.2 Android SDK Android SDK menyediakan pustaka API dan alat

pengembang yang penting untuk membuat, menguji dan debug program berbasis bahasa pemrograman Android [8].

Jika pengembang relatif baru dalam mempelajari pemrograman berbahasa Android sangat direkomendasikan untuk mengunduh berkas ADT (Android Development Tools) agar bisa secara cepat mengembangkan aplikasi berbasis Android. Berkas tersebut termasuk komponen Android SDK yang penting dan sebuah versi dari Eclipse IDE dengan ADT yang sudah ada didalam Eclipse tersebut untuk mempersingkat pengembangan aplikasi berbasis Android. Karena pengerjaan Tugas Akhir ini untuk membuat aplikasi Android maka pengembang menggunakan Android SDK.

2.6 GPS (Global Positioning System) Seperti kebanyakan pengembangan teknologi tingkat tinggi

GPS pertama kali dibuat oleh militer Amerika Serikat. Konsep pertama kali dibuat pada tahun sekitar tahun 1960 tetapi satelit yang pertama kali diluncurkan tahun 1978. Di tahun 1989 perusahaan Magellan mengenalkan penerima GPS hand-held yang pertama. Di Maret 1996 Presiden Amerika memutuskan GPS bebas digunakan pengguna sipil.

Pertama kali, militer tidak mengijinkan warga sipil menggunakan GPS karena takut disalahgunakan seperti dibuat untuk teroris. Tetapi karena ditekan oleh perusahaan-perusahaan yang membuat peralatan, akhirnya departemen pertahanan mengijinkan penggunaan GPS oleh nonmiliter dengan beberapa persyaratan. Akhirnya karena desakan yang kuat dari perusahaan-perusahaaan dan masyarakat pada tahun 2010 persyaratan itu dilepas dan pemerintah Amerika Serikat berkomitmen

Page 11: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

14

menyediakan GPS untuk penggunaan yang damai di seluruh dunia, tanpa meminta biaya [9].

Di pemrograman berbasis Android sendiri GPS digunakan untuk untuk membuat program berbasis lokasi yang cukup populer di masa ini. Untuk membuat program berbasis lokasi sendiri sebenarnya ada 2 cara yang bisa digunakan yaitu yang pertama menggunakan GPS yang tertanam di perangkat bergerak sedangkan yang lainnya menggunakan ID dari kartu provider yang digunakan. Namun cara pertama lebih akurat karena langsung menggunakan GPS yang tertanam di perangkat bergerak itu, sedangkan jika menggunakan ID dari kartu provider akan mengikuti menara sinyal yang terdekat dari jaringan provider. Tetapi cara pertama sendiri ada kelemahan yaitu akan sulit menangkap koordinat posisi ketika berada dalam ruangan yang tertutup.

Untuk membuat aplikasi sendiri pertama yang harus dilakukan adalah mengambil referensi dari kelas location manager yang menyediakan akses ke layanan sistem lokasi. Kemudian meminta lokasi perangkat bergerak menggunakan metode requestLocationUpdates. Di metode tersebut disediakan pilihan lokasi provider (jaringan kartu atau GPS yang tertanam), interval waktu minimum untuk pemberitahuan (dalam milidetik), interval jarak minimum untuk pemberitahuan (dalam meter) dan akhirnya sebuah kelas yang meimplementasikan locationlistener [10]. Karena secara umum Tugas Akhir ini membuat program perangkat bergerak Androidyang menggunakan lokasi maka penggunaan GPS sangat penting dan diperlukan.

Dari objek lokasi kita dapat mendapatkan beberapa informasi yang penting untuk membuat program berbasis lokasi, seperti: latitude, longitude, altitude, dan lain-lain. Fungsi getLastKnownLocation dari LocationManager mengembalikan nilai lokasi terakhir dari pengguna aplikasi. Untuk dapat menjalankan program berbasis lokasi ada permission yang harus diganti diganti di AndroidManifest.xml seperti Gambar 2.4.

Page 12: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

15

Gambar 2.4 Set Permission Lokasi

2.7 Google Maps API Google Maps adalah sebuah peta dunia yang dapat kita

gunakan untuk melihat suatu daerah. Dengan kata lain, Google Maps merupakan suatu peta yang dapat dilihat dengan menggunakan suatu browser. Google Maps API adalah suatu library yang berbentuk Java Script. Dengan menggunakan Google Maps API, kita dapat menghemat waktu dan biaya untuk membangun aplikasi peta digital, sehingga kita dapat fokus hanya pada data-data yang akan ditampilkan.

Pada Google Maps API terdapat 4 jenis pilihan model peta yang disediakan oleh Google, di antaranya adalah:

1. Roadmap, untuk menampilkan peta biasa 2 dimensi.

2. Satellite, untuk menampilkan foto satelit.

Page 13: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

16

3. Terrain, untuk menunjukkan relief fisik permukaan bumi dan menunjukkan seberapa tingginya suatu lokasi, contohnya akan menunjukkan gunung dan sungai.

4. Hybrid, akan menunjukkan foto satelit yang di atasnya tergambar pula apa yang tampil pada roadmap (jalan dan nama kota) [11].

Di dalam aplikasi Android kita dapat menggunakan Google Maps API v2. Di map baru ini terdapat beberapa fitur seperti 3D Map, gambar berbasis vector untuk optimalisasi cache dan gambar, transisi animasi dan banyak lainnya.

Selain itu Google Maps API v2 juga terdapat fitur marker untuk menandakan lokasi penting dari pengguna. Marker tersebut dapat diubah baik warna ataupun ikon menyesuaikan aplikasi yang dibuat. Google Maps API v2 juga dapat mengubah beberapa pandangan dari map tersebut dengan kemampuan seperti rotasi, memperbesar dan menggeser perspektif kamera dari map [12].

Dalam membuat aplikasi Android yang menggunakan Google Maps API V2 membutuhkan beberapa langkah persyaratan. Banyak langkah-langkah yang dijabarkan ini hanya dilakukan sekali, namun beberapa informasi dapat berguna untuk pengembangan lebih lanjut. Secara kesuluruhan proses penambahan map di dalam Android adalah sebagai berikut:

Memasang Android SDK. Sebagai prasayarat harus memasang Android SDK terlebih dahulu.

Mengunduh dan mengatur Google Play Services SDK; dimana termasuk Google Maps Android API.

Google Maps Android API didistribusikan sebagai bagian dari Google Play Services SDK. Anda dapat mengunduh Google Play Services SDK melalui Android SDK Manager. Berikut ini adalah langkah-langkah yang harus diambil: • Memasang Google Play Services SDK.

Page 14: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

17

• Menambah Google Play Services sebagai pustaka proyek Android.

• Mereferensi Google Play Services ke dalam proyek aplikasi

Langkah selanjutnya adalah menambah versi Google Play Services ke dalam manifes aplikasi dengan cara menambahkan kode seperti Gambar 2.5.

Gambar 2.5 Menambah Versi Google Play Service

Memperoleh kunci API. Untuk dapat mengakses server Google Maps dengan Maps

API, harus menambahkan kunci Maps API ke dalam aplikasi yang dibuat.

Kunci bisa didapat secara gratis dan bisa dipakai ke semua aplikasi yang menggunakan Google Maps API juga mendukung pemakai aplikasi secara tidak terbatas. Mendapatkan sebuah kunci Maps API dari Google API dengan memberikan sertifikat aplikasi dan nama package.

Berikut ini adalah langkah-langkah yang dibutuhkan untuk meminta key dari Google Maps API: • Membuka Google API Console • Di halaman services pastikan Google Maps API v2 diaktifkan • Di navigasi sebelah kiri halaman tekan akses API. • Setelah itu tekan create new Android key. • Di dalam halaman hasil masukkan SHA-1 fingerprint,

kemudian titik koma,kemudian nama package aplikasi, contohnya seperti Gambar 2.6.

Gambar 2.6 SHA-1 Fingerprint

Page 15: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

18

• Google API Console akan merespon dengan menampilkan

kunci untuk aplikasi Android (dengan sertifikat) yang berisi 40 karakter kunci API, contohnya seperti Gambar 2.7.

Gambar 2.7 Kunci dari Google Maps API

Mengubah pengaturan yang dibutuhkan di dalam manifes aplikasi.

Setelah mendapat kunci dari Google Maps API langkah selanjutnya adalah mendaftarkan ke manifes aplikasi yang berada dalam file AndroidManifest.xml.

Dari sini Maps API akan membaca nilai kunci dan menyalurkan ke dalam Google Maps server, kemudian mengkonfirmasi bahwa anda memiliki akses ke data Google Maps. Cara mendaftarkan kunci Google Maps API ke dalam manifest aplikasi dapat dilihat pada Gambar 2.8.

Gambar 2.8 Daftar Kunci API ke Manifest

Kemudian simpan file AndroidManifest.xml dan rebuild

aplikasi. Selain hal diatas ada beberapa permission yang harus

ditambahkan ke dalam manifes aplikasi untuk beberapa hal seperti mengunduh map dari Google Maps server, mengijinkan API untuk menulis cache ke dalam area penyimpanan eksternal, memeriksa koneksi apakah data bisa di unduh. Skrip yang harus

Page 16: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

19

ditambahkan ke dalam manifes aplikasi dapat dilihat pada Gambar 2.9.

Gambar 2.9 Skrip Google Maps API di Manifest

Google Maps Android API menggunakan Open GL ES

versi 2 untuk membuat map. Jika Open GL ES versi 2 tidak terpasang maka map tidak akan muncul. Oleh karena itu ada skrip tambahan yang harus dimasukkan ke dalam manifes aplikasi seperti terlihat pada Gambar 2.10.

Gambar 2.10 Skrip Open GL ES Versi 2

Menambah map ke dalam aplikasi.

Cara termudah untuk menguji apakah aplikasi sudah diatur secara benar adalah menambah sebuah map sederhana. Dengan cara merubah dua file:file XML yang mendefinisikan layout aplikasi dan file aktivitas utama. Menerbitkan aplikasi.

Jalankan aplikasi, jika map tidak muncul pastikan cara-cara diatas sudah dilakukan dengan benar [13]. Google Maps API ini digunakan untuk membuat fitur melihat riwayat lokasi pengguna melalui Google Maps.

Page 17: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

20

2.8 Alarm Manager Alarm manager digunakan untuk memulai services,

membuka activities atau broadcast intent berdasarkan waktu yang ada di perangkat bergerak atau waktu yang berlalu sejak perangkat dihidupkan ulang. Sebuah alarm dapat berjalan walau aplikasi dalam keadaan tertutup dan jika dibutuhkan dapat membangunkan perangkat bergerak yang dalam keadaan mati (sleep) [5].

Alarm manager ini digunakan untuk fitur memperbarui lokasi ketika berpindah tempat agar aplikasi dapat memperbarui lokasi walau aplikasi dalam keadaan tertutup. 2.9 Marker

Marker mengindikasikan sebuah lokasi di map. Anda dapat merubah marker dengan merubah warna yang sudah terdefinisi, atau merubah ikon marker dengan sebuah gambar sesuai keinginan melalui API.

Marker yang sudah terdifinisi menggunakan sebuah ikon standar, sama dengan Google Maps. Marker adalah objek dari tiper Marker, dan ditambahkan ke map dengan metode GoogleMap.addMarker(markerOptions).

Markers didesign dengan interaktif. Mereka menerima kejadian secara default, dan sering digunakan dengan kejadian listeners untuk membawa info windows. Setelan properti draggable true mengijinkan pemakai untuk merubah posisi dari marker. Tekan secara lama untuk mengaktivasi kemampuan merubah marker [14].

Di Gambar 2.11 adalah contoh demonstrasi bagaimana menambah sebuah marker ke dalam sebuah map. Koordinat dari marker yang dibuat di 10, 10, dan menampilkan sebuah kalimat “Hello world” ke dalam info windows ketika diklik.

Page 18: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

21

Gambar 2.11 Skrip Menambah Marker

Dapat juga merubah posisi dari sebuah marker ketika sudah

ditambah selama properti draggable dari marker bernilai true. Tekan tombol sedikit lama untuk menyeret marker tersebut, dan ketika melepas jari dari layar maka marker akan tetap di posisi ketika melepas jari. Di Gambar 2.12 ditunjukkan cara menambah draggable marker

Gambar 2.12 Skrip Draggable Marker

Marker ini digunakan dalam fitur melihat riwayat lokasi

pengguna melalui Google Maps untuk menandakan lokasi dari pengguna.

2.10 Reverse Geocoding Reverse geocoding adalah sebuah proses balik yang

mengkode titik dari lokasi (latitude, longitude) ke sebuah alamat atau nama tempat [15]. Hal ini memungkinkan untuk mengidentifikasi nama jalan, tempat dan atau pembagian daerah seperti kelurahan, kecamatan, propinsi, atau negara. Dikombinasikan dengan geocoding dan service rute, reverse geocoding adalah sebuah komponen penting dari aplikasi perangkat bergerak berbasis lokasi untuk mengubah sebuah koordinat yang didapat dari GPS ke sebuah alamat jalan ang lebih

Page 19: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

22

mudah dibaca dan dipahami oleh pengguna. Layanan reverse geocoding menjadi semakin banyak tersedia melalui API, dan banyak digunakan di layanan web dan juga aplikasi di perangkat bergerak.

Servis ini membutuhkan masukan manual dari sebuah koordinat, didapat dari sebuah GPS, atau seleksi dari sebuah titik di map yang bisa digunakan untuk mencari sebuah nama jalan [16].

Untuk dapat menggunakan metode reverse geocoding anda mengirim target latitude dan longitude ke dalam fungsi getFromLocation di metode reverse geocoding. Setelah itu akan menghasilkan list yang berisi alamat yang cocok. Jika geocoder tidak menghasilkan suatu alamat yang cocok maka akan menghasilkan null [5]. Reverse geocoding digunakan di banyak fitur di aplikasi Tugas Akhir ini karena bisa mengubah dari titik latitude dan longitude menjadi sebuah nama lokasi.

2.11 Location manager Ketika mengembangkan aplikasi Android berbasis lokasi

anda dapat memanfaatkan GPS dan jaringan kartu untuk mendapatkan lokasi pengguna. Walaupun GPS lebih akurat, tetapi itu hanya berlaku di luar ruangan, menghabiskan tenaga baterai secara cepat, dan tidak dapat secara cepat mendapatkan posisi.

Menggunakan location manager mempunyai beberapa kegunaan seperti mendapatkan lokasi terkini, mendeteksi perubahan lokasi [5], karena kegunaan ini maka location manager digunakan dalam banyak fitur di Tugas Akhir ini.

2.12 Java Java adalah bahasa pemrograman yang dapat dijalankan di

berbagai komputer termasuk telepon genggam [17]. Bahasa ini awalnya dibuat oleh James Gosling saat masih bergabung di Sun Microsystems saat ini merupakan bagian dari Oracle dan dirilis tahun 1995. Bahasa ini banyak mengadopsi sintaksis yang terdapat pada C dan C++ namun dengan sintaksis model objek

Page 20: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

23

yang lebih sederhana serta dukungan rutin-rutin aras bawah yang minimal.

Aplikasi-aplikasi berbasis Java umumnya dikompilasi ke dalam p-code (bytecode) dan dapat dijalankan pada berbagai Mesin Virtual Java (JVM). Java merupakan bahasa pemrograman yang bersifat umum/non-spesifik (general purpose), dan secara khusus didisain untuk memanfaatkan dependensi implementasi seminimal mungkin. Karena fungsionalitasnya yang memungkinkan aplikasi Java mampu berjalan di beberapa platform sistem operasi yang berbeda, Java dikenal pula dengan slogannya, "Tulis sekali, jalankan di mana pun". Saat ini Java merupakan bahasa pemrograman yang paling populer digunakan, dan secara luas dimanfaatkan dalam pengembangan berbagai jenis perangkat lunak aplikasi ataupun aplikasi berbasis web. Bahasa pemrograman Java memiliki kelebihan sebagai berikut: 1. Multiplatform. Kelebihan utama dari Java ialah dapat

dijalankan di beberapa platform/sistem operasi komputer, sesuai dengan prinsip tulis sekali, jalankan di mana saja. Dengan kelebihan ini pemrogram cukup menulis sebuah program Java dan dikompilasi (diubah, dari bahasa yang dimengerti manusia menjadi bahasa mesin /bytecode) sekali lalu hasilnya dapat dijalankan di atas beberapa platform tanpa perubahan. Kelebihan ini memungkinkan sebuah program berbasis Java dikerjakan diatas sistem operasi Linux tetapi dijalankan dengan baik di atas Microsoft Windows. Platform yang didukung sampai saat ini adalah Microsoft Windows, Linux, Mac OS dan Sun Solaris. Penyebabnya adalah setiap sistem operasi menggunakan programnya sendiri-sendiri (yang dapat diunduh dari situs Java) untuk meninterpretasikan bytecode tersebut.

2. Mempunyai sifat Object Oriented Programming (OOP) atau pemrograman berorientasi objek.

Page 21: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

24

3. Class library yang lengkap, Java terkenal dengan kelengkapan library/perpustakaan (kumpulan program program yang disertakan dalam pemrograman Java) yang sangat memudahkan dalam penggunaan oleh para pemrogram untuk membangun aplikasinya. Kelengkapan perpustakaan ini ditambah dengan keberadaan komunitas Java yang besar yang terus menerus membuat perpustakaan-perpustakaan baru untuk melingkupi seluruh kebutuhan pembangunan aplikasi.

4. Bergaya C++, memiliki sintaks seperti bahasa pemrograman C++ sehingga menarik banyak pemrogram C++ untuk pindah ke Java. Saat ini pengguna Java sangat banyak, sebagian besar adalah pemrogram C++ yang pindah ke Java. Universitas-universitas di Amerika Serikat juga mulai berpindah dengan mengajarkan Java kepada murid-murid yang baru karena lebih mudah dipahami oleh murid dan dapat berguna juga bagi mereka yang bukan mengambil jurusan komputer.

5. Pengumpulan sampah otomatis, yaitu memiliki fasilitas pengaturan penggunaan memori sehingga para pemrogram tidak perlu melakukan pengaturan memori secara langsung (seperti halnya dalam bahasa C++ yang dipakai secara luas).

Selain kelebihan diatas, bahasa pemrograman Java juga memiliki beberapa kekurangan:

1. Mudah didekompilasi. Dekompilasi adalah proses membalikkan dari kode jadi menjadi kode sumber. Ini dimungkinkan karena kode jadi Java merupakan bytecode yang menyimpan banyak atribut bahasa tingkat tinggi, seperti nama-nama kelas, metode, dan tipe data. Hal yang sama juga terjadi pada Platform Microsoft .NET. Dengan demikian, algoritma yang digunakan program akan lebih sulit disembunyikan dan mudah dibajak/direverse-engineer.

Page 22: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

25

2. Penggunaan memori yang banyak. Penggunaan memori untuk program berbasis Java jauh lebih besar daripada bahasa tingkat tinggi generasi sebelumnya seperti C/C++ dan Pascal 19 (lebih spesifik lagi, Delphi dan Objek Pascal). Seringnya ini bukan merupakan masalah bagi pihak yang menggunakan teknologi terbaru (karena tren memori terpasang makin murah), tetapi menjadi masalah bagi mereka yang masih harus berkutat dengan mesin komputer berumur lebih dari 4 tahun.

2.13 Perbandingan dengan Aplikasi yang Sudah Ada

Perbandingan aplikasi Tugas Akhir Monitoring Keberadaaan Objek melalui Perangkat Bergerak Berbasis Android dengan aplikasi yang sudah ada di masyarakat dapat dilihat pada Tabel 2.1.

Tabel 2.1 Tabel Perbandingan Aplikasi Tugas Akhir dengan

Aplikasi yang Sudah Ada No. Nama

Aplikasi Fitur

Menggunakan server untuk penyim-panan.

Mengirim pesan singkat berisi lokasi pengguna.

Menyim-pan dan melihat riwayat lokasi pengguna.

Menyimpan telepon yang datang.

1. Monitoring Keberada-an Objek melalui Perangkat Bergerak Berbasis Android.

Tidak. Ya (Pesan singkat berisi lokasi dan tautan lokasi).

Ya (Disimpan di basis data lokal, bisa dilihat melalui Google Maps dan

Tidak.

Page 23: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

26

pesan singkat).

2. Pingbot SMS-GPS Tracker [18].

Tidak. Ya (Pesan singkat hanya berisi tautan lokasi).

Tidak. Tidak.

3. Call GPS SMS Tracker [19].

Ya. Tidak. Ya (Disimpan di server, riwayat lokasi hanya bisa dilihat ketika login di server).

Ya (Disimpan di server terpusat).

Dari perbandingan di Tabel 2.1, aplikasi Monitoring Keberadaan Objek melalui Perangkat Bergerak berbasis Android difokuskan untuk mengetahui lokasi terkini dan riwayat lokasi pengguna aplikasi melalui pesan singkat. Sedangkan aplikasi Pingbot SMS-GPS Tracker tidak bisa melihat riwayat lokasi dari pengguna. Aplikasi Call GPS SMS Tracker bisa mengetahui riwayat lokasi namun hanya jika mempunyai akun pengguna di server terpusat.

2.14 Monitoring Keberadaan Objek. Monitoring keberadaan objek disini maksudnya adalah

memonitor lokasi objek baik secara realtime maupun tersimpan riwayat lokasinya. Objek disini berupa perangkat bergerak Android yang sudah terpasang aplikasi Monitoring Keberadaaan Objek melalui Perangkat Bergerak Berbasis Android di dalamnya.

Page 24: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

27

3 BAB III ANALISIS DAN PERANCANGAN SISTEM

Bab ini membahas tahap analisis permasalahan dan perancangan dari sistem yang akan dibangun. Analisis permasalahan membahas permasalahan yang yang diangkat dalam pengerjaan tugas akhir. Analisis kebutuhan mencantumkan kebutuhan-kebutuhan yang diperlukan perangkat lunak. Selanjutnya dibahas mengenai perancangan sistem yang dibuat. Pendekatan yang dibuat dalam perancangan ini adalah pendekatan berorientasi objek. Perancangan direpresentasikan dengan diagram UML (Unified Modelling Language).

3.1 Analisis

Tahap analisis dibagi menjadi beberapa bagian antara lain cakupan permasalahan, deskripsi umum sistem, kasus penggunaan sistem, dan kebutuhan perangkat lunak.

3.1.1 Analisis Permasalahan Permasalahan utama yang diangkat dalam pembuatan

Tugas Akhir ini adalah bagaimana cara mendeteksi lokasi terkini objek yang dimonitor dengan menggunakan pesan singkat pada sebuah aplikasi Android berbahasa pemrograman Java. Permasalahan kedua adalah bagaimana lokasi objek disimpan untuk menjadi riwayat lokasi dari objek. Permasalahan ketiga ialah bagaimana aplikasi mengirim lokasi terkini melalui pesan singkat ketika dalam situasi baterai habis ataupun situasi darurat. Untuk menemukan lokasi objek menggunakan metode reverse geocoding. Metode ini mengubah titik koordinat dari latitude dan longitude menjadi nama alamat yang lebih familiar dengan pengguna. Proses menemukan lokasi ini dilakukan di dalam background aplikasi berbasis servis. Selain itu untuk menyelesaikan permasalahan pertama juga digunakan broadcast receiver untuk menerima pesan singkat yang masuk ke dalam perangkat bergerak pengguna. Sedangkan untuk permasalahan

Page 25: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

28

kedua digunakan basis data SQLite untuk menyimpan riwayat lokasi dari objek. Selanjutnya untuk menjawab permasalahan ketiga yaitu pemeriksaan sisa baterai, dan pembacaan pesan singkat yang dikirim ke aplikasi digunakan metode broadcast receiver.

3.1.2 Deskripsi Umum Sistem Sistem yang dibuat yaitu berupa aplikasi berbasis Android.

Aplikasi ini dapat menampilkan lokasi, pemberitahuan dan riwayat lokasi sesuai dari kode tertentu yang dikirim oleh pemonitor kepada pengguna aplikasi melalui pesan singkat dan juga membalas melalui pesan singkat secara otomatis. Pengguna juga dapat melihat riwayat lokasinya melalui peta dari Google Maps yang sudah ada tanda riwayat lokasi pengguna.

Diharapkan dengan adanya aplikasi ini pemonitor dapat mengetahui lokasi dan keadaan pengguna ketika pemonitor tidak sedang berada bersama pengguna aplikasi ini.

3.1.3 Arsitektur Sistem Arsitektur dari sistem merupakan sekumpulan dari model-

model terhubung yang menggambarkan sifat dasar dari sebuah sistem. Keanekaragaman dari banyak model menggambarkan bagian berbeda atau pandangan yang berbeda dari suatu sistem. Sistem dapat dibangun dengan cara menyatukan sekumpulan komponen berdasarkan aturan tertentu. Pandangan yang berbeda dari tiap komponen bukan berarti komponen-komponen tersebut berlaku sebagai sebuah sistem yang berdiri sendiri.

Sebuah aplikasi tentunya membutuhkan arsitektur sistem untuk mendefinisikan komponen-komponen yang spesifik secara terstruktur.

Arsitektur sistem dari aplikasi Aplikasi Monitoring Keberadaan Objek Melalui Perangkat Bergerak Berbasis Android beserta penjelasannya dapat dilihat pada Gambar 3.1.

Page 26: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

29

Gambar 3.1 Arsitektur Sistem

Penjelasan dari arsitektur sistem di Gambar 3.1 adalah

sebagai berikut:

1. Pemonitor mengirim teks perintah yang berupa pesan singkat dengan format yang sudah ditentukan. Sistem menerima pesan singkat tersebut dan memeriksa apakah nomor

Basis Data

SQLite

Mengirim perintah melalui pesan singkat.

Memberikan informasi lokasi dan pemberitahuan.

Mengirim nama lokasi.

Meminta data lokasi dan nomor pemonitor.

Menyimpan nomor pemonitor dan lokasi.

Mengirim koordinat.

Koordinat posisi.

Pengguna

Pemonitor

1

2

3

4

5

6

7

Page 27: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

30

pengirim dan perintah yang diterima sesuai dengan format yang diinginkan.

2. Sistem kemudian mengambil informasi koordinat lokasi GPS dari perangkat bergerak Android yang dimiliki oleh pengguna.

3. Sistem kemudian mengirim koordinat dari GPS tersebut ke Google Maps API.

4. Google Maps API kemudian mengirim data nama lokasi menggunakan metode Reverse Geocoding ke dalam sistem sesuai dengan koordinat yang telah dikirim sebelumnya.

5. Sistem menyimpan lokasi yang telah didapat sebelumnya ke dalam basis data agar menjadi riwayat lokasi dan juga sistem menyimpan nomor penting yang didaftarkan pengguna aplikasi.

6. Sistem kemudian mendapat informasi lokasi dan informasi nomor penting dari basis data.

7. Sistem mengirim informasi yang berisi lokasi dan pemberitahuan dari pengguna ke pemonitor sesuai perintah yang diterima sebelumnya melalui pesan singkat.

3.1.4 Aktor Aktor mendefinisikan entitas-entitas yang terlibat dan

berinteraksi langsung dengan sistem. Entitas ini bisa berupa manusia maupun sistem atau perangkat lunak yang lain. Aktor yang terdapat pada sistem ini memiliki peran sebagai pengguna dan pemonitor.

3.1.5 Kasus Penggunaan Berdasarkan analisis spesifikasi kebutuhan fungsional dan

analisis aktor dari sistem dibuat kasus penggunaan sistem. Kasus-kasus penggunaan dalam sistem ini dijelaskan secara rinci pada subbab ini. Kasus penggunaan digambarkan dalam sebuah diagram kasus penggunaan. Diagram kasus penggunaan dapat dilihat pada Gambar 3.2. Tabel berisi penjelasan dari setiap kasus penggunaan dapat dilihat pada Tabel 3.1.

Page 28: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

31

Gambar 3.2 Diagram Kasus Penggunaan

System

Pemonitor

Pengguna Memasukkan nomor pemonitor ke dalam sistem

Menekan tombol darurat

Memonitor lokasi pengguna dengan mengirim pesan singkat

Memperbarui lokasi ketika berpindah tempat

Mengubah pengaturan notifikasi ketika baterai akan habis

Melihat riwayat lokasi pengguna melalui pesan singkat

Melihat riwayat lokasi pegguna melalui Google Maps

Page 29: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

32

Tabel 3.1 Tabel Kasus Penggunaan Kode Kasus Penggunaan Nama

MO-0001 Memonitor lokasi pengguna dengan mengirim pesan singkat.

MO-0002 Melihat riwayat lokasi pengguna melalui pesan singkat.

MO-0003 Memperbarui lokasi ketika berpindah tempat.

MO-0004 Mengubah pengaturan notifikasi ketika baterai akan habis.

MO-0005 Memasukkan nomor pemonitor ke dalam sistem.

MO-0006 Menekan tombol darurat.

MO-0007 Melihat riwayat lokasi pengguna melalui Google Maps.

3.1.5.1 Memonitor Lokasi Pengguna Dengan Mengirim Pesan Singkat

Pada kasus peggunaan ini sistem menerima masukan berupa pesan singkat yang berisi kode untuk memproses kode program. Sebelum memproses sistem memeriksa apakah nomor pengirim pesan singkat telah ada di basis data SQLite. Setelah itu sistem memeriksa kode yang dikirim apakah sudah memenuhi, kemudian mengambil koordinat dari GPS dan mengubahnya menjadi nama tempat menggunakan Metode reverse geocoding. Sistem kemudian mengirim pesan singkat berisi nama lokasi pengguna ke pemonitor. Spesifikasi kasus penggunaan ini dapat dilihat pada Tabel 3.2 Diagram aktivitas dan diagram urutan dari kasus penggunaan ini bisa dilihat pada Gambar 3.3 dan Gambar 3.4.

Page 30: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

33

Tabel 3.2 Spesifikasi Kasus Penggunaan Memonitor Lokasi Pengguna dengan Mengirim Pesan Singkat

Nama Memonitor lokasi pengguna dengan mengirim pesan singkat.

Kode MO-0001

Deskripsi Pemonitor mengirim pesan singkat berisi permintaan lokasi pengguna dengan mengirimkan pesan singkat ke pengguna aplikasi.

Tipe Fungsional. Pemicu Pemonitor mengirim pesan singkat berisi kode ke

pengguna aplikasi. Aktor Pemonitor. Kondisi Awal Pemonitor belum memperoleh pesan singkat berisi

lokasi terkini pengguna. Aliran: Kejadian Normal

1. Pemonitor mengirim pesan singkat berisi kode. 2. Sistem memeriksa apakah nomor pengirim pesan

singkat sudah terdaftar. 3. Sistem memeriksa apakah kode yang dikirim

sudah benar. 4. Sistem mengambil koordinat dan mengubahnya

menjadi nama tempat. 5. Sistem mengirim pesan singkat berisi lokasi ke

pemonitor.

Kejadian Alternatif - Kondisi Akhir Pemonitor menerima pesan singkat berisi lokasi

terkini pengguna.

Page 31: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

34

Gambar 3.3 Diagram Urutan Memonitor Lokasi Pengguna dengan

Mengirim Pesan Singkat

: Pemonitor

Menu utama<<Boundary>>

Broadcast SMS<<Controller>>

DB Data Source<<Controller>>

kontak<<Entity>>

1 : Mengirim pesan singkat berisi perintah()

2 : Mengambil kontak tersimpan()3 : Menerima pesan singkat()

4 : Meverifikasi perintah pesan dan nomor pengirim dengan kontak yang tersimpan()

5 : melakukan konfirmasi jika perintah dan nomor pengirim benar()

6 : Mengambil koordinat dan mengubah menjadi lokasi()

7 : memberikan lokasi()

8 : mengirim pesan singkat berisi lokasi()

Page 32: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

35

Gambar 3.4 Diagram Aktivitas Memonitor Lokasi Pengguna

dengan Mengirim Pesan Singkat

3.1.5.2 Melihat Riwayat Lokasi Pengguna Melalui Pesan Singkat

Sistem dapat mengirim lokasi dari pengguna aplikasi kepada pemonitor melalui pesan singkat sesuai dengan kode dan tanggal yang dikirim oleh pemonitor. Spesifikasi kasus penggunaan ini dapat dilihat pada Tabel 3.3. Diagram aktivitas

Aktor System

Mengirim Pesan singkat berisi perintah ke aplikasi

meverifikasi perintah dari pengirim pesan singkat

mangambil koordinat lokasi objek yang dimonitor

Mengubah koordinat lokasi menjadi nama tempat

Mengirim pesan singkat berisi nama lokasi ke pemonitor

Menerima pesan singkat berisi nama lokasi

Meverifikasi nomor pengirim dengan database yang tersimpan

Page 33: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

36

dan diagram urutan dari kasus penggunaan ini bisa dilihat pada Gambar 3.6 dan Gambar 3.5.

Tabel 3.3 Spesifikasi Kasus Penggunaan Melihat Riwayat Lokasi Pengguna Melalui Pesan Singkat.

Nama Melihat riwayat lokasi pengguna melalui pesan singkat.

Kode MO-0002 Deskripsi Pemonitor mengirim permintaan riwayat lokasi dari

pengguna aplikasi melalui pesan singkat. Tipe Fungsional. Pemicu Pemonitor mengirim pesan singkat berisi kode dan

tanggal ke pengguna aplikasi. Aktor Pemonitor.

Kondisi Awal Pemonitor belum menerima pesan singkat berisi riwayat lokasi.

Aliran: Kejadian Normal 1. Pemonitor mengirim pesan singkat berisi kode

dan tanggal. 2. Sistem memeriksa apakah nomor pemonitor

tersimpan di basis data dan membaca kode yang ada di pesan singkat.

3. Sistem mengambil nama lokasi yang sudah tersimpan di basis data sesuai dengan tanggal di pesan singkat yang dikirim pemonitor.

4. Sistem mengirim riwayat lokasi sesuai tanggal yang diminta pemonitor melalui pesan singkat.

Kejadian Alternatif -

Kondisi Akhir Pemonitor menerima pesan singkat berisi riwayat lokasi.

Page 34: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

37

Gambar 3.5 Diagram Urutan Melihat Riwayat Lokasi Pengguna

Melalui Pesan Singkat.

: Pemonitor

Menu utama<<Boundary>>

kontrol lokasi<<Control>>

Broadcast sms<<Control>>

kontrol kontak<<Control>>

lokasi<<Entity>>

kontak<<Entity>>

1 : mengirim pesan singkat berisi perintah()

2 : menerima pesan singkat()

3 : mengambil semua kontak()

4 : memberikan kontak()

5 : meverifikasi nomor dan perintah()

6 : mengambil lokasi dan koordinat yang sudah tersimpan()

7 : mengirim data lokasi dan koordinat()

8 : mengirim pesan singkat berisi riwayat lokasi()

Page 35: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

38

Gambar 3.6 Diagram Aktivitas Melihat Riwayat Lokasi Pengguna

Melalui Pesan Singkat.

3.1.5.3 Memperbarui Lokasi Ketika Berpindah Tempat

Sistem memeriksa lokasi ketika pengguna berpindah lokasi dari tempat sebelumnya maka tempat baru akan dimasukkan dalam basis data riwayat lokasi. Spesifikasi kasus penggunaan ini dapat dilihat pada Tabel 3.4. Diagram aktivitas dan diagram urutan dari kasus penggunaaan ini bisa dilihat pada Gambar 3.7 dan Gambar 3.8.

pemonitor Sistem

Mengirim pesan singkat berisi perintah

Meverifikasi nomor pengirim pesan singkat dengan basis data

Membaca perintah yang berada di pesan singkat

Mengambil nama lokasi dari basis data sesuai dengan perintah yang diterima

Mengirim nama lokasi melalui pesan singkat

Menerima nama lokasi melalui pesan singkat

Page 36: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

39

Tabel 3.4 Memperbarui Lokasi Ketika Berpindah Tempat Nama Menampilkan kode program. Kode MO-0003 Deskripsi Sistem memeriksa lokasi terkini dari pengguna dan

memperbarui riwayat lokasi setiap berpindah lokasi.

Tipe Fungsional. Pemicu Pengguna berpindah tempat.

Aktor Pengguna.

Kondisi Awal Pengguna aplikasi belum berpindah tempat.

Aliran: Kejadian Normal 1. Sistem akan memeriksa lokasi pengguna.

2. Jika Pengguna berpindah lokasi dari lokasi sebelumnya maka lokasi baru akan disimpan ke dalam basis data.

Kejadian Alternatif Jika pengguna masih di tempat yang sama maka lokasi tidak akan disimpan.

Kondisi Akhir Sistem menyimpan lokasi perpindahan tempat pengguna aplikasi ke dalam basis data lokasi.

Kebutuhan Khusus Tidak ada.

Page 37: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

40

Gambar 3.7 Diagram Urutan Memperbarui Lokasi Ketika

Berpindah Tempat

Gambar 3.8 Diagram Aktivitas Memperbarui Lokasi Ketika

Berpindah Tempat

: Pengguna

halaman utama<<Boundary>>

control lokasi<<Controller>>

lokasi<<Entity>>

1 : Membuka halaman utama()

2 : perubahan lokasi setiap berpindah tempat()

3 : memasukkan data lokasi()

pengguna sistem

menjalankan aplikasi

memperbarui lokasi ketika objek berpindah tempat

menyimpan data lokasi ke dalam basis data

Page 38: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

41

3.1.5.4 Mengubah Pengaturan Notifikasi Ketika Baterai Akan Habis.

Pada kasus penggunaan ini pengguna memilih terlebih dahulu kontak yang akan dikirim notifikasi baterai akan habis, kemudian ketika baterai Android akan habis sistem akan secara otomatis mengirim pemberitahuan lokasi dan notifikasi baterai akan habis kepada pemonitor. Spesifikasi kasus penggunaan ini dapat dilihat pada Tabel 3.5. Diagram aktivitas dan diagram urutan dapat dilihat pada Gambar 3.9 dan Gambar 3.10.

Tabel 3.5 Spesifikasi Kasus Penggunaan Mengubah Pengaturan

Notifikasi Ketika Baterai Akan Habis Nama Mengubah pengaturan notifikasi ketika baterai akan

habis. Kode MO-0004

Deskripsi Pengguna mengaktifkan notifikasi baterai habis dan memilih nomor yang akan dikirim. Kemudian sistem akan otomatis mengirim pemberitahuan beserta lokasi pengguna ketika baterai akan habis.

Tipe Fungsional. Pemicu Baterai dari Android akan habis.

Aktor Pengguna. Kondisi Awal Pengguna masuk halaman mengaktifkan notifikasi

baterai dan halaman memilih nomor yang akan dikirim notifikasi baterai habis.

Aliran: - Kejadian

Normal

1. Pengguna mengaktifkan notifikasi baterai habis.

2. Pengguna memilih nomor yang akan menerima notifikasi baterai habis.

3. Sistem otomatis mengirim pesan singkat berisi notifikasi baterai habis dan lokasi ke nomor pengguna terpilih.

- Kejadian Alternatif - Kondisi Akhir Pemonitor terpilih mendapat pesan singkat berisi

pemberitahuan baterai habis dan lokasi pengguna.

Page 39: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

42

Gambar 3.9 Diagram Urutan Mengubah Pengaturan Notifikasi

Ketika Baterai Akan Habis

: Pengguna

Pengaturan notifikasi baterai<<Boundary>>

Form lihat kontak<<Boundary>>

Kontrol Kontak<<Controller>>

Kontrol Lokasi<<Controller>>

Kontrol baterai<<Controller>>

Kontak<<Entity>>

: Pemonitor

1 : Mengaktifkan notifikasi baterai()

2 : Query Mengambil semua kontak()

3 : Memberikan kontak yang ada()

4 : Menampilkan kontak()5 : Memilih nomor yang akan dikirim notifikasi()

6 : menerima data kontak yang dipilih()

7 : mengakses baterai()

8 : memberikan pemberitahuan baterai habis()

9 : mendapatkan koordinat dan mengubahnya ke lokasi()

10 : mengirim data kontak yang sudah dipilih()

11 : mengirim koordinat lokasi()

12 : mengirim pesan singkat berisi lokasi dan pemberitahuan baterai habis()

Page 40: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

43

Gambar 3.10 Diagram Aktivitas Mengubah Pengaturan Notifikasi

Ketika Baterai Akan Habis

3.1.5.5 Memasukkan Nomor Pemonitor ke Dalam Sistem

Pada kasus penggunaan ini, sistem menerima input berupa nama dan nomor pemonitor dari pengguna. Setelah itu sistem akan memasukkannya ke dalam basis data SQLite. Spesifikasi kasus penggunaan ini dapat dilihat pada Tabel 3.6. Diagram aktivitas dan diagram urutan dari kasus penggunaan ini juga bisa dilihat pada Gambar 3.11 dan Gambar 3.12.

Pengguna Sistem pemonitor

Mengaktifkan notifikasi baterai habis

Mengakses daya sisa baterai

mendapatkan koordinat lokasi objek yang dimonitor

Mendapatkan nama lokasi dari koordinat lokasi

Mengirim data lokasi ketika baterai akan habis melalui pesan singkat

Menerima pesan singkat berisi data lokasi

Mengambil nama dan nomor sesuai yang dipilih dari basis data

Page 41: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

44

Tabel 3.6 Spesifikasi Kasus Penggunaan Memasukkan Nomor Pemonitor ke dalam Sistem

Nama Memasukkan nomor pemonitor ke dalam sistem.

Kode MO-0005

Deskripsi Sistem memasukkan masukan data pemonitor ke dalam basis data.

Tipe Fungsional. Pemicu Pengguna menekan tombol submit setelah mengisi

kolom nama dan nomor pemonitor. Aktor Pengguna. Kondisi Awal Pengguna berada dalam halaman masukkan kontak

dan akan memasukkan nomor dan nama pemonitor. Aliran: - Kejadian

Normal

1. Pengguna mengisi nama dan nomor pemonitor. 2. Pengguna menekan tombol submit. 3. Sistem menyimpan nama dan nomor pemonitor ke

dalam basis data SQLite. - Kejadian Alternatif -

Kondisi Akhir Sistem berhasil memasukkan data nama dan nomor pemonitor ke dalam basis data.

Page 42: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

45

Gambar 3.11 Diagram Urutan Memasukkan Nomor Pemonitor ke

Dalam Sistem

Form Memasukkan Kontak<<Boundary>>

: Pengguna

DB Data Source<<Control>>

Kontak<<Entity>>

1 : Menampilkan form memasukkan kontak()2 : Memasukkan data kontak()

3 : Menerima data kontak() 4 : Menyimpan data kontak()

5 : memberi konfirmasi()

6 : menerima konfirmasi input kontak()

7 : menampilkan data kontak()

Page 43: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

46

Gambar 3.12 Diagram Aktivitas Memasukkan Nomor Pemonitor ke

Dalam Sistem 3.1.5.6 Menekan Tombol Darurat.

Pada kasus penggunaan ini, Pengguna menekan tombol darurat dan memilih nomor pemonitor untuk dikirim pesan singkat berisi pemberitahuan darurat dan lokasi terkini dari pengguna aplikasi. Pemonitor yang dikirim tombol darurat sudah tersimpan di dalam basis data SQLite sbelumnya Spesifikasi kasus penggunaan dapat dilihat di Tabel 3.7. Diagram aktivitas dan diagram urutan dari kasus penggunaan bisa dilihat pada Gambar 3.13 dan Gambar 3.14.

Pengguna Sistem

Memasukkan nama dan nomor pemonitor

Menyimpan nama dan nomor pemonitor ke dalam basis data

Page 44: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

47

Tabel 3.7 Spesifikasi Kasus Penggunaan Menekan Tombol Darurat Nama Menekan tombol darurat. Kode MO-0005

Deskripsi Sistem mengirim lokasi terkini dan pemberitahuan darurat pengguna aplikasi ke pemonitor setelah pengguna menekan tombol darurat.

Tipe Fungsional. Pemicu Pengguna menekan tombol darurat.

Aktor Pengguna. Kondisi Awal Pengguna aplikasi belum menekan tombol darurat

dan pemonitor belum mendapat pesan singkat berisi lokasi terkini dan pemberitahuan darurat.

Aliran: - Kejadian

Normal

1. Pengguna menekan tombol darurat dan memilih nomor pemonitor.

2. Sistem mengirim ppesan singkat berisi lokasi terkini dan pemberitahuan darurat kepada pemonitor.

- Kejadian Alternatif - Kondisi Akhir Pemonitor mendapat pesan singkat berisi lokasi

terkini dan pemberitahuan darurat.

Page 45: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

48

Gambar 3.13 Diagram Urutan Menekan Tombol Darurat

: Pengguna

form tombol darurat<<Boundary>>

DB Data Source<<Controller>>

kontak<<Entitiy>>

control lokasi<<Controller>>

1 : Memilih pilihan tombol darurat()

2 : Query mengambil semua kontak()

3 : Memberikan kontak yang sudah tersimpan()

4 : Menampilkan nomor yang akan dipilih untuk dikirim pesan darurat()

5 : memilih nomor yang akan dikirim pesan darurat()

6 : Mengambil kontak yang sudah dipilih()

7 : Memberikan letak lokasi terkini()

8 : Konfirmasi pesan darurat berhasil dikirim()

Page 46: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

49

Gambar 3.14 Diagram Aktivitas Menekan Tombol Darurat

Pengguna Sistem Pemonitor

Menekan tombol darurat

Mengambil nama dan nomor pemonitor dari basis data

Memilih nama dan nomor pemonitor

Mengambil data koordinat

Mengubah koordinat menjadi nama lokasi

Mengirim pesan singkat berisi data lokasi ke pemonitor yang dipilih

Menerima pesan singkat berisi data lokasi dan pesan darurat

Page 47: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

50

3.1.5.7 Melihat Riwayat Lokasi Pengguna Melalui Google Maps.

Sistem menampilkan riwayat lokasi pengguna yang sudah tersimpan ke dalam basis data untuk ditampilkan ke dalam Google Maps. Spesifikasi kasus penggunaan dapat dilihat padaTabel 3.8. Sedangkan Diagram urutan dan Diagram aktivitas dapat dilihat pada Gambar 3.16 dan Gambar 3.15.

Tabel 3.8 Spesifikasi Kasus Penggunaan Melihat Riwayat Lokasi

Pengguna Melalui Google Maps Nama Melihat riwayat lokasi pengguna melalui Google

Maps. Kode MO-0007

Deskripsi Sistem menampilkan riwayat lokasi pengguna yang sudah disimpan di basis data ke dalam Google Maps di halaman lihat lokasi.

Tipe Fungsional. Pemicu Pengguna menekan tombol lihat lokasi.

Aktor Pengguna. Kondisi Awal Pengguna berada di halaman utama.

Aliran: - Kejadian

Normal

1. Pengguna menekan tombol lihat lokasi. 2. Sistem membuka mengambil data lokasi dari

basis data. 3. Sistem menampilkan data lokasi yang sudah di

ambil dari basis data. - Kejadian Alternatif -

Kondisi Akhir Sistem menampilkan data riwayat lokasi di halaman lihat lokasi.

Page 48: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

51

Gambar 3.15 Diagram Urutan Melihat Riwayat Lokasi Pengguna

melalui Google Maps

Gambar 3.16 Diagram Aktivitas Melihat Riwayat Lokasi Pengguna

melalui Google Maps

: Pengguna

Lihat lokasi<<Boundary>>

DB data Source<<Control>>

Lokasi<<Entity>>

1 : Klik Halaman()

2 : Mengambil koordinat dan nama lokasi()

3 : Mengirim koordinat dan nama lokasi()

4 : Menampilkan halaman berisi koordinat dan nama lokasi()

Pengguna Sistem

Membuka halaman lihat lokasi

Mengambil maps dari Google Maps API

Mengambil data lokasi dari basis data riwayat lokasi

Menampilkan riwayat lokasi dan lokasi sekarang di halaman lihat lokasi

Page 49: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

52

3.1.6 Spesifikasi Kebutuhan Perangkat Lunak. Bagian ini berisi tentang kebutuhan perangkat lunak.

Kebutuhan perangkat lunak dalam sistem ini mencakup kebutuhan fungsional saja. Pada bab ini juga dijelaskan tentang spesifikasi terinci pada masing-masing kebutuhan fungsional. Rincian spesifikasi dari kasus penggunaan disajikan dalam bentuk tabel.

3.1.6.1 Kebutuhan Fungsional Sistem

Kebutuhan fungsional berisikan proses-proses yang dibutuhkan dalam sistem dan harus djalankan. Kebutuhan fungsional sistem dideskripsikan dalam Tabel 3.9.

Tabel 3.9 Kebutuhan Fungsional Kode

Kebutuhan Kebutuhan Fungsional Deskripsi

F-0001 Memonitor lokasi pengguna dengan mengirim pesan singkat.

Mengirim lokasi terkini pengguna aplikasi melalui pesan singkat berdasarkan pesan singkat yang dikirim oleh pemonitor.

F-0002 Melihat riwayat lokasi pengguna melalui pesan singkat.

Mengirim pesan singkat berisi lokasi pengguna aplikasi ke pemonitor sesuai dengan kode dan tanggal yang dikirim pemonitor.

F-0003 Memperbarui lokasi ketika berpindah tempat.

Sistem memeriksa lokasi terkini dari pengguna dan memperbarui riwayat lokasi setiap lokasi dari tempat sebelumnya.

F-0004 Mengubah pengaturan notifikasi ketika baterai akan habis.

Pengguna mengaktifkan notifikasi baterai habis dan memilih nomor yang akan dikirim. Kemudian sistem akan otomatis mengirim pemberitahuan beserta lokasi pengguna ketika baterai akan habis.

F-0005 Memasukkan nomor pemonitor ke

Sistem memasukkan masukan data pemonitor ke dalam basis data.

Page 50: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

53

Kode Kebutuhan

Kebutuhan Fungsional Deskripsi

dalam sistem.

F-0006 Menekan tombol darurat.

Mengirim pesan singkat kepada pemonitor berisi pemberitahuan lokasi terkini dan pemberitahuan darurat dengan menekan timbol darurat.

F-0007 Melihat riwayat lokasi pegguna melalui Google Maps.

Sistem menampilkan riwayat lokasi pengguna yang sudah disimpan di basis data ke dalam Google Maps di halaman lihat lokasi.

3.2 Perancangan Sistem Penjelasan tahap perancangan perangkat lunak dibagi

menjadi beberapa bagian yaitu perancangan diagram kelas, perancangan proses analisis, dan perancangan antarmuka.

3.2.1 Perancangan Diagram Kelas Perancangan diagram kelas berisi kelas-kelas yang

dirancang untuk membangun sistem.

3.2.1.1 Diagram Kelas Aplikasi Dalam pembuatan aplikasi perangkat bergerak, kelas

yang digunakan adalah sebanyak 16 kelas. Kelas tersebut terdiri dari kelas MenuUtama, AndroidPreference, CustomGridViewAdapter, Item, ViewData, EditData, CreateData, LocationHistoryService, LocationMap, IncomingSms, LocationService, ViewDarurat, Kontak, Lokasi, DBDataSource, dan DBHelper.

Kelas MenuUtama berfungsi sebagai kontroler dari aktivitas utama aplikasi. Aktivitas utama menampilkan menu untuk pengguna. Kelas LocationMap berfungsi sebagai kelas yang menampilkan lokasi terkini dan riwayat lokasi dari

Page 51: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

54

pengguna. Kelas CustomGridViewAdapter dan kelas Item berfungsi sebagai controller tampilan dari kelas MenuUtama. Kelas AndroidPreference sebagai kelas controller untuk pengaturan notifikasi baterai. Kelas IncomingSms berfungsi sebagai controller menerima pesan singkat yang masuk dan sebagai controller dari kelas servis LocationService. Kelas LocationHistoryService sebagai kelas kontroler untuk menyimpan riwayat lokasi dari pengguna. Kelas CreateData berfungsi sebagai kelas controller untuk memasukkan data kontak. Kelas ViewData berfungsi sebagai kontroler menampilkan data kontak sedangkan kelas EditData berfungsi sebagai controller untuk merubah data kontak yang sudah tersimpan. Kelas DBDataSource dan DBHelper sebagai controller untuk menyimpan data ke dalam basis data SQLite. Kelas Lokasi dan Kontak berfungsi sebagai model dari aplikasi. Diagram kelas digambarkan pada Gambar C.1.

3.2.2 Perancangan Algoritma Pada subbab ini akan dijelaskan perancangan algoritma

dalam proses yang akan digunakan pada pembuatan aplikasi.

3.2.2.1 Algoritma Mengirim Pesan Singkat Berisi Lokasi Terkini

Ketika Pemonitor ingin mengetahui lokasi terkini dari poengguna aplikasi, pemonitor mengirim pesan singkat berisi kode dan Sistem kemudian mengambil koordinat lokasi dari GPS dan mengubahnya menjadi nama lokasi menggunakan reverse geocoding dan mengirim kembali ke pemonitor. Diagram alir dapat dilihat pada Gambar 3.17.

Page 52: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

55

Mulai Mengirim pesan singkat berisi kode

Memeriksa kode dan nomor pengirim Jika benar

Mengambil koordinat lokasi dari

GPS

Mengubah koordinat lokasi menjadi nama tempat dengan

reverse geocoding

Berhasil Mengubah

menjadi nama tempat

Mengirim pesan singkat berisi nama lokasi dan tautan

lokasi ke pemonitor

Selesai

tidak

ya

tidak

ya

Mengirim pesan singkat berisi tautan

lokasi kepada pemonitor

Jika Ada internettidak

Ya

Mengirim pesan singkat berisi

keyword salah kepada pemonitor

Gambar 3.17 Diagram Alir Algoritma Mengirim Pesan Singkat

Berisi Lokasi Terkini 3.2.2.2 Algoritma Memperbarui Lokasi Ketika

Berpindah Tempat Proses pembaruan lokasi digunakan ketika pengguna

berpindah tempat dari tempat sebelumnya. Sistem mengambil data lokasi terakhir dari basis data kemudian membandingkan dengan lokasi terkini dari pengguna menggunakan metode reverse geocoding. Jika hasil perbandingan nama tempat berbeda dengan lokasi sebelumnya maka lokasi terbaru akan dimasukkan ke basis data lokasi, jika tidak maka tidak dimasukkan. Diagram alir dapat dilihat pada Gambar 3.18.

Page 53: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

56

MulaiMendeteksi

koordinat lokasi sekarang

Mengambil data lokasi terakhir dari

basis data

Membandingkan data lokasi terkini dengan data lokasi terakhir tersimpan

Jika nama lokasi berbeda

Memasukkan data lokasi terkini ke

basis data

Selesai

ya

tidak

Gambar 3.18 Diagram Alir Algoritma Memperbarui Lokasi Ketika

Berpindah Tempat

3.2.2.3 Algoritma Mengirim Pesan Singkat Notifikasi Baterai Habis

Ketika baterai perangkat bergerak Android akan habis sistem otomatis akan mengirim pesan kepada pemonitor yang telah dipilih sebelumnya. Aplikasi mengakses baterai menggunakan metode broadcast receiver. Diagram alir dapat dilihat pada Gambar 3.19.

Page 54: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

57

MulaiMendeteksi status

baterai dengan broadcast receiver

Jika baterai akan habis

Mendapatkan nomor kontak yang sudah dipilih dari

basis data

Mendapatkan koordinat lokasi dan mengubah ke nama

lokasi dengan reverse geocoding

Mengirim data lokasi dan

pemberitahuan baterai akan habis

melalui pesan singkat ke

pemonitor terpilih

Selesai

Mengaktifkan notifkasi baterai

habisya

tidak

ya

tidak

Gambar 3.19 Diagram Alir Algoritma Mengirim Pesan Singkat

Notifikasi Baterai Habis

3.2.3 Perancangan Manajemen Data Pada subbab ini akan dijelaskan perancangan basis data

yang akan digunakan dalam pembuatan sistem ini.

3.2.3.1 Perancangan Basis data Dalam perancangan bass data, Sistem akan menggunakan

2 entitas yang direalisasikan dalam bentuk tabel. 2 tabel tersebut adalah data_kontak dan data_lokasi. Tabel data_kontak berisi data kontak dari pemonitor sedangkan tabel data_lokasi berisi riwayat lokasi tersimpan. Dari perancangan ini akan diimpementasikan pada basis data SQLite. Conceptual data model dapat dilihat pada Gambar 3.20. Physical data model bisa dilihat pada Gambar 3.21.

Page 55: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

58

Gambar 3.20 Conceptual Data Model Basis Data Aplikasi

Gambar 3.21 Physical Data Model Basis Data Aplikasi

3.2.4 Perancangan Antarmuka Pada subbab ini akan dijelaskan perancangan antarmuka

sistem yang akan dibuat.

3.2.4.1 Antarmuka Aplikasi Perangkat Bergerak Pada aplikasi perangkat bergerak, antarmuka yang akan

ditampilkan meliputi antarmuka menu utama, lihat lokasi, masukkan kontak, melihat kontak, tombol darurat, halaman aksi kontak dan mengubah data kontak. Keterangan dan deskripsi perancangan antarmuka dapat dilihat pada Tabel 3.10.

Page 56: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

59

Lihat Lokasi

Tabel 3.10 Deskripsi Perancangan Antarmuka Aplikasi Perangkat Antarmuka Keterangan Menu Utama

Deskripsi Pada halaman menu utama ditampilkan 4 buah tombol untuk masuk halaman yang lain. Perancangan

Gambar 3.22 Perancangan Halaman Menu Utama

Masukkan Kontak

Lihat Kontak Tombol Darurat

Page 57: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

60

Masukkan Kontak

Deskripsi Halaman ini menampilkan kotak untuk memasukkan nama dan nomor kontak, sekaligus tombol submit untuk memasukkan ke basis data. Perancangan

Masukkan Kontak

Nama Kontak

Nomor Kontak

Gambar 3.23 Perancangan Halaman Masukkan Kontak

Submit

Page 58: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

61

Gambar 3.24 Perancangan Halaman Lihat Kontak

Melihat Kontak

Deskripsi Sistem menampilkan kontak pemonitor yang telah dimasukkan oleh pengguna. Data ini ditampilkan setelah pengguna memilih lihat kontak pada halaman menu utama. Perancangan

Data Kontak Kontak 1 Kontak 2 Kontak 3

Page 59: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

62

Gambar 3.25 Perancangan Halaman Tombol Darurat

Halaman Tombol Darurat

Deskripsi Sistem menampilkan kontak pemonitor yang sudah tersimpan sebelumnya di basis data. Pengguna menekan nomor ini agar dapat mengirim pesan singkat darurat. Perancangan

Pilih Nomor: Kontak 1 Kontak 2 Kontak 3 Kontak 4

Page 60: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

63

Gambar 3.26 Perancangan Halaman Aksi Kontak

Halaman Aksi Kontak

Deskripsi Sistem menampilkan halaman aksi kontak, disini ada tombol ubah data kontak, hapus data kontak dan aktif/nonaktifkan kontak untuk mendapat notifikasi baterai habis. Halaman ini ditampilkan setelah pengguna menekan kontak di halaman lihat kontak. Perancangan

Pilih Aksi

Kontak x mendapat notifikasi baterai habis.

Ubah Data Kontak

Hapus Data Kontak

Aktif/non aktif notif

baterai

Page 61: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

64

Gambar 3.27 Perancangan Halaman Lihat Lokasi

Halaman Lihat Lokasi

Deskripsi Menampilkan sebuah peta yang berisi lokasi terkini dan riwayat lokasi sebelumnya yang sudah tersimpan di basis data. Halaman ini ditampilkan setelah pengguna menekan tombol lihat lokasi di halaman menu utama. Perancangan

Tulisan letak Lokasi terkini

Peta lokasi terkini dan riwayat lokasi sebelumnya

Page 62: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

65

Gambar 3.28 Perancangan Halaman Ubah Kontak

Halaman mengubah data kontak

Deskripsi Halaman ini menampilkan kotak berisi nama dan nomor kontak yang sudah tersedia untuk bisa diubah harus menekan tombol save, sedangkan jika tidak mengubah tekan tombol cancel. Halaman ini muncul jika menekan tombol ubah kontak di halaman aksi. Perancangan

Ubah kontak

Nama kontak Nomor kontak

Cancel Save

Page 63: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

66

[Halaman ini Sengaja Dikosongkan]

Page 64: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

67

4 BAB IV IMPLEMENTASI

Pada bab ini akan dibahas mengenai implementasi dari perancangan perangkat lunak yang didasarkan pada Bab III.

4.1 Implementasi Antarmuka Pada subbab ini akan dijelaskan tentang implementasi

antarmuka sistem yang menjadi bagian terluar sekaligus bagian yang akan berinteraksi langsung dengan pengguna.

4.1.1 Antarmuka Menu Utama Pada antarmuka menu utama, terdapat tombol yang

berfungsi untuk melanjutkan ke halaman lihat lokasi, halaman memasukkan data kontak, halaman melihat data kontak dan halaman tombol darurat. Implementasi dapat dilihat pada Gambar 4.1.

4.1.2 Antarmuka Lihat Lokasi Pada antarmuka lihat lokasi terdapat sebuah peta yang

terdapat marker dan menunjukkan lokasi terkini, selain itu juga terdapat marker yang menunjukkan riwayat lokasi yang tersimpan di basis data dan juga tulisan yang menunjukkan lokasi terkini. Tampilan antarmuka dapat dilihat pada Gambar 4.2.

4.1.3 Antarmuka Masukan Data Kontak Di antarmuka ini terdapat dua kotak masukan untuk

menulis nama dan nomor pemonitor. Dibawahnya ada tombol submit untuk memasukkan nama dan nomor pemonitor ke dalam basis data. Implementasi tampilan antarmuka dapat dilihat pada Gambar 4.3.

Page 65: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

68

Gambar 4.1 Antarmuka Menu Utama

Gambar 4.2 Antarmuka Lihat Lokasi

Page 66: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

69

Gambar 4.3 Antarmuka Masukan Data Kontak

4.1.4 Antarmuka Halaman Tombol Darurat Pada antarmuka ini terdapat list nomor kontak pemonitor

yang sudah tersimpan di basis data. Pengguna dapat memilih pemonitor untuk mengirim pesan singkat darurat. Implementasi antarmuka dapat dilihat pada Gambar 4.4.

4.1.5 Antarmuka Halaman Melihat Data Kontak Pada Antarmuka ini terdapat list nomor kontak pemonitor

yang udah tersimpan di basis data. Pengguna dapat memilih kontak pemonitor yang ada untuk mendapatkan menu aksi. Implementasi antarmuka dapat dilihat pada Gambar 4.5.

Page 67: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

70

Gambar 4.4 Antarmuka Halaman Tombol Darurat

Gambar 4.5 Antarmuka Halaman Melihat Data Kontak

Page 68: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

71

4.1.6 Antarmuka Halaman Aksi Kontak Di halaman antarmuka ini terdapat 3 buah tombol yang

memiliki fungsi yang berbeda. Tombol pertama yaitu tombol ubah data kontak yang berfungsi mengubah data kontak pemonitor yang sudah tersimpan, tombol kedua yaitu tombol menghapus data kontak berguna untuk menghapus data kontak pemonitor, tombol terakhir bergambar baterai untuk mengaktifkan/menon-aktifkan notifikasi baterai habis. Implementasi antarmuka dapat dilihat pada Gambar 4.6.

4.1.7 Antarmuka Halaman Ubah Data Kontak Pada halaman antarmuka ini terdapat 2 kotak masukan

yang berisi nama dan nomor kontak pemonitor yang sudah tersimpan sebelumnya di basis data. Selain itu terdapat 2 tombol yaitu tombol save untuk menyimpan hasil perubahan dan tombol cancel untuk kembali ke halaman sebelumnya. Implementasi dapat dilihat pada Gambar 4.7.

Gambar 4.6 Antarmuka halaman aksi kontak

Page 69: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

72

Gambar 4.7 Antarmuka halaman ubah data kontak

4.2 Implementasi Fitur Di dalam subbab ini akan dijelaskan implementasi yang

berupa baris kode yang sesuai dengan kebutuhan fungsional.

4.2.1 Fitur Memonitor Lokasi Pengguna Dengan Mengirim Pesan Singkat Fitur ini dijalankan ketika pemonitor mengirim pesan

singkat berisi kode kepada pengguna aplikasi. Broadcast receiver menerima dan memeriksa pesan singkat yang masuk, setelah itu memicu kelas LocationService untuk mencari lokasi terkini dari pengguna dan mengirimkannya melalui pesan singkat ke pemonitor. Implementasi fitur ini bisa dilihat pada Tabel 4.1 dan Tabel 4.2.

Page 70: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

73

Tabel 4.1 Implementasi Memonitor Pengguna Dengan Pesan Singkat1

for (SmsMessage msg : tempsms) { //String strMessage = msg.getMessageBody(); String strFrom = msg.getOriginatingAddress(); String [] messageSplit=strFrom.split(Pattern.quote("+62")); messageSplit[1]="0"+messageSplit[1].trim(); for(int x = 0; x < nomorKarray.length ; x++){ if(messageSplit[1].equals((String)nomorKarray[x])){ tempNomor=messageSplit[1]; counter++; } } String message = msg.getDisplayMessageBody(); if (message.equals(WHEREAREYOU)&& messageSplit[1].equals(tempNomor)){ Intent itnStart = new Intent(context, LocationService.class); itnStart.putExtra(PHONENUMBER, strFrom); context.startService(itnStart);

} } } } catch (Exception e) { Log.e("SmsReceiver", "Exception smsReceiver" +e);

}

Tabel 4.2 Implementasi Memonitor Pengguna Dengan Pesan Singkat2

private void parseLocation(Location locCurrent) { if (locCurrent != null) { double dblLatitude = locCurrent.getLatitude();

Page 71: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

74

double dblLongitude = locCurrent.getLongitude(); Geocoder gocSMS = new Geocoder(this, Locale.getDefault()); if (Geocoder.isPresent()) { List < Address> lstAddresses; try { lstAddresses = gocSMS.getFromLocation(dblLatitude, dblLongitude, 1); if (lstAddresses.size() > 0) { strAddress = "Berada di sekitar "; Address adrCurrent = lstAddresses.get(0); for (int intCounter = 0; intCounter < adrCurrent.getMaxAddressLineIndex(); intCounter++) { strAddress += adrCurrent.getAddressLine(intCounter) + "\n"; } strAddress += adrCurrent.getCountryName()+"\n"; strAddress += "Link lokasi: http://maps.google.com/?q="+locCurrent.getLatitude()+","+locCurrent.getLongitude(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } private void sendLocation(Location locCurrent) { if (locCurrent != null) { parseLocation(locCurrent); if (strAddress.length() > 0 ) { SmsManager smsLocation = SmsManager.getDefault(); ArrayList<String> msgsplit=smsLocation.divideMessage(strAddress); smsLocation.sendMultipartTextMessage(strTo,null,msgsplit, null, null); lmgSMS.removeUpdates(lolSMS); stopSelf(); }

Page 72: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

75

else if(strAddress.length()==0){ sendLocation(locCurrent); lmgSMS.removeUpdates(lolSMS); stopSelf(); } } } }

4.2.2 Fitur Melihat Riwayat Lokasi Pengguna Melalui Pesan Singkat Fitur ini dijalankan ketika Pemonitor mengirim pesan

singkat berisi kode dan tanggal, setelah pesan diterima broadcast receiver maka diambil data riwayat lokasi dari basis data sesuai tanggal yang diminta. Implementasi dapat dilihat pada Tabel 4.3.

Tabel 4.3 Implementasi Untuk Melihat Riwayat Lokasi dengan Pesan Singkat

for (SmsMessage msg : tempsms) { //String strMessage = msg.getMessageBody(); String strFrom = msg.getOriginatingAddress(); String [] messageSplit=strFrom.split(Pattern.quote("+62")); messageSplit[1]="0"+messageSplit[1].trim(); for(int x = 0; x < nomorKarray.length ; x++){ if(messageSplit[1].equals((String)nomorKarray[x])){ tempNomor=messageSplit[1]; counter++; }

} String[] keySplit=message.split(" "); int flag=keySplit.length; if(flag==2){ keySplit[0]=keySplit[0].trim(); keySplit[1]=keySplit[1].trim();

Page 73: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

76

boolean key=keySplit[1].matches("..-..-...."); if(keySplit[0].equals(WHEREAREYOU) && key==true && messageSplit[1].equals(tempNomor)){ Toast.makeText(context, "history: "+ keySplit[0]+" n "+keySplit[1], Toast.LENGTH_LONG).show(); dataSource.open(); strAddress="Riwayat Lokasi:"; values=dataSource.getAllHistoryLokasi(keySplit[1]); Object[] valuesArray = values.toArray(); for(int x = 0; x < valuesArray.length ; x++){ strAddress+=valuesArray[x]+"\n"; } if(strAddress!=null && strAddress!="Riwayat Lokasi:"){ SmsManager smsLocation2 = SmsManager.getDefault(); ArrayList<String> msgsplit=smsLocation2.divideMessage(strAddress); smsLocation2.sendMultipartTextMessage(tempNomor,null,msgsplit, null, null); Log.i("SmsReceiver","message1 "+keySplit[0]+"message2 "+keySplit[1]+"boolean "+key); Log.i("SmsReceiver","Pesan: "+strAddress+"ke nomor: "+tempNomor); } else if(strAddress=="Riwayat Lokasi:"){ strAddress="Belum ada histori lokasi di tanggal :"+keySplit[1]; SmsManager smsLocation = SmsManager.getDefault(); smsLocation.sendTextMessage(tempNomor,null,strAddress, null, null); Log.i("SmsReceiver","Pesan: "+strAddress+"ke nomor: "+tempNomor);

Page 74: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

77

} } } } } } catch (Exception e) { Log.e("SmsReceiver", "Exception smsReceiver" +e); }

}

4.2.3 Fitur Memperbarui Lokasi Ketika Berpindah Tempat Pada fitur ini memeriksa lokasi pengguna, ketika

pengguna berpindah lokasi dari tempat terakhir yang tercatat di basis data dan mendapatkan nama lokasi yang berbeda maka akan tercatat lokasi di basis data. Implementasinya dapat dilihat pada Tabel 4.4.

Tabel 4.4 Implementasi Untuk Memperbarui Lokasi Ketika Berpindah Tempat

private void parseLocation(Location locCurrent) { if (locCurrent != null) { double dblLatitude = locCurrent.getLatitude(); double dblLongitude = locCurrent.getLongitude(); Geocoder geoc = new Geocoder(this, Locale.getDefault()); if (Geocoder.isPresent()) { List < Address> lstAddresses; try { lstAddresses = geoc.getFromLocation(dblLatitude, dblLongitude, 1); if (lstAddresses.size() > 0) {

Page 75: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

78

strAddress = "Berada di sekitar "; Address adrCurrent = lstAddresses.get(0); for (int intCounter = 0; intCounter < adrCurrent.getMaxAddressLineIndex(); intCounter++) { strAddress += adrCurrent.getAddressLine(intCounter) + "\n"; } strAddress += adrCurrent.getCountryName(); } } catch (IOException e) { e.printStackTrace(); } } } } private void sendLocation(Location locCurrent) { if (locCurrent != null) { Lokasi lokasi; parseLocation(locCurrent); if (strAddress.length() > 0 ) { dataSource.open(); values=dataSource.getAllLokasi(); if(values.isEmpty()){ dataSource.open(); lokasi=dataSource.createLokasi(strAddress, locCurrent.getLatitude(), locCurrent.getLongitude()); Toast.makeText(this,"Belum ada data,memasukkan data: "+lokasi, Toast.LENGTH_SHORT).show(); lmgHistory.removeUpdates(lolHistory); stopSelf(); Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", false); sendBroadcast(intent); } else if(!values.isEmpty()) { LastLokasi=dataSource.getLastRowNamaLokasi(); Object[] lastLokasiArray = LastLokasi.toArray(); for(int x = 0; x < lastLokasiArray.length ; x++){

Page 76: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

79

if(!strAddress.equals((String)lastLokasiArray[x])){ Toast.makeText(this,"lokasi saat ini: "+strAddress+"Lokasi terakhir yang tersimpan: "+(String)lastLokasiArray[x], Toast.LENGTH_SHORT).show(); dataSource.open(); lokasi=dataSource.createLokasi(strAddress, locCurrent.getLatitude(), locCurrent.getLongitude()); Toast.makeText(this,"memasukkan data lokasi baru: "+lokasi, Toast.LENGTH_LONG).show(); } else Toast.makeText(this,"lokasi saat ini: "+strAddress+"Lokasi terakhir yang tersimpan: "+(String)lastLokasiArray[x]+" data lokasi tidak perlu di perbarui", Toast.LENGTH_LONG).show(); } } lmgHistory.removeUpdates(lolHistory); stopSelf(); Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", false); sendBroadcast(intent); } lmgHistory.removeUpdates(lolHistory); stopSelf(); Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", false); sendBroadcast(intent); } }

4.2.4 Fitur Mengubah Pengaturan Notifikasi Ketika Baterai Habis

Page 77: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

80

Fitur ini akan mengirim pesan singkat berisi pemberitahuan secara otomatis kepada pemonitor ketika baterai akan habis. Implementasi dapat dilihat pada Tabel 4.5.

Tabel 4.5 Implementasi Untuk Mengubah Pengaturan Notifikasi Ketika Baterai Habis

private BroadcastReceiver batteryInfoReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { SMSBatt(); Toast.makeText(getApplicationContext(), "Your Battery is low", Toast.LENGTH_LONG).show(); }

}; public void SMSBatt(){ LocationManager lmgSMS = (LocationManager)getSystemService(Context.LOCATION_SERVICE); lmgSMS = (LocationManager)getSystemService(Context.LOCATION_SERVICE); //getting GPS status isGPSEnabled = lmgSMS .isProviderEnabled(LocationManager.GPS_PROVIDER); // getting network status isNetworkEnabled = lmgSMS .isProviderEnabled(LocationManager.NETWORK_PROVIDER); if(isGPSEnabled){ lmgSMS.requestLocationUpdates(LocationManager. GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, lolSMS); } else if(isNetworkEnabled){ lmgSMS.requestLocationUpdates(LocationManager. NETWORK_PROVIDER, MIN_TIME_BW_UPDATES,

Page 78: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

81

MIN_DISTANCE_CHANGE_FOR_UPDATES, lolSMS); } } private void parseLocation(Location locCurrent) { if (locCurrent != null) { double dblLatitude = locCurrent.getLatitude(); double dblLongitude = locCurrent.getLongitude(); Geocoder gocSMS = new Geocoder(this, Locale.getDefault()); try { List < Address> lstAddresses = gocSMS.getFromLocation(dblLatitude, dblLongitude, 1); if (lstAddresses.size() > 0) { strAddress = "Baterai Handphone mau habis,Saya berada di sekitar: "; Address adrCurrent = lstAddresses.get(0); for (int intCounter = 0; intCounter < adrCurrent.getMaxAddressLineIndex(); intCounter++) { strAddress += adrCurrent.getAddressLine(intCounter) + "\n"; } strAddress += adrCurrent.getCountryName()+"\n"; strAddress += "Link lokasi: http://maps.google.com/?q="+locCurrent.getLatitude()+","+locCurrent.getLongitude(); SmsManager smsElevator = SmsManager.getDefault(); ArrayList<String> msgsplit=smsElevator.divideMessage(strAddress); // ambil semua data kontak nomorB = dataSource.getBattNomor(); Object[] nomorBarray = nomorB.toArray(); for(int x = 0; x < nomorBarray.length ; x++){ SMS_TO=(String)nomorBarray[x]; smsElevator.sendMultipartTextMessage(SMS_TO, null, msgsplit, null, null);

Page 79: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

82

} finish(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

}

4.2.5 Memasukkan Nomor Pemonitor Ke Dalam Sistem Di fitur ini pengguna aplikasi bisa memasukkan

pemonitor ke dalam basis data aplikasi. Hal ini dilakukan agar pesan singkat dari pemonitor bisa dibalas oleh aplikasi sesuai dengan keinginan pemonitor. Implementasinya bisa dilihat pada Tabel 4.6.

Tabel 4.6 Implementasi Memasukkan Nomor Pemonitor ke Dalam Sistem

private Kontak cursorToKontak(Cursor cursor) { Kontak kontak = new Kontak(); Log.v("info", "The getLONG "+cursor.getLong(0)); Log.v("info", "The setLatLng "+cursor.getString(1)+","+cursor.getString(2)+","+cursor.getString(3)); kontak.setId(cursor.getLong(0)); kontak.setNama_kontak(cursor.getString(1)); kontak.setNomor_kontak(cursor.getString(2)); kontak.setFlag_kontak(cursor.getString(3)); return kontak;

} public Kontak createKontak(String nama, String nomor) {

Page 80: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

83

ContentValues values = new ContentValues(); values.put(DBHelper.COLUMN_NAME, nama); values.put(DBHelper.COLUMN_NOMOR, nomor); values.put(DBHelper.COLUMN_FLAG, "0"); long insertId = database.insert(DBHelper.TABLE_NAME, null, values); Cursor cursor = database.query(DBHelper.TABLE_NAME, allColumns, DBHelper.COLUMN_ID + " = " + insertId, null, null, null, null); cursor.moveToFirst(); Kontak newKontak = cursorToKontak(cursor); cursor.close(); return newKontak;

}

4.2.6 Fitur Menekan Tombol Darurat Fitur ini bekerja ketika pengguna menekan tombol

darurat ke nama pemonitor yang sudah tertera dan diambil dari basis data. Ketika itu sistem akan mengirim pesan darurat dan lokasi terkini dari pengguna kepada pemonitor yang dipilih. Implementasi dapat dilihat pada Tabel 4.7.

Tabel 4.7 Implementasi Untuk Menekan Tombol Darurat public void SmsEmergency(long id){ Kontak k = dataSource.getKontak(id); SMS_TO=k.getNomor_kontak(); LocationManager lmgSMS = (LocationManager)getSystemService(Context.LOCATION_SER

Page 81: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

84

VICE); lmgSMS = (LocationManager)getSystemService(Context.LOCATION_SERVICE); //getting GPS status isGPSEnabled = lmgSMS .isProviderEnabled(LocationManager.GPS_PROVIDER); // getting network status isNetworkEnabled = lmgSMS .isProviderEnabled(LocationManager.NETWORK_PROVIDER); if(isGPSEnabled){ lmgSMS.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, lolSMS); } else if(isNetworkEnabled){ lmgSMS.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, lolSMS); } } private void parseLocation(Location locCurrent) { if (locCurrent != null) { double dblLatitude = locCurrent.getLatitude(); double dblLongitude = locCurrent.getLongitude(); Geocoder gocSMS = new Geocoder(this, Locale.getDefault()); try { List < Address> lstAddresses = gocSMS.getFromLocation(dblLatitude, dblLongitude, 1); if (lstAddresses.size() > 0) { strAddress = "Saya Dalam Keadaan darurat,sekarang berada di sekitar: ";

Page 82: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

85

Address adrCurrent = lstAddresses.get(0); for (int intCounter = 0; intCounter < adrCurrent.getMaxAddressLineIndex(); intCounter++) { strAddress += adrCurrent.getAddressLine(intCounter) + "\n"; } strAddress += adrCurrent.getCountryName()+"\n"; strAddress += "Link lokasi: http://maps.google.com/?q="+locCurrent.getLatitude()+","+locCurrent.getLongitude(); SmsManager smsElevator = SmsManager.getDefault(); ArrayList<String> parts =smsElevator.divideMessage(strAddress); smsElevator.sendMultipartTextMessage(SMS_TO,null, parts, null, null); Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", false); sendBroadcast(intent); finish(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

}

4.2.7 Fitur Melihat Riwayat Lokasi Pengguna Melalui Google Maps Di fitur ini pengguna dapat melihat riwayat lokasi di map

yang ada di aplikasi. Map nantinya akan menampilkan lokasi terkini dan riwayat lokasi yang tersimpan di basis data dengan menggunakan marker. Implementasi dapat dilihat pada Tabel 4.8.

Page 83: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

86

Tabel 4.8 Implementasi Melihat Riwayat Pengguna Melalui Google Maps

{ SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapView); mapView=fm.getMap(); fm.onCreate(savedInstanceState); mapView.setMapType(GoogleMap.MAP_TYPE_NORMAL); //Map Settings mapView.getUiSettings().setMyLocationButtonEnabled(false); mapView.getUiSettings().setCompassEnabled(true); mapView.getUiSettings().setZoomControlsEnabled(true) Object[] nameLokasiArray = nameLokasi.toArray(); Object[] latLokasiiArray = latLokasi.toArray(); Object[] longLokasiArray = longLokasi.toArray(); Object[] tanggalLokasiArray = tanggalLokasi.toArray(); for(int x=0;x<latLokasiiArray.length;x++){ latpos=(Double)latLokasiiArray[x]; longpos=(Double)longLokasiArray[x]; tmpt=(String)nameLokasiArray[x]; tggl=(String)tanggalLokasiArray[x]; Log.d("debug marker: ", "Lokasi: "+latpos+","+longpos+","+tmpt+","+tggl); //Log.v("debug marker: ","Lokasi: "+latpos); LatLng positionhis = new LatLng(latpos,longpos); mapView.addMarker(new MarkerOptions().position(positionhis) .title("History Lokasi\nTanggal: "+tggl) .snippet(tmpt)

Page 84: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

87

.icon(BitmapDescriptorFactory.fromResource(R.drawable.pin_big))); } MapsInitializer.initialize(this); //Enable GPS mapView.setMyLocationEnabled(true); //Set the map to current location mapView.setOnMyLocationChangeListener(new OnMyLocationChangeListener() { TextView tvLocation = (TextView) findViewById(R.id.tv_location); @Override public void onMyLocationChange(Location location) { //Get current location LatLng position = new LatLng(location.getLatitude(), location.getLongitude()); //Get address from location Geocoder geoCoder = new Geocoder(LocationMap.this, Locale.getDefault()); List<Address> addresses; try { addresses = geoCoder.getFromLocation(position.latitude, position.longitude, 1); if (addresses.size()>0){ //Get the first address from the list and get its address lines Address address = addresses.get(0); String addressString = ""; for (int i=0;i<address.getMaxAddressLineIndex();i++) { addressString+=address.getAddressLine(i)+ " "; } tvLocation.setText("Lokasi saat ini: "+addressString); if (marker != null) {

Page 85: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

88

marker.remove(); } //Add a marker with an image to current location marker=mapView.addMarker(new MarkerOptions().position(position) .title("Lokasi Sekarang") .snippet(addressString) .icon(BitmapDescriptorFactory.fromResource(R.drawable.pin_big)));

Page 86: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

89

5 BAB V PENGUJIAN DAN EVALUASI

Bab ini membahas pengujian dan evaluasi pada aplikasi yang

dikembangkan. Pengujian yang dilakukan adalah pengujian terhadap kebutuhan fungsionalitas sistem dan kegunaan sistem. Pengujian fungsionalitas mengacu pada kasus penggunaan pada bab tiga. Pengujian kegunaan program dilakukan dengan mengetahui tanggapan dari pengguna terhadap sistem. Hasil evaluasi menjabarkan tentang rangkuman hasil pengujian pada bagian akhir bab ini.

5.1 Lingkungan Pengujian Lingkungan pengujian sistem pada pengerjaan tugas akhir ini

dilakukan pada lingkungan dan perangkat bergerak dapat dilihat pada Tabel 5.1.

Tabel 5.1 Spesifikasi Perangkat Bergerak Untuk Pengujian.

Prosesor Qualcomm MSM8960T Snapdragon Dual-core 1.7 GHz Krait.

Memori 1GB. Jenis Device Perangkat Bergerak. Sistem Operasi Android. Jenis Sistem Operasi Jelly Bean 4.1.2.

5.2 Skenario Pengujian Pada bagian ini akan dijelaskan tentang skenario pengujian

yang dilakukan. Pengujian yang dilakukan adalah pengujian kebutuhan fungsionalitas. Pengujian fungsionalitas menekankan pada kesesuaian hasil keluaran sistem.

Pengujian dilakukan untuk mengetahui hasil dari masukan data dan keluaran data. Pengembang aplikasi mencoba mengirim pesan singkat ke aplikasi dan menunggu keluaran data yaitu pesan singkat berisi lokasi dan membandingkan dengan lokasi

Page 87: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

90

sebenarnya dari pengguna aplikasi. Selain itu juga pengembang mencoba berpindah tempat agar dapat mengetahui fitur riwayat lokasi yang ada berjalan atau tidak.

5.2.1 Pengujian Fungsionalitas Pada subbab ini akan dijelaskan tentang pengujian

aplikasi dari segi fungsionalitasnya.

5.2.1.1 Pengujian Memonitor Lokasi Pengguna Dengan Mengirim Pesan Singkat.

Skenario pada pengujian ini adalah pemonitor mengirim pesan singkat yang mempunyai format “hashtag dimana (#dimana)” kepada pengguna aplikasi dan sistem otomatis membalas lokasi pengguna, dapat dilihat pada Tabel 5.2, sedangkan hasil pengujian dapat dilihat pada Gambar 5.1 dan Gambar 5.2.

Tabel 5.2 Pengujian Fitur Memonitor Lokasi Pengguna Dengan Mengirim Pesan Singkat

Nomor TMO001 Nama memonitor lokasi pengguna dengan

mengirim pesan singkat. Use Case MO001 Tujuan Memeriksa fungsi membalas pesan

singkat dari pemonitor ke dalam pengguna dibalas oleh sistem atau tidak.

Kondisi awal Mencari lokasi pengguna aplikasi. Skenario Pemonitor mengirim pesan singkat

kepada pengguna berisi kode ”#dimana”. Masukan Pesan singkat kepada pengguna aplikasi

dengan kode “#dimana”. Keluaran yang diharapkan

Sistem mengirimkan lokasi dari pengguna kepada pemonitor melalui pesan singkat.

Hasil Pengujian Berhasil.

Page 88: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

91

Gambar 5.1 Pesan Singkat Berisi Balasan Dari Sistem

Gambar 5.2 Lokasi yang Ditunjukkan Di Pesan Singkat

Page 89: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

92

5.2.1.2 Pengujian Melihat Riwayat Lokasi Melalui Pesan Singkat

Skenario pada pengujian ini adalah pemonitor mengirim pesan singkat berformat “hashtag dimana [spasi] tanggal (contoh: #dimana 30-06-2014)” atau menggunakan “hashtag dimana [spasi] tanggal1 [spasi] jam1 [spasi] tanggal2 [spasi] jam2 (contoh: #dimana 30-06-2014 20:00 02-07-2014 06:00)” kepada pengguna aplikasi untuk mengetahui riwayat lokasi dari pengguna dan sistem membalas pesan tersebut dari data lokasi yang sudah tersimpan, dapat dilihat pada Tabel 5.3. Sedangkan hasil pengujian dapat dilihat pada Gambar 5.3 dan Gambar 5.4.

Tabel 5.3 Pengujian Fitur Melihat Riwayat Lokasi Melalui Pesan

Singkat

Nomor TMO002 Nama Melihat riwayat lokasi melalui pesan

singkat. Use Case MO002 Tujuan Memeriksa apakah sistem dapat

mengirim riwayat pengguna kepada pemonitor melalui pesan singkat.

Kondisi awal Pemonitor belum mengirim kode riwayat melalui pesan singkat.

Skenario Pemonitor mengirim pesan singkat kode riwayat ”#dimana[spasi]tanggal” ke nomor pengguna aplikasi.

Masukan pesan singkat berisi kode riwayat ”#dimana [spasi] tanggal” atau menggunakan “hashtag dimana [spasi] tanggal1 [spasi] jam1 [spasi] tanggal2 [spasi] jam2.

Keluaran yang diharapkan

Pesan singkat berisi riwayat pengguna diterima pemonitor.

Hasil Pengujian Berhasil.

Page 90: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

93

Gambar 5.3 Pesan Singkat Pemonitor Kepada Pengguna Dibalas

Menunjukkan Riwayat Lokasi Pengguna

Gambar 5.4 Pesan Singkat Pemonitor Kepada Pengguna Dibalas

Menunjukkan Riwayat Lokasi Pengguna Berdasarkan Tanggal dan Jam

Page 91: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

94

5.2.1.3 Pengujian Memperbarui Lokasi Ketika Berpindah Tempat Skenario pada pengujian ini adalah pengguna berpindah

tempat dari lokasi sebelumnya dan sistem memperbarui lokasi yang berada di basis data ketika pengguna berada di tempat yang berbeda, dapat dilihat pada Tabel 5.4. Sedangkan hasil pengujian dapat dilihat pada Gambar 5.5 dan Gambar 5.6.

Tabel 5.4 Pengujian Memperbarui Lokasi Ketika Berpindah

Tempat

Nomor TMO003 Nama Memperbarui lokasi ketika berpindah

tempat. Use Case MO003 Tujuan Memeriksa apakah sistem bisa

memperbarui lokasi ketika pengguna berpindah tempat.

Kondisi awal Pengguna belum berpindah tempat. Skenario Pengguna berpindah tempat dari lokasi

sebelumnya dengan membawa Android yang berisi aplikasi Tugas Akhir ini.

Masukan Lokasi dari pengguna yang berpindah tempat.

Keluaran yang diharapkan

Sistem menyimpan lokasi ke basis data ketika pengguna berpindah tempat.

Hasil Pengujian Berhasil.

Page 92: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

95

Gambar 5.5 Pengujian Memperbarui Lokasi Ketika Berpindah

Gambar 5.6 Hasil Pengujian Lokasi Tersimpan

Page 93: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

96

5.2.1.4 Pengujian mengubah pengaturan notifikasi ketika baterai akan habis

Skenario pada pengujian ini adalah jika baterai perangkat bergerak Android pada pengguna akan habis, maka sistem akan mengirim pesan singkat pemberitahuan kepada pemonitor. Sebagai catatan, penentuan threshold baterai pada masing-masing perangkat Android berbeda-beda, sesuai dengan threshold yang ditentukan produsen perangkat bergerak Android tersebut, dapat dilihat pada Tabel 5.5. Sedangkan hasil pengujian dapat dilihat pada Gambar 5.7.

Tabel 5.5 Pengujian Mengubah Pengaturan Notifikasi Ketika

Baterai Habis

Nomor TMO004 Nama Mengubah pengaturan notifikasi ketika

baterai habis. Use Case MO004 Tujuan Memeriksa apakah ketika baterai

Android akan habis, maka mengirim pesan singkat berisi pemberitahuan.

Kondisi awal Pengguna berada pada halaman menu utama.

Skenario 1. Pengguna mengaktifkan notifikasi baterai habis.

2. Ketika baterai Android akan habis sistem otomatis mengirim pesan singkat pemberitahuan dan lokasi pengguna kepada pemonitor.

Masukan Daya baterai Android akan habis, lokasi pengguna.

Keluaran yang diharapkan

Pemonitor menerima pemberitahuan baterai habis dan lokasi pengguna

Hasil Pengujian Berhasil.

Page 94: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

97

Gambar 5.7 Hasil Uji, Pesan Singkat Berisi Pemberitahuan.

5.2.1.5 Pengujian Memasukkan Nomor Pemonitor ke

Dalam Sistem Skenario pada pengujian ini adalah pengguna

memasukkan nomor pemonitor ke dalam aplikasi, dapat dilihat pada Tabel 5.6. Sedangkan hasil pengujian dapat dilihat pada Gambar 5.8 dan Gambar 5.9.

Tabel 5.6 Pengujian Memasukkan Nomor Pemonitor ke Dalam

Sistem

Nomor TMO005 Nama Memasukkan nomor pemonitor ke

dalam sistem. Use Case MO005 Tujuan Memeriksa apakah sistem memasukkan

data pemonitor ke dalam basis data.

Page 95: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

98

Kondisi awal Pengguna berada pada halaman masukkan kontak dan belum memasukkan nomor pemonitor.

Skenario Pengguna memasukkan nama dan nomor kontak kemudian menekan tombol submit

Masukan Nama dan nomor pemonitor. Keluaran yang diharapkan

Data pemonitor dapat masuk ke dalam basis data.

Hasil Pengujian Berhasil.

Gambar 5.8 Hasil Pengujian Memasukkan Kontak

Page 96: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

99

Gambar 5.9 Hasil Pengujian Kontak Yang Ada di Perangkat

Bergerak 5.2.1.6 Pengujian Menekan Tombol Darurat

Pada pengujian ini mempunyai skenario pengguna menekan tombol darurat untuk mengirim pemberitahuan darurat kepada pemonitor, dapat dilihat pada Tabel 5.7. Sedangkan hasil pengujian dapat dilihat pada Gambar 5.10 dan Gambar 5.11.

Tabel 5.7 Pengujian Menekan Tombol Darurat

Nomor TMO006 Nama Menekan tombol darurat. Use Case MO006 Tujuan Memeriksa apakah tombol darurat

berfungsi. Kondisi awal Pengguna berada pada halaman tombol

darurat dan belum menekan tombol darurat.

Skenario Pengguna memilih nomor pemonitor kemudian menekan tombol darurat.

Masukan Tombol darurat, nama dan nomor

Page 97: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

100

pemonitor. Keluaran yang diharapkan

Sistem dapat mengirim lokasi dan pemberitahuan darurat kepada pemonitor yang dipilih.

Hasil Pengujian Berhasil.

Gambar 5.10 Hasil Pengujian Tombol Darurat

Gambar 5.11 Hasil pengujian Berupa Pesan Singkat Pemberitahuan

Darurat

Page 98: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

101

5.2.1.7 Pengujian Melihat Riwayat Lokasi Melalui Google Maps

Pada pengujian ini mempunyai skenario pengguna melihat riwayat lokasinya melalui peta di halaman lihat lokasi, dapat dilihat pada Tabel 5.8. Sedangkan hasil pengujian bisa dilihat pada Gambar 5.13 dan Gambar 5.13.

Tabel 5.8 Pengujian Melihat Riwayat Lokasi Melalui Google Maps

Nomor TMO007 Nama Melihat riwayat lokasi melalui Google

Maps. Use Case MO007 Tujuan Memeriksa apakah sistem dapat

menampilkan riwayat lokasi di peta. Kondisi awal Pengguna berada pada halaman lihat

lokasi. Skenario 1. Pengguna berada pada halaman

utama. 2. Pengguna memilih halaman lihat

lokasi. 3. Google Maps beserta marker berisi

riwayat tampil. Masukan Riwayat lokasi yang sudah tersimpan di

basis data. Keluaran yang diharapkan

Google Maps beserta marker berisi riwayat lokasi tampil.

Hasil Pengujian Berhasil.

Page 99: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

102

Gambar 5.12 Pengujian Memilih Tanggal Untuk Melihat Riwayat

Lokasi

Gambar 5.13 Hasil Pengujian Melihat Riwayat Lokasi di Google

Maps

Page 100: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

103

5.2.1.8 Pengujian Pengubahan Durasi Update Skenario pada pengujian ini adalah pengguna mengubah

waktu durasi update lokasi baru ketika berpindah tempat, dapat dilihat pada Tabel 5.9. Sedangkan hasil pengujian dapat dilihat pada Gambar 5.14, Gambar 5.15 dan Gambar 5.16.

Tabel 5.9 Pengujian Pengubahan Durasi Update

Nomor TMO008 Nama Mengubah durasi update lokasi ketika

berpindah tempat. Use Case MO007 Tujuan Memeriksa apakah sistem dapat

memperbarui lokasi berpindah tempat setiap waktu yang dipilih.

Kondisi awal Pengguna berada pada halaman menu utama.

Skenario 1. Pengguna berada pada halaman utama.

2. Pengguna memilih halaman setting. 3. Pengguna memilih durasi update

yang ditentukan. Masukan Durasi update yang ditentukan. Keluaran yang diharapkan

Sistem memperbarui lokasi baru setiap waktu yang dipilih dan berpindah tempat.

Hasil Pengujian Berhasil.

Page 101: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

104

Gambar 5.14 Hasil Pengubahan Durasi Update

Gambar 5.15 Hasil Pengujian Pengubahan Durasi Update

Page 102: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

105

Gambar 5.16 Hasil Pengujian Pengubahan Durasi Update

Berikutnya

5.2.2 Pengujian Kepada Pengguna Pengujian fungsionalitas aplikasi Monitoring Keberadaan

Objek melalui Perangkat Bergerak Berbasis Android dilakukan beberapa pengguna untuk mengetahui kesesuaian proses yang ada dalam sistem dengan fakta yang ada di lapangan. Pengujian dilakukan dengan beberapa korespondensi bisa dilihat pada Tabel 5.10.

Pengujian dilakukan dengan skenario pengguna melakukan operasi pada aplikasi. Setelah melakukan penggunaan aplikasi, pengguna melakukan pengisian kuesioner. Pertanyaan yang diajukan kepada pengguna dapat dilihat pada Tabel 5.11.

Tabel 5.10 Data Pengguna

No. Nama Pekerjaan Perusahaan 1. C. Almas

Djeni Mahasiswa Teknik Informatika-ITS

2. Nuraini Rahma S.

Pelajar SMP Negeri 1 Surabaya

3. Siti Fatimah Pelajar SMP Negeri 36 Surabaya

Page 103: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

106

Ayu S. 4. M. Nabil

Faroj Mahasiswa Fakultas Kesehatan

Masyarakat-UNAIR 5. Fitroni

Lesmono Mahasiswa Matematika-ITS

6. M. Shulhan Khairy

Mahasiswa Teknik Informatika-ITS

7. Senky Teguh S.

Mahasiswa Teknik Elektro-ITS

8. Firmansyah R.

Mahasiswa Teknik Kelautan-ITS

9. Mumtaz Najla K.

Mahasiswa Fakultas Hukum-UNAIR

10. Shakti Rahmat W.

Pelajar SMK Negeri 1 Surabaya

Tabel 5.11 Daftar Pertanyaan Pada Kuesioner

No. Pertanyaan Jawaban Tidak Setuju

Kurang Setuju

Setuju Sangat Setuju

1 Aplikasi ini sudah dapat mengirimkan pesan singkat yang berisi lokasi anda kepada pemonitor dengan tepat.

40.00% 60.00%

2. Aplikasi ini dapat menyimpan data lokasi anda ketika berpindah tempat dengan tepat.

40.00% 60.00%

3. Aplikasi ini sudah dapat menampilkan peta posisi terkini

60.00% 40.00%

Page 104: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

107

anda dan riwayat lokasi anda dengan baik.

4. Aplikasi ini sudah dapat mengirimkan pesan singkat berisi lokasi anda kepada pemonitor ketika sisa baterai akan habis.

50.00% 50.00%

5. Aplikasi ini sudah bisa menjalankan tombol darurat dengan baik.

70.00% 30.00%

6. Aplikasi ini banyak menghabiskan baterai karena penggunaan GPS.

40.00% 50.00% 10.00%

7. Aplikasi ini mudah digunakan.

50.00% 50.00%

5.2.3 Pengujian Penggunaan Baterai Pada pengujian ini dilakukan pengujian kecepatan baterai

habis saat menggunakan aplikasi Monitoring Keberadaan Objek Melalui Perangkat Bergerak Berbasis Android, kemudian dibandingkan dengan kecepatan baterai habis tanpa menggunakan aplikasi ini. Pengujian ini dilakukan pada perangkat bergerak dengan penggunaan secara normal, yaitu dipakai untuk mengirim pesan singkat, bermain games dan browsing sesekali. Aplikasi yang aktif: line, facebook, browser, dan music player sesekali. Pada pengujian ini diamati kecepatan baterai habis dari kapasitas baterai 100% sampai 5%. Hasilnya dapat dilihat pada Tabel 5.12 sedangkan persentasenya Tabel 5.13.

Page 105: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

108

Tabel 5.12 Pengujian Baterai Nama Device.

Kapasi-tas Baterai.

Pengujian baterai pada sinyal 3G

Pengujian baterai pada sinyal 2G

Dengan aplikasi Tugas Akhir

Tanpa aplikasi Tugas Akhir

Dengan aplikasi Tugas Akhir

Tanpa aplikasi Tugas Akhir

Sony Xperia SP

2370 mAh.

Sekitar 15 jam

Sekitar 19 jam

Sekitar 23 jam

Sekitar 28 jam

Samsung Galaxy Tab 2

4000 mAh

Sekitar 8 jam

Sekitar 13 jam

Sekitar 14 jam

Sekitar 20 jam

Sony Xperia M

1750 mAh

Sekitar 10 jam

Sekitar 16 jam

Sekitar 18 jam

Sekitar 24 jam

Samsung Galaxy Note 2

3100 mAh

Sekitar 18 jam

Sekitar 24 jam

Sekitar 24 jam

Sekitar 32 jam

Tabel 5.13 Persentase kecepatan baterai habis saat menggunakan aplikasi

Nama Device Persentase kecepatan baterai habis ketika menggunakan aplikasi Tugas Akhir pada sinyal 3G

Persentase kecepatan baterai habis ketika menggunakan aplikasi Tugas Akhir pada sinyal 2G

Sony Xperia SP 21,05% 17,85% Samsung Galaxy Tab 2

38,46% 30,00%

Sony Xperia M 37,50% 25,00%

Page 106: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

109

Samsung Galaxy Note 2

25,50% 18,75%

Rata-rata 30,50% 22,90%

5.2.4 Pengujian Error Handling Pada bagian ini akan dijelaskan tentang skenario

pengujian yang dilakukan. Pengujian yang dilakukan adalah pengujian error handling beberapa skenario yang mungkin akan terjadi.

5.2.4.1 Pengujian Error Handling Ketika Tidak Ada Internet Atau Internet Tidak Stabil

Skenario pada pengujian ini adalah pemonitor mengirim pesan singkat berisi kode “#dimana” dan sistem akan membalas hanya tautan lokasi ketika internet tidak stabil atau tidak ada, dapat dilihat pada Tabel 5.14. Sedangkan hasil pengujian dapat dilihat pada Gambar 5.17.

Tabel 5.14 Pengujian Error Handling Tidak Ada Internet Atau

Tidak Stabil Nomor TMO009 Nama Pengujian error handling ketika tidak

ada internet. Use Case MO001 Tujuan Memeriksa apakah error handling dapat

berfungsi. Kondisi awal Tidak ada koneksi internet dan

pemonitor mengirim pesan singkat berisi kode #dimana.

Skenario Pemonitor mengirim pesan singkat berisi kode #dimana.

Masukan Pesan singkat berisi kode #dimana dari pemonitor.

Page 107: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

110

Keluaran yang diharapkan

Sistem dapat mengirim tautan lokasi pengguna dan pemberitahuan bahwa internet tidak stabil atau tidak ada.

Hasil Pengujian Berhasil.

Gambar 5.17 Hasil Pengujian Error Handling Internet Tidak Stabil

5.2.4.2 Pengujian Error Handling Ketika Pemonitor

Salah Memasukkan Kode Skenario pada pengujian ini adalah pemonitor mengirim

pesan singkat berisi kode yang salah dan sistem akan membalas bahwa kode yang dikirim pemonitor salah melalui pesan singkat, dapat dilihat pada Tabel 5.15. Sedangkan hasil pengujian dapat dilihat pada Gambar 5.18 dan Gambar 5.19.

Tabel 5.15 Pengujian Error Handling Ketika Pemonitor Salah

Memasukkan Kode Nomor TMO010 Nama Pengujian error handling ketika kode

yang dikirim oleh pemonitor melalui pesan singkat salah.

Use Case MO001 Tujuan Memeriksa apakah error handling dapat

berfungsi.

Page 108: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

111

Kondisi awal Sistem belum menerima pesan singkat yang berisi kode yang salah dari pesan singkat.

Skenario Pemonitor mengirim pesan singkat berisi yang salah dan sistem membalas pesan singkat tersebut.

Masukan Pesan singkat berisi kode selain yang ditentukan oleh sistem.

Keluaran yang diharapkan

Sistem mengirim pesan singkat berisi pemberitahuan kepada pemonitor bahwa kode salah.

Hasil Pengujian Berhasil.

Gambar 5.18 Hasil Pengujian Error Handling Ketika Pemonitor Salah Memasukkan Kode

Gambar 5.19 Hasil Pengujian Error Handling Ketika Pemonitor Salah Memasukkan Kode Riwayat

Page 109: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

112

5.3 Evaluasi Pengujian Dari pengujian yang dilakukan, baik pengujian fungsional

maupun pengujian terhadap pengguna diberikan evaluasi sebagai berikut: 1. Fitur memonitor lokasi pengguna dengan mengirim pesan

singkat berhasil dan sesuai yang diharapkan. Hal ini tertera pada pengujian dengan kode TMO001.

2. Fitur melihat riwayat lokasi melalui pesan singkat berhasil dan sesuai dengan hasil yang diharapkan. Hal ini tertera pada pengujian dengan kode TMO002.

3. Fitur memperbarui lokasi ketika berpindah tempat berhasil dan sesuai dengan hasil yang diharapkan. Hal ini tertera pada pengujian dengan kode TMO003.

4. Fitur mengubah pengaturan notifikasi ketika baterai akan habis berhasil dan sesuai dengan hasil yang diharapkan. Hal ini tertera pada pengujian dengan kode TMO004.

5. Fitur memasukkan nomor pemonitor ke dalam sistem berhasil dan sesuai dengan hasil yang diharapkan. Hal ini tertera pada pengujian dengan kode TMO005.

6. Fitur menekan tombol darurat berhasil dan sesuai dengan hasil yang diharapkan. Hal ini tertera pada pengujian dengan kode TMO006.

7. Fitur melihat riwayat lokasi melalui Google Maps berhasil dan sesuai dengan hasil yang diharapkan. Hal ini tertera pada pengujian dengan kode TM007.

8. Berdasarkan jawaban pengguna aplikasi ini dapat mengirimkan lokasi pengguna kepada pemonitor melalui pesan singkat dengan tepat.

9. Aplikasi ini dapat menyimpan data lokasi pengguna aplikasi ketika berpindah tempat dengan rata-rata jawaban setuju dari pengguna.

10. Berdasarkan jawaban pengguna aplikasi ini dapat menampilkan peta posisi terkini dan riwayat lokasi pengguna dengan tepat.

Page 110: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

113

11. Tombol darurat dan pengaturan notifikasi baterai habis di aplikasi ini berjalan dengan baik berdasarkan jawaban dari pengguna.

12. Berdasarkan jawaban pengguna dan pengujian baterai, aplikasi ini lebih banyak menghabiskan baterai karena penggunaan GPS di aplikasi.

13. Aplikasi yang dibuat memiliki tampilan yang user friendly dan mudah digunakan sesuai dengan jawaban pengguna.

Page 111: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

114

[Halaman ini sengaja dikosongkan]

Page 112: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

115

6 BAB VI KESIMPULAN DAN SARAN

Pada bab ini akan diberikan kesimpulan yang diambil

selama pengerjaan Tugas Akhir serta saran-saran tentang pengembangan yang dapat dilakukan terhadap Tugas Akhir ini di masa yang akan datang.

6.1 Kesimpulan Dari hasil pengamatan selama proses perancangan,

implementasi, kuesioner pengguna dan pengujian aplikasi yang dilakukan, dapat diambil kesimpulan sebagai berikut.

1. Aplikasi yang dibuat dengan memanfaatkan metode reverse geocoding dan broadcast receiver ini berhasil dalam membaca pesan singkat dari pemonitor dan menentukan letak dari pengguna aplikasi. 40% pengguna di Tabel 5.11 setuju dan 60% sangat setuju dengan ini. (didasarkan juga dari pengujian TMO001).

2. Aplikasi yang dibuat berhasil untuk menyimpan data riwayat lokasi pengguna yang berpindah tempat ke dalam basis data internal Android. 40% pengguna di Tabel 5.11 setuju dan 60% sangat setuju. (didasarkan juga dari pengujian TMO003,TMO002 dan TMO007).

3. Aplikasi yang dibuat berhasil mengambil informasi riwayat lokasi dari basis data sesuai tanggal riwayat lokasi yang diinginkan pemonitor dari objek, 60% pengguna di Tabel 5.11 setuju dan 40% sangat setuju. (didasarkan juga dari pengujian TMO002).

4. Fitur tombol darurat dan notifikasi baterai habis dalam aplikasi ini sudah baik dalam mengirim pemberitahuan dan letak dari pengguna aplikasi. 50%\% pengguna di Tabel 5.11 setuju dan 50% sangat setuju. (didasarkan juga dari pengujian TMO004 dan pengujian TMO006).

Page 113: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

116

5. Karena aplikasi ini memakai GPS untuk mendeteksi maka baterai Android cenderung lebih cepat habis daripada tidak memakai aplikasi. 60% pengguna di Tabel 5.11 menjawab baterai lebih cepat habis jika memakai aplikasi ini dan juga dari Pengujian Penggunaan Baterai di Tabel 5.12 dan Tabel 5.13, selisih pemakaian baterai ketika menggunakan aplikasi ini dibandingkan tidak memakai dalam keadaan sinyal 3G berjumlah 30,50% dan selisih pemakaian baterai ketika menggunakan aplikasi ini dibandingkan tidak memakai dalam keadaan sinyal 2G 22,90%.

6. Aplikasi yang dibuat cukup mudah dalam pengoperasian. 50% pengguna di Tabel 5.11 mengatakan setuju dan 50% sangat setuju dengan hal tersebut setelah mencoba aplikasi ini.

7. Sistem tidak akan bisa mengirim pesan singkat kepada pemonitor ketika koneksi internet, GPS, Google Maps API dan pulsa dari pengguna aplikasi tidak tersedia.

6.2 Saran Berikut merupakan beberapa saran untuk pengembangan

sistem di masa yang akan datang. Saran-saran ini didasarkan pada hasil perancangan, implementasi dan pengujian yang telah dilakukan.

1. Aplikasi ini sudah cukup baik namun perlu dilakukan pengelolaaan GPS lebih baik agar menghemat baterai Android dan lebih cukup tahan lama ketika memakai aplikasi ini.

2. Sebaiknya dalam pengembangan aplikasi ini nantinya memakai server untuk pesan singkat agar tidak memakai pulsa dari pengguna aplikasi.

Page 114: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

119

7 LAMPIRAN A. KODE SUMBER

public class LocationService extends Service{ private String strAddress = ""; private String strTo=""; // flag for GPS status boolean isGPSEnabled = false; // flag for network status boolean isNetworkEnabled = false; private LocationManager lmgSMS; // The minimum distance to change Updates in meters private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters //The minimum time between updates in milliseconds private static final long MIN_TIME_BW_UPDATES = 1; //1000 * 60 * 1; // 1 minute private final LocationListener lolSMS = new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub if (location != null) { sendLocation(location); } } };

Page 115: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

120

@Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); Bundle bunSMS = intent.getExtras(); strTo = bunSMS.getString(IncomingSms.PHONENUMBER); lmgSMS = (LocationManager)getSystemService(Context.LOCATION_SERVICE); //getting GPS status isGPSEnabled = lmgSMS .isProviderEnabled(LocationManager.GPS_PROVIDER); // getting network status isNetworkEnabled = lmgSMS .isProviderEnabled(LocationManager.NETWORK_PROVIDER); //Location locCurrent = lmgSMS.getLastKnownLocation(LocationManager.GPS_PROVIDER); if(isGPSEnabled) lmgSMS.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, lolSMS); else if(isNetworkEnabled) lmgSMS.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, lolSMS); return START_NOT_STICKY; } public void onCreate() { super.onCreate(); } private void parseLocation(Location locCurrent) { if (locCurrent != null) { double dblLatitude = locCurrent.getLatitude(); double dblLongitude = locCurrent.getLongitude(); Geocoder gocSMS = new Geocoder(this, Locale.getDefault()); if (Geocoder.isPresent()) {

Page 116: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

121

List < Address> lstAddresses; try { lstAddresses = gocSMS.getFromLocation(dblLatitude, dblLongitude, 1); if (lstAddresses.size() > 0) { strAddress = "Berada di sekitar "; Address adrCurrent = lstAddresses.get(0); for (int intCounter = 0; intCounter < adrCurrent.getMaxAddressLineIndex(); intCounter++) { strAddress += adrCurrent.getAddressLine(intCounter) + "\n"; } //strAddress += "Locality: " + adrCurrent.getLocality() + "\n"; strAddress += adrCurrent.getCountryName()+"\n"; strAddress += "Link lokasi: http://maps.google.com/?q="+locCurrent.getLatitude()+","+locCurrent.getLongitude(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } private void sendLocation(Location locCurrent) { if (locCurrent != null) { parseLocation(locCurrent); if (strAddress.length() > 0 ) { SmsManager smsLocation = SmsManager.getDefault(); ArrayList<String> msgsplit=smsLocation.divideMessage(strAddress); smsLocation.sendMultipartTextMessage(strTo,null,msgsplit, null, null); lmgSMS.removeUpdates(lolSMS); stopSelf(); } else if(strAddress.length()==0){ sendLocation(locCurrent); lmgSMS.removeUpdates(lolSMS); stopSelf(); }

Page 117: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

122

} } }

Kode Sumber A.1 Fitur Memonitor Lokasi Pengguna Dengan Mengirim Pesan Singkat

public class IncomingSms extends BroadcastReceiver { // Get the object of SmsManager //final SmsManager sms = SmsManager.getDefault(); public final String WHEREAREYOU = "#dimana"; public static final String PHONENUMBER = "PhoneNumber"; //inisialisasi kontroller private DBDataSource dataSource; //inisialisasi arraylist private ArrayList<Lokasi> values; private List<String> nomorK; @Override public void onReceive(Context context, Intent intent) { // Retrieves a map of extended data from the intent. final Bundle bundle = intent.getExtras(); dataSource = new DBDataSource(context); // buka kontroller dataSource.open(); // ambil semua data kontak nomorK = dataSource.getAllNomor(); Object[] nomorKarray = nomorK.toArray(); int counter = 0; String tempNomor = null; String strAddress = intent.getStringExtra("strAddress"); try { if (bundle != null) { Object[] messages = (Object[]) bundle.get("pdus"); SmsMessage[] tempsms = new SmsMessage[messages.length]; for (int i = 0; i < messages.length; i++) { tempsms[i] = SmsMessage.createFromPdu((byte[]) messages[i]); String phoneNumber =

Page 118: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

123

tempsms[i].getDisplayOriginatingAddress(); String senderNum = phoneNumber; String message = tempsms[i].getDisplayMessageBody(); String [] messageSplit=phoneNumber.split(Pattern.quote("+62")); messageSplit[1]="0"+messageSplit[1].trim(); for(int x = 0; x < nomorKarray.length ; x++){ if(messageSplit[1].equals((String)nomorKarray[x])){ tempNomor=messageSplit[1]; counter++; } } String[] keySplit=message.split(" "); int flag=keySplit.length; if(flag==2){ keySplit[0]=keySplit[0].trim(); keySplit[1]=keySplit[1].trim(); boolean key=keySplit[1].matches("..-..-...."); Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message+" and "+strAddress+keySplit[0]+keySplit[1]+key); } int duration = Toast.LENGTH_LONG; Toast toast = Toast.makeText(context, "senderNum: "+ messageSplit[1] + ", message: " + message+"and "+tempNomor+"dan"+counter, duration); toast.show(); } // end for loop for (SmsMessage msg : tempsms) { String strFrom = msg.getOriginatingAddress(); String [] messageSplit=strFrom.split(Pattern.quote("+62")); messageSplit[1]="0"+messageSplit[1].trim(); for(int x = 0; x < nomorKarray.length ; x++){ if(messageSplit[1].equals((String)nomorKarray[x])){ tempNomor=messageSplit[1]; counter++;

Page 119: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

124

} } String message = msg.getDisplayMessageBody(); if (message.equals(WHEREAREYOU)&& messageSplit[1].equals(tempNomor)){ Intent itnStart = new Intent(context, LocationService.class); itnStart.putExtra(PHONENUMBER, strFrom); context.startService(itnStart); } String[] keySplit=message.split(" "); int flag=keySplit.length; if(flag==2){ keySplit[0]=keySplit[0].trim(); keySplit[1]=keySplit[1].trim(); boolean key=keySplit[1].matches("..-..-...."); if(keySplit[0].equals(WHEREAREYOU) && key==true && messageSplit[1].equals(tempNomor)){ Toast.makeText(context, "history: "+ keySplit[0]+" n "+keySplit[1], Toast.LENGTH_LONG).show(); dataSource.open(); strAddress="Riwayat Lokasi:"; values=dataSource.getAllHistoryLokasi(keySplit[1]); Object[] valuesArray = values.toArray(); for(int x = 0; x < valuesArray.length ; x++){ strAddress+=valuesArray[x]+"\n"; } if(strAddress!=null && strAddress!="Riwayat Lokasi:"){ SmsManager smsLocation2 = SmsManager.getDefault(); ArrayList<String> msgsplit=smsLocation2.divideMessage(strAddress); smsLocation2.sendMultipartTextMessage(tempNomor,null,msgsplit, null, null); Log.i("SmsReceiver","message1 "+keySplit[0]+"message2 "+keySplit[1]+"boolean "+key); Log.i("SmsReceiver","Pesan: "+strAddress+"ke nomor: "+tempNomor); } else if(strAddress=="Riwayat Lokasi:"){ strAddress="Belum ada histori lokasi di

Page 120: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

125

tanggal :"+keySplit[1]; SmsManager smsLocation = SmsManager.getDefault(); smsLocation.sendTextMessage(tempNomor,null,strAddress, null, null); Log.i("SmsReceiver","Pesan: "+strAddress+"ke nomor: "+tempNomor); } } } } } } catch (Exception e) { Log.e("SmsReceiver", "Exception smsReceiver" +e); } } }

Kode Sumber A.2 Melihat Riwayat Lokasi Pengguna Melalui Pesan Singkat

public class LocationHistoryService extends Service { private List<String> LastLokasi; private String strAddress = ""; // flag for GPS status boolean isGPSEnabled = false; //inisialisasi kontroller/Data Source private DBDataSource dataSource; //inisialisasi arraylist private ArrayList<Lokasi> values; // flag for network status boolean isNetworkEnabled = false; private LocationManager lmgHistory; // The minimum distance to change Updates in meters private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 1000; // 1 meters //The minimum time between updates in milliseconds private static final long MIN_TIME_BW_UPDATES = 1000; //1000 * 60 * 1; // 1 minute

Page 121: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

126

private final LocationListener lolHistory = new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub //if (location != null) { Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", true); sendBroadcast(intent); sendLocation(location); Intent i = new Intent("Android.location.GPS_ENABLED_CHANGE"); i.putExtra("enabled", false); sendBroadcast(intent); //} } }; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } public int onStartCommand(Intent intent, int flags, int startId) { // instanstiasi kelas DBDataSource dataSource = new DBDataSource(this); //membuat sambungan baru ke database dataSource.open(); super.onStartCommand(intent, flags, startId); lmgHistory = (LocationManager)getSystemService(Context.LOCATION_SERVICE); //getting GPS status isGPSEnabled = lmgHistory .isProviderEnabled(LocationManager.GPS_PROVIDER);

Page 122: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

127

// getting network status isNetworkEnabled = lmgHistory .isProviderEnabled(LocationManager.NETWORK_PROVIDER); //Location locCurrent = lmgSMS.getLastKnownLocation(LocationManager.GPS_PROVIDER); if(isGPSEnabled) lmgHistory.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, lolHistory); else if(isNetworkEnabled) lmgHistory.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, lolHistory); return START_NOT_STICKY; } public void onCreate() { super.onCreate(); } private void parseLocation(Location locCurrent) { if (locCurrent != null) { double dblLatitude = locCurrent.getLatitude(); double dblLongitude = locCurrent.getLongitude(); Geocoder geoc = new Geocoder(this, Locale.getDefault()); if (Geocoder.isPresent()) { List < Address> lstAddresses; try { lstAddresses = geoc.getFromLocation(dblLatitude, dblLongitude, 1); if (lstAddresses.size() > 0) { strAddress = "Berada di sekitar "; Address adrCurrent = lstAddresses.get(0); for (int intCounter = 0; intCounter < adrCurrent.getMaxAddressLineIndex(); intCounter++) { strAddress += adrCurrent.getAddressLine(intCounter) + "\n"; } strAddress += adrCurrent.getCountryName(); //throw new Exception(tempAddress); } //else } catch (IOException e) { // TODO Auto-generated catch block

Page 123: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

128

e.printStackTrace(); } } } } private void sendLocation(Location locCurrent) { if (locCurrent != null) { Lokasi lokasi; parseLocation(locCurrent); if (strAddress.length() > 0 ) { dataSource.open(); values=dataSource.getAllLokasi(); if(values.isEmpty()){ dataSource.open(); lokasi=dataSource.createLokasi(strAddress, locCurrent.getLatitude(), locCurrent.getLongitude()); Toast.makeText(this,"Belum ada data,memasukkan data: "+lokasi, Toast.LENGTH_SHORT).show(); lmgHistory.removeUpdates(lolHistory); stopSelf(); Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", false); sendBroadcast(intent); } else if(!values.isEmpty()) { LastLokasi=dataSource.getLastRowNamaLokasi(); Object[] lastLokasiArray = LastLokasi.toArray(); for(int x = 0; x < lastLokasiArray.length ; x++){ if(!strAddress.equals((String)lastLokasiArray[x])){ Toast.makeText(this,"lokasi saat ini: "+strAddress+"Lokasi terakhir yang tersimpan: "+(String)lastLokasiArray[x], Toast.LENGTH_SHORT).show(); dataSource.open(); lokasi=dataSource.createLokasi(strAddress, locCurrent.getLatitude(), locCurrent.getLongitude()); Toast.makeText(this,"memasukkan data lokasi baru: "+lokasi, Toast.LENGTH_LONG).show(); } else Toast.makeText(this,"lokasi saat ini: "+strAddress+"Lokasi terakhir yang tersimpan: "+(String)lastLokasiArray[x]+" data lokasi tidak perlu di perbarui", Toast.LENGTH_LONG).show(); }

Page 124: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

129

} lmgHistory.removeUpdates(lolHistory); stopSelf(); Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", false); sendBroadcast(intent); } else if(strAddress.length()==0) { sendLocation(locCurrent); lmgHistory.removeUpdates(lolHistory); stopSelf(); Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", false); sendBroadcast(intent); } lmgHistory.removeUpdates(lolHistory); stopSelf(); Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", false); sendBroadcast(intent); } } } Kode Sumber A.3 Memperbarui Lokasi Ketika Berpindah Tempat

private DBDataSource dataSource; boolean isGPSEnabled=false; boolean isNetworkEnabled=false; // The minimum distance to change Updates in meters private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 1000; // 100 meters // The minimum time between updates in milliseconds private static final long MIN_TIME_BW_UPDATES = 1000; //1000 * 60 * 1; // 1 minute //inisialisasi arraylist // private ArrayList<Kontak> values; private String strAddress; private final LocationListener lolSMS = new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub }

Page 125: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

130

@Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub parseLocation(location); Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", false); sendBroadcast(intent); } }; private BroadcastReceiver batteryInfoReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //int templevel= intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0); //level=String.valueOf(templevel); //batteryLevel.setText(level); SMSBatt(); Toast.makeText(getApplicationContext(), "Your Battery is low", Toast.LENGTH_LONG).show(); } }; public void SMSBatt(){ LocationManager lmgSMS = (LocationManager)getSystemService(Context.LOCATION_SERVICE); lmgSMS = (LocationManager)getSystemService(Context.LOCATION_SERVICE); //getting GPS status isGPSEnabled = lmgSMS .isProviderEnabled(LocationManager.GPS_PROVIDER); // getting network status isNetworkEnabled = lmgSMS .isProviderEnabled(LocationManager.NETWORK_PROVIDER); //Location locCurrent = lmgSMS.getLastKnownLocation(LocationManager.GPS_PROVIDER);

Page 126: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

131

if(isGPSEnabled){ lmgSMS.requestLocationUpdates(LocationManager. GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, lolSMS); } else if(isNetworkEnabled){ lmgSMS.requestLocationUpdates(LocationManager. NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, lolSMS); } } private void parseLocation(Location locCurrent) { if (locCurrent != null) { double dblLatitude = locCurrent.getLatitude(); double dblLongitude = locCurrent.getLongitude(); Geocoder gocSMS = new Geocoder(this, Locale.getDefault()); try { List < Address> lstAddresses = gocSMS.getFromLocation(dblLatitude, dblLongitude, 1); if (lstAddresses.size() > 0) { strAddress = "Baterai Handphone mau habis,Saya berada di sekitar: "; Address adrCurrent = lstAddresses.get(0); for (int intCounter = 0; intCounter < adrCurrent.getMaxAddressLineIndex(); intCounter++) { strAddress += adrCurrent.getAddressLine(intCounter) + "\n"; } if(adrCurrent.getFeatureName().length()> 0){ strAddress+="Nama Tempat: "+adrCurrent.getFeatureName()+"\n"; } strAddress += adrCurrent.getCountryName()+"\n"; strAddress += "Link lokasi: http://maps.google.com/?q="+locCurrent.getLatitude()+","+locCurrent.getLongitude(); SmsManager smsElevator = SmsManager.getDefault(); ArrayList<String> msgsplit=smsElevator.divideMessage(strAddress); // ambil semua data kontak nomorB = dataSource.getBattNomor();

Page 127: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

132

Object[] nomorBarray = nomorB.toArray(); for(int x = 0; x < nomorBarray.length ; x++){ SMS_TO=(String)nomorBarray[x]; smsElevator.sendMultipartTextMessage(SMS_TO, null, msgsplit, null, null); } finish(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); //strAddress="Could not retrieve Address, check your connection"; } } } public String preference(){ TextView battNotif; String tempBattNotif; //String tempinterval; //int interval; SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); try{ if(sharedPrefs.getBoolean("battery_notif", false)) { this.registerReceiver(this.batteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_LOW)); } else {//batteryLevel.setText(""); unregisterReceiver(batteryInfoReceiver);} } catch(Exception e){ e.printStackTrace(); } boolean checkBox = sharedPrefs.getBoolean("battery_notif", false); StringBuilder builder = new StringBuilder(); builder.append(String.valueOf(checkBox)); tempBattNotif=builder.toString();

Page 128: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

133

battNotif=(TextView)findViewById(info.MonitoringObjek.R.id.battery_notif); // battNotif.setText(tempBattNotif); if(tempBattNotif.equals("true")) { battNotif.setText("Pemberitahuan Baterai Aktif \n"); return tempBattNotif= "true"; } else if(tempBattNotif.equals("false")) { battNotif.setText("Pemberitahuan Baterai NonAktif\n"); return tempBattNotif= "false"; } return tempBattNotif; } Kode Sumber A.4 Mengubah Pengaturan Notifikasi Ketika Baterai

Habis public class CreateData extends Activity implements OnClickListener{ //inisilisasi elemen-elemen pada layout private Button buttonSubmit; private EditText edNama; //private EditText edMerk; private EditText edNomomor; //inisialisasi kontroller/Data Source private DBDataSource dataSource; private List<String> nomorK; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.create_data); buttonSubmit = (Button) findViewById(R.id.buttom_submit); buttonSubmit.setOnClickListener(this); buttonSubmit.getBackground().setColorFilter(0xFF00FF00, PorterDuff.Mode.MULTIPLY); edNama = (EditText) findViewById(R.id.nama_kontak); edNomomor = (EditText)

Page 129: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

134

findViewById(R.id.nomor_kontak); //edMerk = (EditText) findViewById(R.id.merk_barang); // instanstiasi kelas DBDataSource dataSource = new DBDataSource(this); //membuat sambungan baru ke database dataSource.open(); } //KETIKA Tombol Submit Diklik @Override public void onClick(View v) { // Inisialisasi data kontak String nama = null; //String merk = null; String nomor = null; //@SuppressWarnings("unused") //inisialisasi kontak baru (masih kosong) Kontak kontak = null; if(edNama.getText().toString().equals("")) Toast.makeText(this, "Harap isi kolom nama", Toast.LENGTH_LONG).show(); else if(edNomomor.getText().toString().equals("")) Toast.makeText(this, "Harap isi kolom nomor", Toast.LENGTH_LONG).show(); else { /* jika field nama dan nomor tidak kosong * maka masukkan ke dalam data kontak*/ nama = edNama.getText().toString(); nomor = edNomomor.getText().toString(); switch(v.getId()) { case R.id.buttom_submit: // ambil semua data kontak nomorK = dataSource.getAllNomor(); Object[] nomorKarray = nomorK.toArray(); for(int x = 0; x < nomorKarray.length ; x++){ if(edNomomor.getText().toString().equals((String)nomorKarray[x])){ Toast.makeText(this,"Nomor: "+(String)nomorKarray[x]+" sudah ada di dalam basis data, silahkan masukkan nomor lain.",Toast.LENGTH_LONG).show(); edNama.setText("");

Page 130: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

135

edNomomor.setText(""); break; } else{ // insert data barang baru dataSource.open(); kontak = dataSource.createKontak(nama, nomor); //konfirmasi kesuksesan Toast.makeText(this, "masuk kontak: " + "nama: " + kontak.getNama_kontak() + "nomor: " + kontak.getNomor_kontak(), Toast.LENGTH_LONG).show(); edNama.setText(""); edNomomor.setText(""); break; } } }

Kode Sumber A.5 Memasukkan Nomor Pemonitor ke Dalam Sistem public class ViewDarurat extends ListActivity implements OnItemClickListener{ private String SMS_TO = ""; //inisialisasi kontroller private DBDataSource dataSource; boolean isGPSEnabled=false; boolean isNetworkEnabled=false; // The minimum distance to change Updates in meters private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 1000; // 100 meters // The minimum time between updates in milliseconds private static final long MIN_TIME_BW_UPDATES = 1000; //1000 * 60 * 1; // 1 minute //inisialisasi arraylist private ArrayList<Kontak> values; private String strAddress; private final LocationListener lolSMS = new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub

Page 131: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

136

} @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub parseLocation(location); Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", false); sendBroadcast(intent); } }; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.viewdarurat); dataSource = new DBDataSource(this); // buka kontroller dataSource.open(); // ambil semua data kontak values = dataSource.getAllKontak(); // masukkan data barang ke array adapter ArrayAdapter<Kontak> adapter = new ArrayAdapter<Kontak>(this, Android.R.layout.simple_list_item_1, values); // set adapter pada list setListAdapter(adapter); // mengambil listview untuk diset onItemLongClickListener ListView lv = (ListView) findViewById(Android.R.id.list); lv.setOnItemClickListener(this); } public void onItemClick(final AdapterView<?> adapter, View v, int pos, final long id) {

Page 132: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

137

final Kontak k = (Kontak) getListAdapter().getItem(pos); SmsEmergency(k.getId()); int duration = Toast.LENGTH_LONG; Toast toast = Toast.makeText(getBaseContext(), "SMS darurat berhasil dikirim ke"+k.getNomor_kontak(), duration); toast.show(); } public void SmsEmergency(long id){ Kontak k = dataSource.getKontak(id); SMS_TO=k.getNomor_kontak(); LocationManager lmgSMS = (LocationManager)getSystemService(Context.LOCATION_SERVICE); lmgSMS = (LocationManager)getSystemService(Context.LOCATION_SERVICE); //getting GPS status isGPSEnabled = lmgSMS .isProviderEnabled(LocationManager.GPS_PROVIDER); // getting network status isNetworkEnabled = lmgSMS .isProviderEnabled(LocationManager.NETWORK_PROVIDER); if(isGPSEnabled){ lmgSMS.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, lolSMS); } else if(isNetworkEnabled){ lmgSMS.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, lolSMS); } } private void parseLocation(Location locCurrent) { if (locCurrent != null) { double dblLatitude = locCurrent.getLatitude(); double dblLongitude = locCurrent.getLongitude(); Geocoder gocSMS = new Geocoder(this, Locale.getDefault()); try { List < Address> lstAddresses = gocSMS.getFromLocation(dblLatitude, dblLongitude, 1);

Page 133: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

138

if (lstAddresses.size() > 0) { strAddress = "Saya Dalam Keadaan darurat,sekarang berada di sekitar: "; Address adrCurrent = lstAddresses.get(0); for (int intCounter = 0; intCounter < adrCurrent.getMaxAddressLineIndex(); intCounter++) { strAddress += adrCurrent.getAddressLine(intCounter) + "\n"; } strAddress += adrCurrent.getCountryName()+"\n"; strAddress += "Link lokasi: http://maps.google.com/?q="+locCurrent.getLatitude()+","+locCurrent.getLongitude(); SmsManager smsElevator = SmsManager.getDefault(); ArrayList<String> parts =smsElevator.divideMessage(strAddress); smsElevator.sendMultipartTextMessage(SMS_TO,null, parts, null, null); Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", false); sendBroadcast(intent); finish(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

Kode Sumber A.6 Menekan Tombol Darurat public class LocationMap extends FragmentActivity { //MapView mapView; GoogleMap mapView; Marker marker; //inisialisasi kontroller private DBDataSource dataSource; private Double latpos; private Double longpos; private String tmpt; private String tggl; //inisialisasi arraylist private List<Double> latLokasi; private List<Double> longLokasi;

Page 134: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

139

private List<String> nameLokasi; private List<String> tanggalLokasi; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map); dataSource = new DBDataSource(this); // buka kontroller dataSource.open(); latLokasi=dataSource.getLatLokasi(); dataSource.open(); nameLokasi=dataSource.getnamalokasi(); dataSource.open(); longLokasi=dataSource.getLongLokasi(); dataSource.open(); tanggalLokasi=dataSource.getTanggalLokasi(); Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", true); sendBroadcast(intent); int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext()); if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available int requestCode = 10; Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode); dialog.show(); }else { SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapView); mapView=fm.getMap(); fm.onCreate(savedInstanceState); mapView.setMapType(GoogleMap.MAP_TYPE_NORMAL); mapView.getUiSettings().setMyLocationButtonEnabled(false); mapView.getUiSettings().setCompassEnabled(true); mapView.getUiSettings().setZoomControlsEnabled(true); Object[] nameLokasiArray = nameLokasi.toArray(); Object[] latLokasiiArray = latLokasi.toArray(); Object[] longLokasiArray = longLokasi.toArray(); Object[] tanggalLokasiArray = tanggalLokasi.toArray(); for(int x=0;x<latLokasiiArray.length;x++){ latpos=(Double)latLokasiiArray[x]; longpos=(Double)longLokasiArray[x]; tmpt=(String)nameLokasiArray[x]; tggl=(String)tanggalLokasiArray[x];

Page 135: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

140

Log.d("debug marker: ", "Lokasi: "+latpos+","+longpos+","+tmpt+","+tggl); LatLng positionhis = new LatLng(latpos,longpos); mapView.addMarker(new MarkerOptions().position(positionhis) .title("History Lokasi\nTanggal: "+tggl) .snippet(tmpt) .icon(BitmapDescriptorFactory.fromResource(R.drawable.pin_big))); } MapsInitializer.initialize(this); //Enable GPS mapView.setMyLocationEnabled(true); //Map Ke Lokasi Sekarang mapView.setOnMyLocationChangeListener(new OnMyLocationChangeListener() { TextView tvLocation = (TextView) findViewById(R.id.tv_location); @Override public void onMyLocationChange(Location location) { //Get current location LatLng position = new LatLng(location.getLatitude(), location.getLongitude()); //Get address from location Geocoder geoCoder = new Geocoder(LocationMap.this, Locale.getDefault()); List<Address> addresses; try { addresses = geoCoder.getFromLocation(position.latitude, position.longitude, 1); if (addresses.size()>0){ //Get the first address from the list and get its address lines Address address = addresses.get(0); String addressString = ""; for (int i=0;i<address.getMaxAddressLineIndex();i++) { addressString+=address.getAddressLine(i)+ " "; } tvLocation.setText("Lokasi saat ini: "+addressString); if (marker != null) { marker.remove(); } //Add a marker with an image to current location marker=mapView.addMarker(new MarkerOptions().position(position)

Page 136: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

141

.title("Lokasi Sekarang") .snippet(addressString) .icon(BitmapDescriptorFactory.fromResource(R.drawable.pin_big))); } } catch (IOException e) { Log.d("GEOCODER", e.getMessage(), e); } //Zoom parameter is set to 14 CameraUpdate update = CameraUpdateFactory.newLatLngZoom(position, 15); mapView.animateCamera(update); //Use map.animateCamera(update) if you want moving effect } } ); fm.onResume(); }} @Override public void onBackPressed() { Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", false); sendBroadcast(intent); finish(); } }

Kode Sumber A.7 Melihat Riwayat Lokasi Pengguna Melalui Google Maps

public class DBDataSource { //inisialiasi SQLite Database private SQLiteDatabase database; //inisialisasi kelas DBHelper private DBHelper dbHelper; //ambil semua nama kolom private String[] allColumns = { DBHelper.COLUMN_ID,

Page 137: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

142

DBHelper.COLUMN_NAME,DBHelper.COLUMN_NOMOR,DBHelper.COLUMN_FLAG}; private String[] allColumnsLocation={ DBHelper.COLUMN_ID_LOKASI,DBHelper.COLUMN_NAME_LOKASI, DBHelper.COLUMN_LATITUDE,DBHelper.COLUMN_LONGITUDE,DBHelper.COLUMN_DATE}; private String[] allColumnsLocation2={ DBHelper.COLUMN_ID_LOKASI,DBHelper.COLUMN_DATE,DBHelper.COLUMN_NAME_LOKASI, DBHelper.COLUMN_LATITUDE,DBHelper.COLUMN_LONGITUDE}; //DBHelper diinstantiasi pada constructor public DBDataSource(Context context) { dbHelper = new DBHelper(context); } //membuka/membuat sambungan baru ke database public void open() throws SQLException { database = dbHelper.getWritableDatabase(); } //menutup sambungan ke database public void close() { dbHelper.close(); } //update kontak yang diedit public void updateFlag0(long id) { //ambil id kontak String strFilter = "_id=" + id; //memasukkan ke content values ContentValues args = new ContentValues(); //masukkan data sesuai dengan kolom pada database args.put(DBHelper.COLUMN_FLAG,0); //update query database.update(DBHelper.TABLE_NAME, args, strFilter, null); } //update kontak yang diedit

Page 138: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

143

public void updateFlag1(long id) { //ambil id kontak String strFilter = "_id=" + id; //memasukkan ke content values ContentValues args = new ContentValues(); //masukkan data sesuai dengan kolom pada database args.put(DBHelper.COLUMN_FLAG,1); //update query database.update(DBHelper.TABLE_NAME, args, strFilter, null); } //update kontak yang diedit public void updateKontak(Kontak k) { //ambil id kontak String strFilter = "_id=" + k.getId(); //memasukkan ke content values ContentValues args = new ContentValues(); //masukkan data sesuai dengan kolom pada database args.put(DBHelper.COLUMN_NAME, k.getNama_kontak()); args.put(DBHelper.COLUMN_NOMOR, k.getNomor_kontak() ); //update query database.update(DBHelper.TABLE_NAME, args, strFilter, null); } //ambil 1 kontak sesuai idw public Kontak getKontak(long id){ Kontak kontak = new Kontak(); //inisialisasi kontak //select query Cursor cursor = database.query(DBHelper.TABLE_NAME, allColumns, "_id ="+id, null, null, null, null); //ambil data yang pertama cursor.moveToFirst(); //masukkan data cursor ke objek kontak kontak = cursorToKontak(cursor); //tutup sambungan cursor.close(); //return kontak return kontak; } //method untuk create/insert lokasi ke database public Kontak createKontak(String nama, String nomor) { /*membuat sebuah ContentValues, yang berfungsi * untuk memasangkan data dengan nama-nama

Page 139: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

144

* kolom pada database */ ContentValues values = new ContentValues(); values.put(DBHelper.COLUMN_NAME, nama); values.put(DBHelper.COLUMN_NOMOR, nomor); values.put(DBHelper.COLUMN_FLAG, "0"); /*mengeksekusi perintah SQL insert data * yang akan mengembalikan sebuah insert ID */ long insertId = database.insert(DBHelper.TABLE_NAME, null, values); /*setelah data dimasukkan, memanggil * perintah SQL Select menggunakan Cursor untuk * melihat apakah data tadi benar2 sudah masuk * dengan menyesuaikan ID = insertID*/ Cursor cursor = database.query(DBHelper.TABLE_NAME, allColumns, DBHelper.COLUMN_ID + " = " + insertId, null, null, null, null); /*pindah ke data paling pertama */ cursor.moveToFirst(); /*mengubah objek pada kursor pertama tadi * ke dalam objek kontak*/ Kontak newKontak = cursorToKontak(cursor); //close cursor cursor.close(); //mengembalikan kontak baru return newKontak; } //method untuk create/insert lokasi ke database public Lokasi createLokasi(String nama_lokasi, Double latitude,Double longitude) { /*membuat sebuah ContentValues, yang berfungsi * untuk memasangkan data dengan nama-nama * kolom pada database */ Lokasi newlokasi=new Lokasi(); ContentValues values = new ContentValues(); values.put(DBHelper.COLUMN_NAME_LOKASI, nama_lokasi); values.put(DBHelper.COLUMN_LATITUDE, latitude); values.put(DBHelper.COLUMN_LONGITUDE, longitude); values.put(DBHelper.COLUMN_DATE,newlokasi.getKol_date());

Page 140: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

145

/*mengeksekusi perintah SQL insert data * yang akan mengembalikan sebuah insert ID */ long insertId = database.insert(DBHelper.TABLE_NAME_LOKASI, null, values); /*setelah data dimasukkan, memanggil * perintah SQL Select menggunakan Cursor untuk * melihat apakah data tadi benar2 sudah masuk * dengan menyesuaikan ID = insertID*/ Cursor cursor = database.query(DBHelper.TABLE_NAME_LOKASI, allColumnsLocation, DBHelper.COLUMN_ID_LOKASI + " = " + insertId, null, null, null, null); /*pindah ke data paling pertama */ cursor.moveToFirst(); /*mengubah objek pada kursor pertama tadi * ke dalam objek kontak*/ Lokasi lokasi = cursorToLokasi(cursor); //close cursor cursor.close(); //mengembalikan lokasi baru return lokasi; } private Kontak cursorToKontak(Cursor cursor) { // buat objek barang baru Kontak kontak = new Kontak(); // debug LOGCAT Log.v("info", "The getLONG "+cursor.getLong(0)); Log.v("info", "The setLatLng "+cursor.getString(1)+","+cursor.getString(2)+","+cursor.getString(3)); /* Set atribut pada objek barang dengan * data kursor yang diambil dari database*/ kontak.setId(cursor.getLong(0)); kontak.setNama_kontak(cursor.getString(1)); kontak.setNomor_kontak(cursor.getString(2)); kontak.setFlag_kontak(cursor.getString(3)); //kembalikan sebagai objek kontak return kontak;

Page 141: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

146

} private Lokasi cursorToLokasi(Cursor cursor) { // buat objek barang baru Lokasi lokasi = new Lokasi(); // debug LOGCAT Log.v("info", "The getLONG "+cursor.getLong(0)); Log.v("info", "Lokasi "+cursor.getString(1)); Log.v("info","LatLng "+cursor.getDouble(2)+","+cursor.getDouble(3)); Log.v("info","Date "+cursor.getString(4)); /* Set atribut pada objek barang dengan * data kursor yang diambil dari database*/ lokasi.setId_lokasi(cursor.getLong(0)); lokasi.setNama_lokasi(cursor.getString(1)); lokasi.setKol_latitude(cursor.getDouble(2)); lokasi.setKol_longitude(cursor.getDouble(3)); lokasi.setKol_date(cursor.getString(4)); //kembalikan sebagai objek kontak return lokasi; } private Lokasi cursorToHistoryLokasi(Cursor cursor) { // buat objek barang baru Lokasi lokasi = new Lokasi(); // debug LOGCAT Log.v("info", "The getLONG "+cursor.getLong(0)); Log.v("info","Date "+cursor.getString(1)); Log.v("info", "Lokasi "+cursor.getString(2)); Log.v("info","LatLng "+cursor.getDouble(3)+","+cursor.getDouble(4)); /* Set atribut pada objek barang dengan * data kursor yang diambil dari database*/ lokasi.setId_lokasi(cursor.getLong(0)); lokasi.setKol_date(cursor.getString(1)); lokasi.setNama_lokasi(cursor.getString(2)); lokasi.setKol_latitude(cursor.getDouble(3)); lokasi.setKol_longitude(cursor.getDouble(4)); //kembalikan sebagai objek kontak return lokasi; } //mengambil semua data kontak public ArrayList<Kontak> getAllKontak() { ArrayList<Kontak> daftarKontak = new ArrayList<Kontak>();

Page 142: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

147

// select all SQL query Cursor cursor = database.query(DBHelper.TABLE_NAME, allColumns, null, null, null, null, null); // pindah ke data paling pertama cursor.moveToFirst(); // jika masih ada data, masukkan data kontak ke // daftar barang while (!cursor.isAfterLast()) { Kontak kontak = cursorToKontak(cursor); daftarKontak.add(kontak); cursor.moveToNext(); } // Make sure to close the cursor cursor.close(); return daftarKontak; } //mengambil semua data kontak public ArrayList<Lokasi> getAllLokasi() { ArrayList<Lokasi> daftarLokasi = new ArrayList<Lokasi>(); // select all SQL query Cursor cursor = database.query(DBHelper.TABLE_NAME_LOKASI, allColumnsLocation, null, null, null, null, null); // pindah ke data paling pertama cursor.moveToFirst(); // jika masih ada data, masukkan data kontak ke // daftar barang while (!cursor.isAfterLast()) { Lokasi lokasi = cursorToLokasi(cursor); daftarLokasi.add(lokasi); cursor.moveToNext(); } // Make sure to close the cursor cursor.close(); return daftarLokasi; } public ArrayList<Lokasi> getAllHistoryLokasi(String keyDate) { ArrayList<Lokasi> daftarLokasi = new ArrayList<Lokasi>(); // select all SQL query Cursor cursor =

Page 143: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

148

database.query(DBHelper.TABLE_NAME_LOKASI, allColumnsLocation2, DBHelper.COLUMN_DATE+" like '%"+keyDate+"%'", null, null, null, null); // pindah ke data paling pertama cursor.moveToFirst(); // jika masih ada data, masukkan data kontak ke // daftar barang while (!cursor.isAfterLast()) { Lokasi lokasi = cursorToHistoryLokasi(cursor); daftarLokasi.add(lokasi); cursor.moveToNext(); } // Make sure to close the cursor cursor.close(); return daftarLokasi; } public List<String> getBattNomor(){ List<String> Nomor = new ArrayList<String>(); // Select All Query String selectQuery = " SELECT " + DBHelper.COLUMN_NOMOR + " FROM "+ DBHelper.TABLE_NAME+ " WHERE "+ DBHelper.COLUMN_FLAG+ "='1'"; SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); // looping through all rows and adding to list if (cursor.moveToFirst()) { do { Nomor.add(cursor.getString(0)); } while (cursor.moveToNext()); } // closing connection cursor.close(); db.close(); // returning lables return Nomor; } public List<String> getAllNomor(){ List<String> Nomor = new ArrayList<String>(); // Select All Query String selectQuery = " SELECT " + DBHelper.COLUMN_NOMOR + " FROM "+ DBHelper.TABLE_NAME; SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null);

Page 144: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

149

// looping through all rows and adding to list if (cursor.moveToFirst()) { do { Nomor.add(cursor.getString(0)); } while (cursor.moveToNext()); } // closing connection cursor.close(); db.close(); // returning lables return Nomor; } public List<Double> getLastRowLokasi(){ List<Double> LastLokasi = new ArrayList<Double>(); // Select All Query String selectQuery = " SELECT " + DBHelper.COLUMN_LATITUDE +", "+DBHelper.COLUMN_LONGITUDE + " FROM "+ DBHelper.TABLE_NAME_LOKASI +" order by "+DBHelper.COLUMN_ID_LOKASI + " DESC limit 1"; SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); // looping through all rows and adding to list if (cursor.moveToFirst()) { do { LastLokasi.add(cursor.getDouble(0)); LastLokasi.add(cursor.getDouble(1)); } while (cursor.moveToNext()); } // closing connection cursor.close(); db.close(); // returning lables return LastLokasi; } public List<String> getLastRowNamaLokasi(){ List<String> LastLokasi = new ArrayList<String>(); // Select All Query String selectQuery = " SELECT " + DBHelper.COLUMN_NAME_LOKASI + " FROM "+ DBHelper.TABLE_NAME_LOKASI +" order by "+DBHelper.COLUMN_ID_LOKASI + " DESC limit 1";

Page 145: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

150

SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); // looping through all rows and adding to list if (cursor.moveToFirst()) { do { LastLokasi.add(cursor.getString(0)); } while (cursor.moveToNext()); } // closing connection cursor.close(); db.close(); // returning lables return LastLokasi; } public List<Double> getLatLokasi(){ List<Double> LastLokasi = new ArrayList<Double>(); // Select All Query String selectQuery = " SELECT " + DBHelper.COLUMN_LATITUDE +" FROM "+ DBHelper.TABLE_NAME_LOKASI; SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); // looping through all rows and adding to list if (cursor.moveToFirst()) { do { LastLokasi.add(cursor.getDouble(0)); } while (cursor.moveToNext()); } // closing connection cursor.close(); db.close(); // returning lables return LastLokasi; } public List<Double> getLongLokasi(){ List<Double> LastLokasi = new ArrayList<Double>(); // Select All Query String selectQuery = " SELECT " + DBHelper.COLUMN_LONGITUDE + " FROM "+

Page 146: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

151

DBHelper.TABLE_NAME_LOKASI; SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); // looping through all rows and adding to list if (cursor.moveToFirst()) { do { LastLokasi.add(cursor.getDouble(0)); } while (cursor.moveToNext()); } // closing connection cursor.close(); db.close(); // returning lables return LastLokasi; } public List<String> getnamalokasi(){ List<String> LastLokasi = new ArrayList<String>(); // Select All Query String selectQuery = " SELECT " +DBHelper.COLUMN_NAME_LOKASI +" FROM "+ DBHelper.TABLE_NAME_LOKASI; SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); // looping through all rows and adding to list if (cursor.moveToFirst()) { do { LastLokasi.add(cursor.getString(0)); } while (cursor.moveToNext()); } // closing connection cursor.close(); db.close(); // returning lables return LastLokasi; } public List<String> getTanggalLokasi(){ List<String> LastLokasi = new ArrayList<String>(); // Select All Query

Page 147: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

152

String selectQuery = " SELECT " +DBHelper.COLUMN_DATE+ " FROM "+ DBHelper.TABLE_NAME_LOKASI; SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); // looping through all rows and adding to list if (cursor.moveToFirst()) { do { LastLokasi.add(cursor.getString(0)); } while (cursor.moveToNext()); } // closing connection cursor.close(); db.close(); // returning lables return LastLokasi; } public List<String> getAllFlag(){ List<String> flag = new ArrayList<String>(); // Select All Query String selectQuery = " SELECT " + DBHelper.COLUMN_FLAG + " FROM "+ DBHelper.TABLE_NAME; SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); // looping through all rows and adding to list if (cursor.moveToFirst()) { do { flag.add(cursor.getString(0)); } while (cursor.moveToNext()); } // closing connection // cursor.close(); // db.close(); // returning lables return flag; } // delete barang sesuai ID public void deleteKontak(long id) {

Page 148: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

153

String strFilter = "_id=" + id; database.delete(DBHelper.TABLE_NAME, strFilter, null); } }

Kode Sumber A.8 Kontroler ke Dalam Basis Data SQLite

Page 149: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

154

[Halaman ini sengaja dikosongkan]

Page 150: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

155

LAMPIRAN B. HASIL PENGUJIAN

Pada bagian ini dilampirkan hasil pengujian aplikasi pada

pengguna. Pengujian ditujukan pada beberapa orang di tempat berbeda.

Gambar B.1 Pengisian Kuesioner Pengguna Almas

Gambar B.2 Hasil Pengujian Pengguna Almas

Page 151: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

156

Gambar B.3 Pengisian Kuesioner Pengguna Nura

Gambar B.4 Hasil Pengujian Pengguna Nura

Page 152: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

157

Gambar B.5 Pengisian Kuesioner Pengguna Ayu

Gambar B.6 Hasil Pengujian Pengguna Ayu

Page 153: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

158

Gambar B.7 Pengisian Kuesioner Pengguna Nabil

Gambar B.8 Hasil Pengujian Pengguna Nabil

Page 154: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

159

Gambar B.9 Pengisian Kuesioner Pengguna Fitroni

Gambar B.10 Hasil Pengujian Pengguna Fitroni

Page 155: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

160

Gambar B.11 Pengisian Kuesioner Pengguna Khairy

Gambar B.12 Hasil Pengujian Pengguna Khairy

Page 156: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

161

Gambar B.13 Pengisian Kuesioner Pengguna Senky

Gambar B.14 Hasil Pengujian Pengguna Senky

Page 157: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

162

Gambar B.15 Pengisian Kueisioner Pengguna Firman

Gambar B.16 Hasil Pengujian Pengguna Firman

Page 158: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

163

Gambar B.17 Pengisian Kueisioner Pengguna Lala

Gambar B.18 Hasil Pengujian Pengguna Lala

Page 159: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

164

Gambar B.19 Pengisian Kueisioner Pengguna Shakti

Gambar B.20 Hasil Pengujian Pengguna Shakti

Page 160: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

165

LAMPIRAN C. DIAGRAM

Gambar C.21 Diagram Kelas Aplikasi Monitoring Keberadaan Objek

MenuUtama

-gridView: GridView-gridArray: Arraylist<item>-customGridViewAdapter: CustomGridViewAdapter-NomorB: List<String>-SMS_TO: String-dataSource: DBDataSource-isGpsEnabled: boolean-isNetworkEnabled: boolean-min_distance_change_for_update: long-min_time_bw_updates: long-strAddress: String-interval: int-lolSms: location listener

+onCreate(bundle): void#onResume(): void+onCreateOptionsMenu(menu): boolean+onOptionsItemSelected(MenuItem): boolean-batteryInfoReceiver(): BroadcastReceiver+SMSBatt(): void-parseLocation(Location): void-preference(): String

CustomGridViewAdapter

+context: Context+layoutResourceId: int+data: ArrayList<Item>

+CustomGridViewAdapter(Context, int, ArrayList<Item>): void+getView(int, View, ViewGroup): View

Item

+image: Bitmap+title: String

+Item(Bitmap, String)+getImage(): Bitmap+setImage(Bitmap): void+getTitle(): String+getImage(String): void

AndroidPreference

+onCreate(): void

CreateData

-buttonSubmit: Button-edNama: EditText-edNomor: EditText-dataSource: DBDataSource

+onCreate(bundle): void+onClick(View): void

DBDataSource

-database: SQLiteDatabase-dbHelper: DBHelper-allColumns: String-allColumnsLocation: String-allColumnsLocation2: String

+DBDataSource(Context)+open(): void+close(): void+updateFlag0(long): void+updateFlag1(long): void+updateKontak(Kontak): void+getKontak(long): Kontak+createKontak(String, String): Kontak+createLokasi(String, Double, Double): Lokasi-cursorToKontak(Cursor): Kontak+cursorToLokasi(Cursor): Lokasi+cursorToHistoryLokasi(Cursor): Lokasi+getAllKontak(): ArrayList<Kontak>+getAllLokasi(): public ArrayList<Lokasi>+getAllHistoryLokasi(String): ArrayList<Lokasi>+getBattNomor(): List<String>+getAllNomor(): List<String>+getLastRowLokasi(): List<Double>+getAllFlag(): List<String>+deleteKontak(Long): void

DBHelper

+table_name: String+column_id: String+column_name: String+column_nomor: String+column_flag: String-db_name: String-db_version = int+table_name_lokasi: String+id_lokasi: String+name_lokasi: String-db_create: String+db_create_lokasi: String

+DBHelper(Context)+onCreate(SQLiteDatabase): void+onUpgrade(SQLiteDatabase, int, int): void

EditData

-dataSource: DBDataSource-id: long-nomor: String-nama: String-edNama: EditText-edNomor: EditText-txID: Textview-btnSave: Button-btnCancel: Button-kontak: Kontak

+onCreate(bundle): void+onClick(View): void

Kontak

-id: long-nama_kontak: String-nomor_kontak: String-flag_kontak: String

+getFlag_kontak(): String+setFlag_kontak(String): void+getId(): long+setId(long): void+getNama_kontak(): String+setNama_kontak(String): void+getNomor_kontak(): String+setNomor_kontak(String): void+toString(): String

Lokasi

-id_lokasi: long-nama_lokasi: String-kol_latitude: Double-kol_longitude: Double-kol_date: String

+getId_lokasi(): long+setId_lokasi(long): void+getNama_lokasi(): String+setNama_lokasi(String): void+getKol_latitude(): Double+setKol_latitude(Double): void+getKol_longitude(): Double+setKol_longitude(Double): void+getKol_date(): String+setKol_date(String): void+toString(): String

ViewDarurat

-dataSource: DBDataSource-isGPSEnabled: boolean-isNetworkEnabled: boolean-min_distance_change_for_update: long-min_time_bw_updates: long-values: ArrayList<Kontak>-strAddress: String+lolSMS: LocationListener

+onCreate(): void+onItemClick(AdapterView, View, int, long): void+SmsEmergency(long): void-parseLocation(Location): void

ViewData

-dataSource: DBDataSource-values: ArrayList<Kontak>-editButton: Button-delButton: Button-battButton: ImageButton-battLowButton: ImageButton-tv_kontak: TextView

+onCreate(Bundle): void+onItemClick(AdapterView, View, int, long): void+switchToEdit(long): void+finale(): void#onResume(): void#onPause(): void

LocationHistoryService

-LastLokasi: List<Double>-strAddress: String-dataSource: DBDataSource-values: ArrayList<Lokasi>+isGPSEnabled: boolean+isNetworkEnabled: boolean-lmgHistory: LocationManager+min_time_bw_updates: long+min_distance_change_for_update: long+lolHistory: LocationListener

+onStartCommand(Intent, int, int): int+onCreate(): void+parseLocation(Location): void+sendLocation(Location): void

LocationMap

+mapView: Mapview+map: GoogleMap

+onCreate(Bundle): void+onBackPressed(): void+onMyLocationChange(Location): void

IncomingSms

+whereareyou: String+phonenumber: String-strAddress: String-dataSource: DBDataSource-values: ArrayList<Lokasi>-nomorK: List<String>

+onReceive(Context, Intent): void

LocationService

-strAddress: String-strTo: String+isGPSEnabled: boolean+isNetworkEnabled: boolean+lmgSMS: LocationManager+min_distance_change_for_update: long+min_time_bw_updates: long+lolSMS: LocationListener

+onStartCommand(Intent, int, int): int+onCreate(): void+sendLocation(Location): void

Page 161: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

166

[Halaman ini sengaja dikosongkan]

Page 162: Aplikasi Monitoring Keberadaan Objek Melalui Perangkat

167

BIODATA PENULIS

Penulis, Iqbal Dwiki Kurniawan, lahir di Surabaya, 25 April 1991. Penulis menempuh pendidikan dasar mulai kelas 1 sampai 6 di SD Khadijah Surabaya. Untuk pendidikan menengah, penulis tempuh di SMP Negeri 1 Surabaya dan selanjutnya di SMA Negeri 5 Surabaya. Selanjutnya penulis melanjutkan pendidikan vokasional di Pendidikan informatika dan Komputer Terapan(PIKTI). Kemudian pada tahun 2010 melanjutkan

pendidikan sarjana di Jurusan Teknik Informatika, Institut Teknologi Sepuluh Nopember Surabaya. Penulis juga aktif menjadi administrator Laboratorium Pemrograman Teknik Informatika dan organisasi kemahasiswaan seperti Himpunan Mahasiswa Teknik Computer (HMTC).

Penulis dalam menyelesaikan pendidikan S1 mengambil bidang minat Rekayasa Perangkat Lunak (Software Engineering) dan memiliki ketertarikan di bidang Database, Web Development, Mobile Appilcation Development dan Desktop Software Development. Penulis dapat dihubungi melalui email: [email protected]