@TnAHATLMU
Pemrograman
EirnaFt [rhclnGr
Menssunakan $lll( fin$fOid
dan Hac[ing flndroid
GRAHA IIMU
Ruko Jambusari No. 7A
Yogyakarta 55283
Telp. : 0274-889836;0274-889398
Fax. : 02'14-889057
E-mail : info@grahailmu.co.id
ff:""**'**-q'.*. -"'
I msrufft-ur?."rrii i
I " It'"Arl'.,:'i',rtrJrll I*t ' r'
i
Ucapan terima kasih iuga saya sampaikan kepada lurusan llmu Komputer
dan Elektronika FMIPA UGM yang telah mendanai penelitian memanfaatkan
Android, Arduino, yang telah memberikan pengalaman bagi penulis sehingga
sebagian hasilnya dituangkan ke dalam buku ini.
Ucapan terima kasih juga penulis haturkan kepada penerbit Graha llmu
yang telah sangat kooperatif sehingga buku ini dapat terbit'
KATA PENGANTAR v
DAFTAR I5I vii
BAB 1 TEKNOTOGI SMART PHONE 1
Latar Belakang Android 4
Perangkat Mobile Berbasis Android 5
Distribusi Aplikasi Android t4
Fragmentasi Android 16
Popularitas Aplikasi Mobile 16
I );tllirt l:it
viii Pemrograman Smart Phone Menggunakan SDK Android dan Hacking Android ix
Data RSS Feed dan Aplikasi Parser XML 234
Class ContohParserSAX. j ava 237
Class weather. j ava 249
Aplikasi RSSCuaca 254
SQLite 328
Method Akses Database SQLite 328
Modifi kasi Database SQLite 330
SQLiteOpenHelper 332
Service dan BroadcastReceiver RSSCuaca 338
Penerapan Event Listener pada Service 353
Aplikasi RSS Feed USGS dan API Google Maps 35s Teknologi Smart Phone
Aplikasi RSS-USGS 356
Pemrograman Smart Phone Menggunakan SDK Android dan Hacking Android llAl't I lckrrolollr Iirrr,rrl l)lronl
Dari berbagai sistem operasi perangkat mobile dan telepon seluler yang
Rich Miner, Nick Sears, dan Chris White berpindah ke Coogle. Pada saat itu,
ada, pada buku ini hanya difokuskan untuk sistem operasi Android dan
OS Android dikembangkan hanya untuk kebutuhan internal oleh Coogle dan
pengembanganaplikasinya. Karena Android memiliki banyak keunggulan
belum berlisensi open source.
dari sistem operasi lainnya.
Salah satu keunggulan OS Android yaitu mendukung cloud computing
Untuk memperkuat adopsi teknologi Android, perkembangan Coogle
(komputasi awan) di mana pengguna dapat memproses informasi yang membentuk Open Handset Alliance (OHA). OHA adalah grup konsorsium
dengan anggota lebih dari 34 perusahaan dari bidang hardware, software, dan
dibutuhkan menggunakan jaringan internet dan berkomunikasi dengan
telekomunikasi. Diantaranya HTC, lntel, Motorola, Qualcomm, T-Mobile,
server sebagai penyedia layanan disebabkan sistem operasi ponsel cerdas
dan Nvidia, Asus.
Android dikembangkan langsung oleh Coogle yang dirancang tidak hanya
dapat berintegrasi dengan berbagai layanan Google (Cmail, Google Maps, Android dirilis perdana dengan standar open source pada 5 November 2007
CTalk, Picasa, YouTube) juga dapat mendukung layanan dari Yahoo, bersama OHA, penjelasan lebih lanjut standar lisensi Android dapat dilihat
Facebook, eBay melalui aplikasi eksternal meskipun layanan Google masih pada sub-bab Standar Lisensi Android.
memiliki popularitas terbesar jika dibandingkan dengan Update Service yang
Alasan Coogle merilisAndroid secara open source, yaitu untuk penetrasi pasar
ditawarkan Yahoo, Apple, dan Nokia.
produk berbasis Android dan juga mempermudah user dqlam mengakses
Perangkat mobile Android dapat dianalogikan sebagai suatu handheld PC layanan Coogle dan juga Android digunakan sebagai media baru penayangan
(komputer genggam) karena memiliki arsitektur identik dengan perangkat PC. iklan yang dapat menambah reyenue (pendapatan) Google, yang sebagian
Untuk rincian spesifikasinya ditunjukkan sebagai berikut : pendapatan tersebut untuk pengembangan OS dan aplikasi Android. Model
periklanan dalam Android memiliki style yang sangat berbeda dengan iklan
1 . Prosessor ARM (umumnya produksi dari lntel atau Qualcomm) dengan
lrerbasis web yaitu Coogle AdSense. Pada Android yaitu menggunakan
clock antara 500 MHz hingga di atas 1 CHz single core maupun multi-
AdMob (Advertising Mobile) yang ditayangkan lebih interaktif di dalam suatu
core.
aplikasi. (Gambar 1.2).
2. RAM bertipe DDR2 atau DDR3 (non-upgreadable) antara 128 MB
hingga 1 CB.
3. Flash Memory non-volatile berkapasitas 150 MB hingga 512 MB yang
difungsikan sebagai media penyimpanan sistem operasi, kernel image,
dil.
4. Dukungan komunikasi audio, video dan data nirkabel (WiFi, Bluetooth,
C PRS/HS DPA/HSU PA, CDMA)
Gambar 1.2 Banner lklan AdMob pada AplikasiAndroid
5. Button keyboard dengan fitur touch screen (single-tap atau multr-tap).
6. Memiliki banyak fitur native (CPS, Radio, Kamera, Accelerometer, \islr:m Operasi Android memiliki 2 jalur distribusi. Jalur distribusi pertama
Compass, Gyroscope)
rlirlukung oleh Coogle atau Coogle Mail Services (CMS). Jalur kedua OS
rrrcnggunakan pola distribusi secara bebas tanpa dukungan langsung Google,
7. Slot kartu memori MicroSD, sebagai media penyimpanan aplikasi atau
1,,rngdikenal sebagai Open Handset Distribution (OHD).
data user.
N4r'skiltun saat itu Android sebagai OS pertama yang bersifat open source
B. Berbasis kernel linux yang telah dikustomisasi dan didukung sejumlah
librari tambahan. 1,,rrl.r basis mobile embedded, banyak pihak beranggapan Android hanya
',,'lru,rlr perangkat lunak untuk telepon seluler. Meskipun kini Android
',,'nr,rkin sukses di pasaran, yang pengembangan Android tidak hanya dalam
Latar Belakang Android rrr.rrrri lingkup sistem operasi, tetapi juga pada level pengembangan aplikasi
rrr,,rrlilirrnakan 5DK Android.
Pada tahun 2000, jauh sebelum produk ponsel cerdas beredar di pasaran,
Coogle mengakuisisi perusahaan bernama Android. Perusahaan tersebut lrrrlilgirry,r oplirnisme sejumlah produsen yang tergabung dalam grup OHA
merupakan pendatang baru berfokus untuk pengembangan sistem operasi ,lr;r.rr1l.rrrrhi rlari senrakin meningkatnya popularitas perangkat berbasis os
embedded dan software untuk perangkat mobile. Kemudian setelah Android ,\rrrlrrirl sclrinlig.t nrr:rubah dominasi pasar produk perangkat mobile yang
lnc. menjadi grup Coogle, para pendiri Android diantaranya Andy Rubin, ,,,.lrclrrrrrrry,r rrr,rsilr rliktr.rsai oleh Nokia dan Apple.
Pemrograman Smart Phone Menggunakan SDK Android dan Hacking Android llAll I lr,krrolr11r l,rrr,rrl l'ltrrrrr,
Perangkat Mobile berbasis Android peripheral lainnya berbasis komunikasi Bluetooth
Sejak awal tahun 2009 hingga saat ini, Coogle telah merilis sejumlah versi o Tampilan menu didukung animasi, virtual keyboard layar sentuh
produk ponsel cerdas Android dalam periode waktu yang singkat. Berikut o Dapat mengubah display dalam mode portrait atau landscape
adalah rincian versi-versi OS Android yang telah dirilis oleh Coogle dan tipe Perangkat dengan OS versi ini diantaranya HTC Hero dan Motorola
produk-produknya: Backflip. (Cambar 1.4).
(a) (b)
.l
Gambar 1.4 (a) HTC Hero dan (b) Motorola Backllip (Sumber : http://www.gsmarena.com)
l:,'
ti
3. Android versi 1.6 (Donut)
Dirilis pada September 2009 dengan penambahan fitur pencarian
Coogle lebih baik dari versi sebelumnya, adanya indikator baterai.
Dan beberapa fitur lain yakni :
pertama dirilisnya paket SDK untuk deve/oping aplikasi Android. o Sensor gesture (gerakan), dan Konverter lext-to-spcech (teks ke
Versi ini merupakan perbaikan dari versi 1.1 dengan penambahan ucapan)
beberapa fitur, diantaranya :
o Kontak telepon, resolusi display VWGA
o Fitur rekam atau pemutar video pada modus kamera Mobile device yang menggunakan Android versi ini yaitu Sony
o Mengunggah video langsung ke Youtube atau file gambar ke Ericsson Xperia X10 dan X10 Mini Pro.
Picasa
o Bluetooth dengan fitur Advanced Audio Distribution Profile
(A2DP) dan dapat terhubung dengan headset dan perangkat
Pemrograman Smart Phone Menggunakan SDK Android dan Hacking Android ItAll I llktrokrlit l,trr,rtl l'lrorrr,
Gambar 1.6 (a) Samsung Galaxy 5 (GT 1550x), (b) LG Optinus dan (c)Acer Liquid Strean
Gambar 1.5 Sony Ericsson (a) Xperia X|0, dan (b) X70 Mini Pro
(Sunber : http.//vtww.gsmarena. con)
5. Android versi 2.2 (Froyo)
Versi ini diluncurkan pada bulan Mei 201 0, berikut fitur yang dimiliki:
IiiILIK I
EaCra pcrpusfakau
i
daa f,earsJ,pan I
Propinsi Jann Timnr
Gambar 'l.t Samsung (a) Galaxy Tab dan (b) HTC Desire
1.8 Ponsel Nexus S dengan OS Android Gingerbread (Sumber : wvw.geeky gadgets.con)
(Sunber : httpl/ www. geeky-gadgets.com)
7. Android versi 3.0 (Honeycomb)
Android Honeycomb dirilis kuartal pertama 2011 sebagai versi yang
6. Android versi 2.3 (Gingerbread)
dioptimasi untuk perangkattablet. Waktu rilis Honeycomb bersamaan
Versi ini dirilis pada Desember 2010, beberapa fitur yang dimiliki
dengan produk tabrlet Motorola Xoom, Android versi Honeyconrb
versi C i n gerbread d iantaranya:
bersifat universal yang dapat pula dinstalasi pada perangkat smart
a. Optimalisasi JIT dengan framerate yang lebih baik dari versi phone. Beberapa penambahan fitur diantaranya Ul, API Video call,
Froyo dan kualitas video full Hi-Definition. (Cambar .l.9)
b. Mendukung file video format WebM dan file gambar berformat
WebP yang dapat mereduksi ukuran file hingga 40% dari format
JPC pada kualitas sama
c. Kemudahan input teks, dengan fitur auto-co mplete multibahasa
menggunakan kamus internal dan fitur kontrol select copy-paste
(serupa dengan iPhone).
d. Application Manager, untuk memantau resource memori dan
CPU tiap aplikasi
e. Sensor NFC (Near Field Communication) (tergantung dari
dukungan hardware NFC)
f. UI dengan tampilan lebih kompak dan sederhana
C. Telepon internet/VolP, melalui jaringan 3G atau WiFi
dikonfigurasi melalui 5/P (Session lnitiation Protocol)
Salah satu produk Android versi ini yaitu Nexus (Cambar 1.8). Gambar 1.9 Tablet Motorola Xoon dengan OS Android Honeyconb (Sunber : www.geeky_
gadgets.com)
llrrr1l1i,r s.r.rl irri sistr:m operasi versi Android terus diperbarui, seiring
pctttL'vt'lopt'r nr,tsih prrlrluklif dalam mengembangkan software stack Anr.lroiii
10 Pemrograman Smart Phone Menggunakan SDK Android dan Hacking Android IJAIJ I lckrtokrrlr lirrr,rrl l'lrorrr, 11
Microsoft
untuk meningkatkan performa atau penambahan dukungan hardware terbaru.
Hampir seluruh produk yang beredar umumnya dapat diupgrade ke OS versi
yang lebih baru. Hal ini menjadi pengalaman baru userdalam meng-upgrade
iPhone Apple
sistem operasi perangkat mobile. Karena pada perangkat mobile generasi
L4,6y"
sebelumnya jarang mendukung titur upgrade.
Pada Gambar 1.10 ditunjukkan grafik piechart persentase perbandingan
sejumlah versi Android yang beredar di pasaran, data ini diperoleh dari
website developer.android.com bulan Oktober 2011. Dari piechart tersebut
terlihat di pasaran ponsel Android telah didominasi OS Android versi 2.2.
canalys.con)
(2.3) Dari Cambar'1.11 terlihat data persentase shipping (pengapalan) berbagai
38,7 "A hdroid 2.2 smartphone yang beredar di pasar Amerika Serikat pada kuartal ke-4 tahun
45,396, 2010, ponsel berbasis berbasis OS Android menguasai pasar dengan tingkat
pertumbuhan (growth rate) 615,1"/". Hal ini didukung dari beberapa faktor :
. Faktor open source baik dari Ievel kernel, sistem operasi hingga
SDK. Sehingga mempercepat proses rilis produk ponsel cerdas dan
dukungan peripheral hardware terbaru, dampak positif dari open-
source memungkinkan cepatnya penanganan bug, pengurangan ongkos
produksi, serta dukungan aplikasi yang variatif dari pihak ketiga;
Gambar '1.10 Piechart persentase perbandingan versi-versi Android yang beredar di pasaran
. Dukungan Coogle Services. Konsumen dan produsen diuntungkan
(Sunber : www. canalys.com)
dengan adanya tambahan fitur layanan komputasi awan Google Service,
dan didukung ratusan ribu aplikasi yang tersedia dalam Coogle Market
(yang kini telah berganti nama Coogle Play);
Dari Gambar 1.10 terlihat setiap dirilisnya produk mobile Android terbaru, . Dukungan sejumlah perusahaan elektronika dan telekomunikasi yang
akan digunakan Android versi terbaru karena memiliki performa yang lebih tergabung dalam Open Handset Alliance (OHA) yang berpotensi besar
baik juga adanya perubahan spesifikasi perangkat keras seperti prosessor, menguasai pasar ponsel;
chip sensor, dan LCD layar sentuh. . Pengembangan kernel Linux, kernel linux yang telah lama dikenal
Selanjutnya dari grafik piechart Cambar 1.1 1 ditunjukkan data hasil analisis memiliki kompatibilitas tinggi di berbagai platform prosesor, baik single
pasar dari Canalys Research (Sumber: www.canalys.com). core atau multi-core dan juga mendukung akselerasi grafis 3D.
12 Pemrograman Smart Phone Menggunakan SDK Android dan Hacking Android liAlI I krklxrlogr Srrr;rrl [)horrc 13
Dell . NEC Corporation
Foxconn lnternational Holdings . Samsung
Garmin . Sharp Corporation
Haier Telecom . Toshiba Corporation qT r:::.1:."*"'
HTC Corporation . ZfE Corporation u+
".s
. S[ 1o'rtsrt
HuaweiTechnologies Sony Ericsson *:l;lllt r:rlll
E r:o:i::"'"*
# ffi lEt
Saat ini peminat Android di pasar internasional masih terus meningkat, di .5 Eil
lndonesia telah banyak distributor produk Android tanpa sistem bundling * lYi"l, ffi.
11tl
HT !,6,!i 1*
.,rr.i.
Effi
(unlocked), seperti HTC, Sony Ericsson, Acer, Samsung, LC. Sejumlah
fu lstnorllcurnrlrr rrr! 6XXt
operator telekomunikasi lndonesia juga memasarkan produk Android dalam
bentuk paket bundli ng (locked). Diantaranya Telkomsel bekerja sama dengan
(a) b)
produsen Nexian yaitu A9B0 Journey dan Bakrie Telecom yang mem-bundling
Gambar 1.12 (a) Market (Google Play) pada Android (b) Website Market atau Google Play
Android Huawei IDEOS C8150.
(Sumber : https://market.android.com)
Distribusi Aplikasi Android Market atau Coogle Play merupakan portal distribusi aplikasi resmi Android
Setiap perangkat Android terdapat sejumlah aplikasi yang dipisahkan di-maintain oleh Coogle. Sistem retail Coogle Play serupa AppStore milik
men.iadi 3 kelompok berdasarkan pola distribusi. Pertama, aplikasi native Apple. Sebelum aplikasi didistribusikan ke publik diperlukan proses registrasi
sebagai aplikasi fungsi dasar dan dukungan untuk Coogle Services, seperti dan kartu kredit untuk biaya pendaftaran 25 US $ (biaya ini berlaku pada
Phonebook, SMS, Gmail, Ctalk, Coogle Maps, Coogle Calendar, dan Market bulan Maret 2011), setiap aplikasi berbayar yang terjual Google Play akan
yaitu aplikasi yang akan mengakses data katalog aplikasi dari pihak ketiga mentransfer uang ke pengembang melalui akun tersebut. Tetapi untuk aplikasi
pada http:llmarket.android.com (URL tersebut masih bisa diakses, YanE gratis, pengembang tetap dapat memperoleh keuntungan melalui AdMob
otomatis mengalihkan ke domain baru : https:llplay.google.com) tanpa atau untuk penayangan iklan, sehingga iklan yang dibuka user menguntungkan
dapat melalui browser PC. bagi pengembang, Coogle, dan pihak yang mengiklankan produknya.
Kedua, aplikasi tambahan yang dikembangkan oleh produsen atau provider Tanpa Google Play aplikasi Android sangat rentan disusupi virus atau
dirancang untuk mendukung hardware spesifik suatu produk, sepefti aplikasi malware yang dapat melakukan pencurian data pribadi, karena aplikasi yang
Layar khusus produk Android Samsung, atau User lnterface Sense untuk didistribusikan Coogle Play melalui proses pengawasan dan filtering untuk
produk luaran HTC. Kedua jenis aplikasi di atas secara default telah ter- menghindari virus dan Malware . User dapat memberikan komentar aplikasi
bundling pada perangkat Android dan tidak akan hilang meskipun dilakukan yang diunduh, juga tingkat popularitas aplikasi tergantung dari skor masukan
factory reset. tiap user. Untuk menghindari resiko terkena virus/malware, sebaiknya hindari
mengunduh aplikasi dari pengembang belum terkenal dan berskor tinggi.
Ketiga, aplikasi yang dibuat oleh pengembang third-party, baik menggunakan
Karena skor tinggi dapat juga diperoleh dari komentar hoax (tipuan). Juga
SDK Android maupun SDK lainnya yang dapat di-publish pada Market (atau
hindari mengunduh aplikasi yang membutuhkan banyak permission (seperti
Coogle Play) setelah pengembang melakukan proses sign-in (pendaftaran). mengakses data sms, phonebook, atau e-mail).
User dapat pula mengunduh aplikasi Android pada website pengembang.
Sctelah pengunduhan APK selesai, instalasi akan berjalan secara otomatis
Awalnya Market hanya dapat diakses melalui Aplikasi APK Market yang secara
y;rng secara defaultakan tersimpan dalam direktori /system/app (memori
defaulttelah terinstalasi pada perangkat Android (Cambar 1.12a). Tetapi, kini
internal) atau dapat dipindahkan ke kaftu memori eksternal (untuk versi Froyo
melalui website Market Android (Cambar 1.12b), pada URL: http:llmarket.
.rtau android versi terbaru).
android.com atau https:llplay.google.com kita dapat mengunduh aplikasi
secara remote melalui browser Android, kemudian saat perangkat Android Menjadi pengembang aplikasi berbasis Android memiliki prospek cukup
sudah terhubung jaringan CPRS/3C/HSDPAA//i-Fi secara otomatis Market <r'rah, karena Android telah menjadi trend baru sebagai sistem operasi
mengirimkan aplikasi yang telah di-request ke perangkat Android target pt'rangkat mobile. Bahkan beberapa produsen telah menciptakan kulkas,
(diasumsikan satu akun user hanya memiliki satu perangkat Android). llrcrnr<lstat, dan sistem keamanan dengan OS Android.
14 Pemrograman Smart Phone Menggunakan SDK Android dan Hacking Android llAll I krkrrokrgr llrrr;rrl I'lrorrc 15
Fragmentasi Android mobile. Selain itu, sangat diperlukan kemampuan pemrograman berbasis
OS Android, karena platform ini memiliki perbedaan yang sangat signifikan
Semakin populernya OS Android di pasaran mengkibatkan semakin besar dengan aplikasi berbasis PC. Juga perancangan kode-kode aplikasi harus
permasalahan pada fragmentasi Android. Fragmentasi terjadi karena disesuaikan pada dukungan fungsi dari API target, hal ini lebih lanjut akan
perbedaan yang mencolok spesifikasi perangkat keras dari tiap produsen dijelaskan pada bab-bab selanjutnya.
(prosessor, ukuran display, atau tipe sensor), juga penerapan pustaka
proprietary (tidak open source) dan antarmuka Ul yang tidak seragam' Sebelum melanjutkan ke bab berikutnya. Perlu diingat bahwa saat buku ini
Sehingga terjadi perbedaan performa dan kompatibilitas aplikasi. Beberapa
ditulis, versi OS Android masih selalu diperbarui. Sehingga saat instalasi
kasus yang sering terjadi seperti aplikasi tidak dapat mengakses salah satu
SDK Android atau plugin yang dijabarkan mungkin tidak sama dengan
hardware atau display yang tidak berjalan normal.
versi terbaru yang telah kita unduh. Meskipun demikian, SDK dan API
dari versi sebelumnya tetap akan di-maintain oleh repositori Android dan
Untuk meminimalkan resiko fragmentasi dan inkompatibilitas, diprioritaskan bahasa pemrograman pada SDK Android akan tetap sama (berbasis bahasa
pengembang menggunakan API terendah dengan build proiect target pemrograman java).
padi platform versi paling rendah. Tetapi hal ini berdampak pada tidak
berfungsinya fitur API dari OS terbaru, salah satu contoh API yang jarang -oo0oo-
digunakan pengembang adalah API sensor Orientasi atau Gyroscope. Untuk
platform Android Honeycomb (3.0)telah tersedia too/ Android Compatibility,
merupakan perpanjangan dari API Fragments, untuk kemudahan
pengembangan porting ke perangkat Honeycomb. Honeycomb mendukung
desain Ul yang lebih dinamis dan fleksibel untuk perangkat dengan ukuran
dan resolusi display yang berbeda seperti tablet dan smart phone. API ini
berfungsi pula sebagai solusi dari masalah segmen Activity.
Pada perangkat Android terdapat sejumlah image yang serupa dengan sistem
operasi GNU-Linux dengan penambahan beberapa partisi image disesuaikan SGL SSL Ubc
fitur dan spesifikasi masing-masing perangkat Android (Steele, J., Neelson, T.,
201 1) diantaranya
Wffi{MffiW
:
. lmage bootloader, untuk fungsi inisiasi loading boot image saat proses
start up perangkat
.
.
lmage Boot, image ini sebagai media penyimpanan kernel linux dan
RAM disk
lmag,e System, berisikan sistem operasi yang berbasis UNIX dan
sejumlah aplikasi native
WWWWW
Gambar 2.1 Blok diagram 0S Android (Sunber: hftpl/developer.android.con)
lmage Data, untuk penyimpanan data di level user
Recovery lmage, berisikan sejumlah file untuk proses recoverY yang l',rrl.r lr,vr'l {r;tmawork Android terdapat sejumlah class untuk digunakan
akan mereset konfigurasi sistem operasi ke state defaultfactory ,rlrlrk.rsi Arr<lroi<1, yang menyediakan abstraksi hardware generik dan
Radio tmage. image yang berisikan sejumlah file untuk level stack radio l)r,n,,i,rlur,ln [rrnlisi man;rjemen Ul dan re.source. Sehingga aplikasi dapat
22 Pemrograman Smart Phone Menggunakan SDK Android dan Hacking Android IlAll 2 liollw;rrr, lil,rr k Arrrlrorri 23
sejumlah file konfigurasi untuk semua aplikasi atau 5 lc -l
lr -l
konfigurasi driver yang berhubungan dengan sistem operasi druxruxrut root rcDt zAtO-12-2'] I2 :50 sqlit€_stnr_-iotmdls
rlr'x*---- mot mo{t 2t}t0-l?-2? 11 :51 conf is
Android, diantaranya file konfigurasi mount point (identik (lnxryx-** flrtcn cacl* 2,A1f,-12-2? 11 :51 .dchr
d--rryr-x :y!teG sdcardJ0 2*1W12-2? l2:35 $dcaKl
file f stab), wifi, bluetooth. lturuxM rcot mot 29lq-12-2? 11 :51 d -) ./$ya/}arnsl,/d.bus -
. /sdcard lrwxEx Eot ruot 2g1g-12..2? ,1!51 crc *> Ttgstcatctc
: direktori yang digunakan untuk mount point perangkat yang dturyx--x slEtca slEtcR 2BlO'12-2? l1 :51 Dcrsi.t
dMtslFx Fot ?oot 2f}ltg-tz-z2 1l :sl iyrtctr
memiliki slot untuk kartu memori microSD. dt,urxr-x foit ruot 19?6-8r-01 g?rw sv.
dMr-x--- Fot mot lrHl-er m:B sLin
' /system direktori yang menyimpan file-file binary, sepertitool untuk dr-xru-x
drys-x
Eat
Eot
not
frot
r9?G{l-gr t?:E prcc
1979-G1-61 e?:m llb
level shell (seperti 1s , chmod, chown, dll), librari OS, m-x-- Fot Hot 11685 ltffir-Ol 6?;8 Lolr-re
aplikasi Android (*.apk), tont default, Dalvik VM, dan
urx--- mct rcot 2381 19Hl-ei 87:ffi init-qcqr.ch
-rex--- lOOt mot 1243 L9'l{i-{l-ol 8?:ffi lnit.qcoe-rc
-l*r-r--- re6t root ,7iS li?o.{i'^-Ol t?:m init.dcoa.mst boor-sh
lainnya. urz-- reot nst lU{ t9Hr-Ol tr7:il init.doldfish.ii
-m-x--- Eot rcot L9fi12 r9ft-A1-81 67:8 lnit -
/ sys berisikan file sistem dan konfigurasi untuk kontrol hardware, -rH--
dpxre-x
rcot
*lxtee
rcot
slptc,
r13 l!?g-S1-O1 m:m dcfault,prcp
2StS-12-2? 11:51. data
diantaranya sistem catu daya, RTC, CPU, memori, jaringan. -rrt-* lloot sot 12CC.t l?zwl-et W.X EUBOpT[-rk
im------ rcot reot 2&e-i0-15 mor
/sbin berisikan daemon untuk komunikasi dengan ADB dan dlffi
I
mot Eot 2glg-L2-2? 1.1:f,1
'.2:,t6 d.v
aplikasi level server (administrator)
Gambar 2.4 Sejumlah dtrektori dan frle yang terdapat pada root filesystem Android
/proc direktori menyediakan sejumlah informasi di level
ini
hardware, sistem operasi dan virtual machine. Diantaranya
cpuinfo, meminfo, ioport, diskstats, vminfo yang dapat l'ada sistem direktori os Android kernel Linux tidak terlihat, sedangkan pada
diakses dengan perintah cat. ()S CNU-Linux umumnya tersimpan pada direktori ol". Hal ini disebabkan
I cd prec kt'rnel linux tersimpan pada image terpisah secara fisik juga tersimpan pada
bd rrcc
I c.t ctBlnfo rnemori non-volatil sehingga kernel meniadi tidak tampak.
icet ctuinfo
Prcccssor : nnlill26EJ-S Ec 5 (uSl)
Eosonlns | 129 -9.
Ferturcc : tvp helf th(r5 f.stElt ufp cdsp Jaua
CPll irnlexntar : ,x{1
CPl, rfhlt6ct.s: S'EI Standar Lisensi Android
CFU eciilt 6*
PPU p.rt 6dr26
GPll EU li lon 5 Sistem operasi Android berstandar lisensi terbuka dengan source code
Gach. tgpe sltc-t hruqgh s<rftware stack terdistribusi secara open source. sehingga siapapun baik
f,rcha cloan not Equird
llachr locldom not i8lrlElt6d
i:acl- fomt llrruard lx'rsonal, institusi, hingga perusahaan perangkat mobile atau telekomunikasi
lI el<a {&,6 rlapat berkontribusi mengembangkan os Android dimulai dari level kernel,
:I rssoc 1l
rl lln. lcngth t2 lilrrari sistem operasi hingga aplikasi native.
lI rat* t2
b st2c 65535
D msoc
D lino lcngrth
1
,2 ()S Android dan kernel menggunakan standar lisensi Apache 2.0, sebagai
p rrtr st2 standar lisensi yang telah banyak diimplementasikan oleh komunitas open
hcrdsn fpldf trh
Bcu laloo m \( \t rce. Lisensi Apache mengij inkan pengembang menggabungkan pustaka
5crl.1 .rt.ru aplikasi komersial (c/osed source) dengan aplikasi open source. Untuk
I
,rlrlikasi. Android (yang berekstensi APK) yang dibuat pengembang pihak
Gambar 2.3 lnfornasi CPU nenggunakan Wrintah cat cpuinf o kctiga dapat didistribusikan melalui Market dengan kebebasan penggunaan
st.rndar lisensi, baik lisensi open source (CNU CpL, Apache, dll.J, ,tru
. init. * : file.file ini berisikan sejumlah shell command yang akan
t lost:d source diantaranya aplikasi native Cmail, CTalk, dan Coogle Maps.
l!.rgian aplikasi dari tool sDK, diantaranya modul, file framework, dan libiari
menjalankan aplikasi service atau daemon saat start-
.kstcrnal memiliki standar lisensi yang berbeda diantaranya GNU cpL v2
up Android, file tersebut identik dengan file yang ada di
,rl.rrr BSD.
direktori / eLc/ inlt. d/ pada OS CNU-Linux.
24 Pemrograman Smart Phone Menggunakan SDK Android dan l-lacking Android llAll,' liollw,rrr. iil,rr k Arrrlrorrl ?5
Konsep dan Fungsi LevelAPl pada Aplikasi Android I .vel .APl - . merupakan satuan nilai integer yang digunakan untuk
rrrengidentifikasi versi framework Apl. Dalam satu perangkalAndroid hanya
Salah satu dasar pengetahuan yang diperlukan untuk menjadi programmer rrremiliki dukungan satu level APl, seperti yang telahditunjukkan pada contoh
Android yaitu perlunya pemahaman fungsi level API yang didukung tiap pcrangkat-perangkat Android di bab pertama.
perangkat Android. Hal ini sangat penting karena level API mendefinisikan
stratu tetap dapat berjalan secara normar meskipun aplikasi tersebut
dasar kompatibilitas antara aplikasi Android ke sejumlah perangkat. rli r;rncang menggunakan API yang lebih rendah dari versi Api yang
Perbedaan level API yaitu pada penambahan c/ass dan method ditujukan didukung
untuk mengatasi masalah security atau peningkatan performa API yang 1r.r<la perangkat. Hal ini disebabkan pada Apl versi di atasnya tJtap meng-
rrrr,/ude-kan method versi sebelumnya (tidak terhapus r"."r" mutlak ata-u
umumnya perbedaannya tidak signifikan.
lronggantian method secara deprecate) dan pada versi terbaru diberikan
Pada sistem Android, Ievel API merupakan besaran integer yang 1x'nambahan method dan class. sedangkan uniuk Apl yang tidak ter-update
mengidentifikasikan revisi dari framework API dan ditunjukkan sebagai versi t t'tap d i-inc/ude.kan tanpa modifikasi.
dari platform Android, masing-masing platform menyediakan framework API
untuk diimplementasi oleh aplikasi Android. Framework API tersebut terdiri
dari beberapa bagian, yaitu:
. Paket-paket dan class-class yang tergabung dalam satu core set
. Atribut-atribut untuk pendeklarasian file manifest, yang tersusun dalam
satu set element XML (Extensible Markup Language)
. Atribut-atribut untuk pendeklarasian, akses resource, dan satu set
element XML
. Satu set Intent
. Set permission untuk digunakan aplikasi, termasuk pengaturan
permission dari sistem
Pada Tabel 2.1 ditunjukkan korelasi versi, level APl, dan sebagian fitur-
fiturnya.
Garsa 25 rlustrasi kanwatibitibs a$tarbverApr, dari tiq perarykatAfiroid
Tabel 2.1 Platfwm Android. LevelAPl, dan Fitur yang dimiliki Suatu aplikasi tidak dapat dijalankan pada perangkat yang memiliki level Apl
k'bih rendah dari level APIaplikasi, disebabkan aptitcasi rienerapkan method
Level rlan fitur yang tidak dimiliki level Apr di bawahnya. Meskipun demikian, user
Versi Platform Fitur-fitur API
API rlapat mengatasj
Android 3.0 10 Video call, HD Video, drag dan drop (sys clipboard) {engan cara meng-update os perangkat ke versi terbaru
y.rng telah disediakan produsen atau kornunitas pengembang Android.
Android 2.3 9 Elesain Ul baru, API NFC, Cyroscope, SIP VolP
I lnkompatibilitas antara. .p"1iF dengan perangkat cukup jarang terjadi
Android 2.2 Compiler JlT, backup dan policy manager i
karena seperti_yang telah dijelaskan seberumnya, perbedaan level
Android 2.1 7 Live wallpaper, opaque display, API Webkit ipr t"nin
Android 2.0.I 6 Perbaikan bug, Perubahan minor sebagian API r..ngarah pada penambahan fitur bukan perubahan method-method dasar
Android 2.0 5 Komunikasi device remote, Thumbnail view media s.h i ngga dalam membuat.apl ikasi pengembang dapat mengi mplementas
i kan
Android 1.6 4 Penambahan framework pencarian, Cesture, text-to- rncthod API yang serendah mungkin.
speech
Android 1.5 3 Penambahan framework Widget, Ul, Speech Recognition
Android 1.1 2 Lavout marouee. funesi method densan UID soesifik
dan ADT
-oo0oo-
Garbar 3.1 Tanpilan window aplikasi yang bersunber dari website Android (hfipl/developer.
30 Pemrograman Smart Phone Menggunakan SDK Android dan Har:king Android lrr'.l.rl,r't ll'1.',lrli Arllrr,,,l,1.,,, n,,, 31
android (file -apk) yang telah ter-signed atau un-signed. \'.rng menjadi pertanyaan adalah mengapa diperlukan ruang harddisk yang
Meskipun demikian, kita dapat membuat aplikasi Android tanpa r rrkup besar untuk SDK nndroid, hal ini dikarenakan dalam SDK dibutuhkan
rnenggunakan IDE Eclipse dan plugin ADT. Yaitu menggunakan st'jumlah package pendukung yang masing-masing dapat berukuran besar
aplikasi teks editor, misalnya notepad, Notepad+ + dan lainnya. (rata-rata di atas 40 MB).
Tetapi, membangun aplikasi dengan cara tersebut akan mempersulit Meskipun rekomendasi spesifikasi di atas termasuk high-end, tetapi masih
pengembang karena tidak mendukung fungsi auto-carrect atau rnemiliki kekurangan. Yaitu berbasis display framerate emulator yang sangat
pengecekan kesalahan penulisan pada package atau method.
rr.ndah saat menjalankan aplikasi 2D atau 3D. Hal ini bukan disebabkan
karena performa hardware, melainkan terbatasnya emulasi QEMU (Cambar
|.3a menunjukkan state emulasi QEMU sesaat setelah pengaktifan emulator).
Dalam proses pengembangan Android diperlukan spesifikasi minimal
Karena itu, setiap pengembang tetap membutuhkan perangkat Android fisik
hardware agar SDK Android dapat berjalan secara normal, berikut adalah
rrntuk menguji apakah aplikasi dapat berjalan normal atau tidak, khususnya
rinciannya:
rrntuk aplikasi berbasis grafis 2D atau 3D. Pada Gambar 3.3b tampak animasi
1. Prosesor Pentium 4 dengan clock 2,0 CHz, cache memori lMB atau lnoting sistem operasi Android.
yang setara-
2. DDR RAM 1,5 CB.
3- Space harddisk sekitar 2,6 CB (untuk aplikasi JDK, Eclipse + ADT, SDK,
dan AVD)-
4- VGA (mendukung OpenCL), dengan memori 64 MB
5- Sound Card Kompatibel (Onboard/PC!).
6- Port USB, Koneksi lnternet (menggunakan LAN, WiFi, Modem, atau
lainnya).
7- Sistem operasi Microsoft Windows XP, Windows 7, Linux, atau Mac
os x.
3. Space Harddisk 15 GB (untuk aplikasiJDK, Eclipse+ADT, SDK, dan Mcskipun digunakan SDK versi terbaru, Emulator masih belum dapat
AVD) rrrr.rrjalankan aplikasi dengan look and feel yang sama pada perangkat
Arr<lroid. sedangkan jika menjalankan aplikasi mobile Java berbasis Jiur
4- VCA lntegrated on-board atau PCl-Express (ATl atau nVidia), dengan
t.urrpak sedikit perbedaan framerate display antara ponsel berbasis Java dan
VRAM 256 MB
r.rrrulator ponsel Java.
5. Compatible Sound Card (Onboard atau PCI)
6- Port USB 2.Q Koneksi lnternet (menggunakan Modem HSUPA atau
ll.rl ini disebabkan emulator membutuhkan resource prosessor dan RAM
y.urg r:ukup besar, disarankan aplikasi SDK tidak dijalankan pada Net-Book
broadband)
k.ur.rr.r memiliki kinerja yang lebih rendah dari laptop biasa.
7. Sistem operasi Microsoft Windows 7
32 Pemrograman Smart Phone Menggunakan SDK Android dan Hacking Android ItAll I Lt,,l,rl,r,,r ll)K, :il)KArrtlrorrl rl,rnAl)l 33
lnstalasi JDK dan Eclipse seperti compiler dan debugger. SDK Android juga tidak kompatibel
Pada Sub-bab ini akan dibahas proses instalasiJDK, Eclipse, SDK, dan plugin
dengan JDK versi open source (openJDK) dan hanya kompatibel
Eclipse ADT untuk sistern operasi Microsoft Windows XP dan Windows 7. dengan IDK versi 1.5 (Edisi 5) ke atas.
Antara kedua versi tersebut terdapat beberapa perbedaan proses instalasi 2. Setelah package JDK terunduh, lakukan proses instalasi JDK dengan
yang akan dijabarkan secara terpisah. Diawali dengan menginstalasi /DK meng-klik Next dua kali (Cambar 3.5) dan diakhiri dengan meng-lilik
$ava Development Kit) sebagai runtirne agar aplikasi SDK Android dan IDE Fin ish.
Eclipse dapat berjalan. Pada aplikasi IDE Eclipse akan digunakan sebagai
development environment untuk pemrograman aplikasi. Berikut rincian
proses instalasinya:
1. Unduh paketJDK dari Oracle, pada link URL: hup:llwww.oracle.coml
technetwork liavaliavase/downlaadslindex.html. Alamat unduhan
JDK saat ini telah beralih ke website Oracle karena Sun Microsystem
diakuisisi Oracle pada Januari 2010. Penulis menggunakan.f DK versi
6 update 22 untuk digunakan pada sistem operasi windows XP dan S.hct 6$tm.l &.ar8 b rl3d im trp I't bdon. Vo.r 5* drdea yo.r dtrfer cf ftrkru rffrr
h*tnaU$ bV uiarg $re ldd$errcre prqfus *Sty tr te Cs*a-parg
7. Dengan nama file 1dk-6u22-windows-i5B6.exe, versi ini
kompatibel untuk prosesor berbasis intel 586 (32bi0, seperti: Celeron, ft*r,cOc*cl&n
l*ra$1,!) E $el*pr;nt nti
Celeron M, pentiunr 4, Pentium D, Dual Core, Core2 duo, Core i7, t&dnE :2{ hdr*rn!{ylE X€
dan kompatibel dengan prosesor AMD, seperti Sempron, Athlon, dll. 61,ts&* 3a ti*illrsq"aE
S'Amyurhrd*tit.
trE@
..q
Cf,r{ACLE'
J!9.!t!!!f,!x?t
l3i{rt
5-!i.dlWe .9:1:- d .,ryr* 6s=a* Ilrllo.rrd ltll,
t
5*dh*
..- _.:
JEr.Lsii&J
Jarfi* Javr af Oqffitil$ I &E:.r{ txr&r
sti ld
.lnal:
rai.l! s Mibllr tMf,
h*.:!t
J*!i* i re.tr,l
ttue
{Brds it r!*}
**rup *m I tk.lrrs.l
le Gambar 3.5 Menu instalasiJDK Standard Edition edisi 6 update 22
,a! ,86
i f"* !r&.a*B
*xa.fiEffiF* t h{iqs)Ifi
BrFlde!ffffr l>*.qx
!E{t
-.(albd-fitS6-JS & I ea4rc
Selanjutnya, unduh Aplikasi IDE Eclipse Pulsar versi 3.5 (Calileo) pada
iafi dce'3orq ffilgt !a ia:q
kJf, LlHrh:*n-.8
dr*qtsEryr#rlriF.
tkn irt *,kr.*,.r.r
i**U*.&
d t sni website eclipse (Cambar 3.6a ) dengan URL: hap:/lwww.eclipse.orgl
@ -
+& *4rtus:eL:6mdI?-otFoffitlE tlr.e'lffi
dow n I oad s I p ackages I p u I sa r-mob i I *j av a-devel opers/ gal i r eo s r 2/atau
fr Ermrrt"il.4.i-.raJ+rorfr, tu..l,+ "i
ri{dd$affil.l6 -
lr$ t l.lia
h ltOri{ext}r.4t'.&r
dapat digunakan repositori Universitas lndonesia icambar 3.6b) URL:
http://kam bi n g. u i.ac. idlecl ipse/techn ology/ epp/ down Ioads/release/
Gambar 3.4 Halaman uduhan JDK pada Website Oracle (Sumber: httpl/www.oracle.con) galileo/SR2/
Pulsar merupakan IDE versi khusus untuk pengembangan project
Mobi le laua, diantaranya J2ME meskipun kita dapaipula mingguna'kan
Untuk paket installerJRE (Java Runtime Edition) tidak dapat digunakan t<'lipse selain package Pulsar.
untuk menjalankan SDK Android, hal ini disebabkan JRE tidak
menyediakan sejumlah file yang diperlukan untuk development, ll)l- yang dapat diunduh diantaranya Eclipse versi 3.Slpulsar dan
w'rsi .1.(t/l
/r'/ir.r.s yang k.mpatibel dengan plugin ADT. Tetapi, penulis
34 Pemrograman Smart Phone Menggunakan SDK Android rlan ll;tr:kttttl Arttlrorrl llAll I lrr',l,rl,t',r lltK. :,1)K Arrrlrorrl rl,rrr AI)l 35
sarankan gunakanlah versi Pulsar. Karena versi tersebut cenderung
lebih ringan dibandingkan versi Helios.
ki lndex of
/eclipl€ / te.hnology,/eFp/doantoad! J,ele.re lgalileo,'SR2/
OPukrd$srhJ*ro<sE
(a) (b)
Gambar 3.6 Halaman unduhan Eclipse Pulsar (a) pada eclipse.org (b) repositorikanbing.ui.ac.id
lt: t::- i
Itderp ro llro rtrx!.rd S&l( Ioule
SalrryfiIiud
tlr a*d ia lrrrr e *r:r{fi }r n:.iftry !, *r}#
5{k6
!l rEr*ft! !r! n ;* J;lq orcl*sf+q
(a) (b) *lrr *rbt hrr rr- .* *rr f rwie lq.*.lt
*'Niih &r *ta t&v t,ril-r" F
ri*e:
Gambar 3.8 Tampilan tataran wndan (a) SDK ttan (b) ADT pada websiteAndroid (Sunber :
:,.t*.dbffi
Wtltutt@.android.com)
w (a)
6aogle lnc.
0.6.0.c
(b)
f E!'r? fftr*r6&!-*aa€
*.{}$.tsf {e iiN
ltr F*CJe'I r!$
s&C Ir-*,:;lrfi-..-i
!..:r4 ii hr,:] 1, Fd l
Gambar 3.9 (al Fb afiirc dan A) File insaller SDK Manager
Gambar 3.10 Proses lnstalasi menggunakan installer SDK Manager
lfirEr x
:l r} a}$frs Fa*J
!-C L a6obi Gambar 3.12 Menu SDK manager pada start menu windows 7
It Cr:rt$di**{i|(l.i6
i:l;J!dd-@
ta i.:f, *E
!3: r.; daifbrc
ii: i-] *r{r€ ulL6b-c -r:!:i--:-a.-yi;;-i.,ia:-i- : : ffi sebelum memasuki proses instalasi selanjutnya, diperlukan perubahan
'beserta
al u* konfigurasi view untuk menampilkan nama file ekstensinya
& ijr iroli
ll, ;3 !:rb-d.lw pad_a windows explorer, yang tahapannya ditunjukkan pada Gambar
il ! "t ri*Qfu,r-r6.- 3.13:
o Untuk windows XP, buka windows explorer dengan meng-klik
menu Iools --> Folder Options, sedangkan padi Windows Z,
buka windows explorer, kemudian tekan tombol AL't + f (untuk
membuka menu bar Tools), lalu klik Folder Options.
o Klik Tab View dan hilangkan check-box pada opsi Hide
extensions for known file types.
.*Ioq
[.1ry ldrffi.ldry!_
Dreffito*ffitdrill
rtc
OpE frE Crtq-
Fol*deptiffi*
(b) (c)
|} ll b.rElr.L* r+
Gambar 3.11 Pembuatan shoficut SDK Setup ke desQop Wndows
(a) windows 7, (b) windows Xp, dan (c) menu Fotder Option
40 Pemrograrnan Smart Phone Menggunakan SDK Android dan Hacktng Android l:i\11 I ll ,l,ll,t.,l ll tl.',1 )h/\rrrJr,,i,l rl,rrrAl )l 41
Market. Diantaranya mendukung pembatasan distribusi untuk aplikasi
lnstalasi Package SDK Android yang terintegrasi dengan server Market dan fungsi obfuscating.
untuk
Setelah instalasi SDK selesai, dilanjutkan tahap. selanjutnyapackage Darl tiap versi package memiliki nama file yang berbeda hal ini
,*gi"t,ri"ti sej umlaf, pr.d8; yang diperlukan' Berikut tipetipe ditujukan untuk kemudahan identifikasi versi paket. Misalnya, untuk
yang-tersed ia pada repositori And roid: package update too/s edisi revision 7 memiliki nama file tool-s
rO?-windows. zi-p dan nama file package Google API versi B
. Android SDK Tools, merupakan package tool dasar
yang secara default
adalah google_apis- B_r0 2 - zrp.
SDK.'.Berisikan
telah ter-instrfl Uieiru ii-include dalam package installer
tool-tooluntukdeve/opingaplikasiAndroid(diantaranyaadb'ddms'
'sqIite3) yang seluruhnya berada di
emulator, .r."J"!f8, Untuk menginstalasi package tersebut, berikut dijabarkan proses-prosesnya:
dalam direktori \toor s'
. Documentation for Android sDK, berisikan dokumentasi manual SDK 1. Jalankan SDK Manager, saat proses starting SDK Setup akan muncul
informasi pop-up window Refresh Sources (Cambar 3.14a) yang otomatis akan
Jalm for*"t html yang diantaranya panduan deve/oping'sederhana' me-refresh list package terbaru yang tersedia ke repositori Android.
package API ata; librri.l,ss, conioh pembuatan
"plif.q:i Developer Jika proses refresh list telah selesai klik C/ose untuk menutup window
Dokumentasi inisr*i dengan versi update pada website jika saat kita membuka aplikasi SDK Manager Android dalam kondisi
dokumentasi tersebut
n"J.ia, nup,ru"iutipi;.^xaroia{om. sel uruh offline, secara otomatis proses fetching list repositori akan gagal).
tersimpan dalam direktori \docs '
.sDKplatformAndroid,packageiniterdiridaribeberapaversi.Masing-
2. Jika tampak pop-up window Choose Package to lnstall yang akan
yang didukung memverifikasi proses pengunduhan atau update package. Proses
masing u"rri ,"*iliki'packas"e class versi API Android update dapat dibatalkan dengan meng-klik button Cancel (Gambar
dan aplikasi urrfitoi dalai] format bytecode (*iar)' dan contoh-
versi API paket' Versi^yang tersedia 3.14b). Atau jika Anda hanya memerlukan instalasi atau update dari
iont"f.l aptikasi Vuniai*t,aikan salah satu package, klik radio button Accept untuk mengunduh atau
diantaranya API'Rn?roid versi 1 '5, 1'6, |ingg3 versi 2'3' Beberapa
Reject untuk mengabaikan pada salah satu package tersebut.
vendor juga merilis package secara terpisah pada repositori-tersendiri'
contohnya sr.tunl'puc[ige etn't"toi untuk pengembangan
aplikasi 3. KIik menu Available Packages pada window SDK Manager untuk
memilih package secara manual akan diunduh dan di-install (Cambar
untuk CalaxY Tab.
3.14c).
. Coogle APt by Coogle /nc, package ini terbagi menjaditeberapa i
versi
4.
net,l,rng tersimpan"pada direktori \ add- on s \ goo g le_aP s - x_ Klik button lnstall Se/ected untuk memulai proses pengunduhan,
selanjutnya akan muncul kembali pop-up window Choose Package to
rxx. Berisi ,t.flr" it,ti *tp" j ava'untuk penerapan API Google
AlD. lnstall, klik /nsta// untuk memulai pengunduhan yang kemudian akan
Maps, yans ,"rv"airf, n difauli im.aqe
liloa$- T:llc,:lili: melakukan proses instalasi secara otomatis (Gambar 3.15a dan 3.15b).
Pacloge rnr Juga
emulator agar dapat menjalankan .net C99Sle Maps'
;;;y;i"6, a"[r.""iJti ia*b"h'n API-Google Maps dan contoh
aplikasi.
. package samples for sDK, package terbagi meniadi .beberapa versi
8. Berisikan source
disesuiikan ai-ngan versi APl,'diantiranya API 7 atau
i"Uih lengkap' Package ini tersimpan pada direktori
contoh-contoft v""ng
\ samPles\android-x'
.UsBDriverPackage,paketiniberisikandrivergenericu.ltu!perangkat
Verizon Droid'
Android yrng pop"rlui aiint'onya HTC T-uo6ile C1'
dan Nexus O"-J-piif.ige ini ditempatkan pada direktori \usb-
,ntrk perangkat dari prod.usen lainnya
o.i.r"., seda,igkan-Jri're,
perangkat
(samsung, so"v,'ic, attl aL"rt"trn dalam-paket pembelian
iti, a"pli diunduh pada masing-masing website'
.MarketLicensing?ackage,packageiniberisikandokumentasiuntuk
implementasi ;:ri ,;l;frtur, *"t[od lisensi aplikasi
Android pada
I
mrrilmmt.UtftilIilrrfllrfliln |ffitr j
l&m
t -., ,-*,* --,
I
j
I
(c)
Gambar 3.15 (a) proses pengunduhan dan (b) instalasi package tanbahan
(c) daftar package yang telah ter-install
rri*xnwll5w3
?*G::,T=r ri.Fiti:'l${e pFtrr sfcxifc*3*tEt6*: q"' ,:.i
r 01 ;r4dlrrds.t,r:: i.i..er --.-re-t
*1. si; i!':
t*rd F*rftirel-rl
1***- repositoryl
(b)
Proxy
Gambar 3.16 (a) Pengunduhan packag yang gagal (b) setting disable koneksi HTTPS dan
Gambar 3.19 File yang ada di dalam direktori \ temp saat proses wngunduhan Untuk meng-instal/ atau update menggunakan download manager,
ulangi tahap (ii) hingga (ix) menggunakan link repositori yang sama
(tahap iii).
v - T ambahkan nama fi letersebutsebagai referensi pengunduhan Cara ini cukup efektif dan cepat karena saat selama pengunduhan teriadi
menggunakan lDMan sehingga link menjadi http:lld.l-ssl' disconnect dapat di-resume kembali tanpa harus memulai dari awal.
goo[ie. com I an d ro i d I repo s itory I an d roi d-2' 1 -r0 2-w.i ldou.vs' Hingga buku iniditerbitkan metode ini masih dapat dilakukan, kecuali
Tip."femuaian klik OIi untuk mulai mengunduh (Gambar server Coogle sudah tidak mendukung fungsiresumable download.
3.20). ! 6 !.tuasx.idalol&.gq h*",itSffi
i
I
;XWrr;# dr r6,i*'a;c;;.;;d\
'l*..*-r.r*
I r"*fffita-
f &r*4d*xr6{n'ffi?
: :OHldi,.k r.iodtDq, rrlt R!i* !
r# ?', "ls
,r.!& T-
i tD( Ptriod l,rC{id :3 lsll. ffi I
.i rD{fhr6d:1 pt |@a
i SOteEdmA^Ad!-Ol" t t{ ffiI
_
'i. 50( Prdffi l/dEc .].!. Apl 1 t
f.rtfi*t
d' t0ti rtdv6 A.tu ta. St{, |*
'eir : iq5'ddd
i r$il66lMdl5.glJ elsl
$SapttaO<at1mr
,!r-.6*r-mnrn1*t
Gambar 3.23 Link repositori Samsung yang tetah masuk pada listAndroid
sDK Manager
httd/inn6rator.**rmurrgrnrobitatonrlerrdmid/r:politory,r:*po*noryttn{
l. Buka Aplikasi IDE-Eclipse, pada menu bar IDE Eclipse klik menu Help
-+ lnstall New Software (Cambar 3.24a).
, rr$
(a) O)
Gambar 3.24 (a) Menu tnstatasi paket ptugin Ectipse (b) Menu Add ptugin
Site
50 Pemrograman Smart Phone Menggunakan SDK Android dan Hacking Android Lr.,l,rl,r,,r ,l)h, :;l)K Arrrlrrrrrl ri,rrr Al)l
5'l
2. Selanjutnya pada window lnstall klik l.rufir.rn Add (Gambar 3-25), akan d.iperlukan agar Eclipse dapat terhubung dengan tool SDK dan targer
tampak window Add Site (Cambar 3.24b\, untuk memasukkan file device (AVD).
p".Lrg" ADT klik button Archive dengan mengarahkan path pada
iokasi-penempatan file package ADT, yang diikuti dengan meng-klik
oK.
3. Setelah window tertutup berikan centang check box semua aplikasi ;IEu
di dalam developer tools (Cambar 3.25), kemudian klik Next untuk sr6
memulai instalasi. &tc*
i-'. Iri
ta t'aid t.f frd!l!FLrrryrd
te l#an r€dhercFnfit
f h*r.: ffiiLr Ed&ib€rw
! ,.s &.*{b &tqi rar
t le.trE a.aECa r E.aS6tryaPq*
hi.lrf, Cmr'Y
tllr{Hft*
9 tuP*{
?Y*
lle
+i.Em(ril8
}Q
.fr
ts oer*6 -,o.it
El<i' **dJ mn: a ! 9.rDffi2ir{7t}53
El * ***mt*rc{ -r* 0.9.9,'Xrs{8:2i{7$J-1
r .. til]] ;;:;:_:::::::-*.'ii,
1,..
", r. r. .. *___ ;!__r; -*:,::::- *____ : Gambar 3.26 plugin ADT yang telah terinstalasi pada Ectipse
Bfin*frlffqt!*rciri**.oclrr* f $Se.&*.t!*tdtr.dai. . . :
P f*e*tn"r;-in sdo-ldriiddr'
ll. Update ADT
A[)T sangat perlu di-updare karena secara berkara (sekitar 2 hingga 3 bulan)
rl.ri pengembang Android selalu merilis sDK versi terbaru, bIIk package
t,rl, dokumentasi atau package AVD untuk penyesuaian'bertambahnla
v.rsi os Android. Antara.versi-package roo/ dan versi ADT bersifat saling
Gambar 3.25 Plugin ADT yang telah terdeteksi IDE Eclipe
k.lcrgantungan (yaitu waktu rilis harus sama), sehingga update ADT jugl
w.riib dilakukan setelah dilakukan update package tooJ sox Android.
Saat proses instalasi ADT, Eclipse akan melakukan update online- l'.rrl.r proses
.update package ADT tidak meribatkan Aplikasi sDK Android
Untuk menonaktifkan, hilangkan centang check box Contacr all y.rng, diunduh langsung dari server coogle. Ada dua cara untuk
meng-update
update sites during install to find required software. Al)1, yaitu:
4. Setelah ADT berhasil terinstal, selanjutnya akan melakukan proses a- update otomatis, yaitu pada menu Eclipse klik menu Help -+ rnstall
restaft IDE EcliPse. New software -+ masukkan URL: http://dl-ssl.google.com/android/
5. Setelah Eclipse dijalankan, konfigurasikan path SDK Android dengan eclipse/pada rext box Location, (Cambar t.ZZaltali klik OK. Untuk
meng-klik menu bar Window -+ Preferences -+ Android, Klik Browse <:ara ini, PC harus terkoneksi internet melalui protokol HTTps
atau
(Gambar 3.26) untuk masukan path alamat direktori di mana SDK I ITTP.
Android tersimpan (dengan mengacu dari referensi sebelumnya Sctr.lah t<,rhubung server Coogle, akan muncul window lnstall yang
tersimpan pada C: \Program Eiles\Android-sdk rrrr.rr,rrrrpilkan sr:jumlah paket update aplikasi yang tersedia pada
windows),'klik Ol( untuk m-enutup window preferences. Proses ini
Pemrograman Smart Phone Mengllttnakan SDK Android dan llat;krrl11 Androtd Itt',l,rl,r'.r ll )K, 'il )K Arrrirotrl rl,rrr Al)l
52 53
repositori (Cambar 3.27b). Berikan centang semua check box dari
package Developer Taols (update DDMS dan Android Development
fools), kemudian klik Next untuk memulai proses pengunduhan :-;&r!
package dan instalasi otomatis.
',?
^.d*tfi.-*
tutuk8prdbd
El+ax tiirroxJr{}*i
A4 r$*M:EJJr'3s6l].{18
-*--4 tuErElt
i. Et&r&&d-ltl-tu :
(a) (b)
r* [-E]ll-..-.J. q- |
( lambar 3.28 Uninstall plugin ADT di Eclipse menambahkan Menu already installed (b) tist plugin
(a) (b) Eclipse
Gambar 3.27 ll@ate ontine ADT (a) link URL (b) rywnlah aplikasi yang tusedia di repsitori
54 Pemrograman smart Phone Menggunakan SDK Android tl;rrr ll,rt ktttli Atrritotti l lAl l 1 ln,,l,rl,r,,r ll tK, lil )K Arrrlrorrl rl,rrr AI) l 55
W*l;'.,i, eFh&$* . -rtirt*** tffis'
q,a*..tu I llrhe{+da. :fub ,* +.-- bG b
F.nrda I xa** r** | tixi*r
'!ukbr.rrrrb&rEd.dt'b&S i
ftu lW ba qgj*d ts E* "rilfi?e&*, e a,A*$ena l
4..drr o-xrmt m .o dtu.* l
i ih*drr*r-qffirdrC*B {ry!c?"rt*;*t I
i
f*traJ
I
,-+ lij -*!r,@*&Bgq-
,,' ,*-..'
I
u{l,r.t - -
; Saaapo*Bill*{qo5ltogn
I i
.t 1&l*.pks*f*d,e,
-, Enff (Wjg{, uI. (X} !Sj:.{ .&
Frqe,r
..!iE'.1 TtF+EP' sti4.'*rriry9 ra.tu
Setelah window System Properties terbuka, klik tab Advanced -> (iambar 3-32 wtndow Edit System variable pada (a)
wndows Xp dan (b) windows Z
klik Environm ent Variables -+ lihat tabel system variables, kemudian
pilih variable Path. Untuk membuka window path klik button Edit.
-oo0oo-
56 Pemrograman Smart Phone Menggunakan SDK Androttl tt;ttt ll,tt ktttl' Attrlrotrl lt'.l,rl,r,,r ,l)K, :;l)K Arrrlrorrl rl,rrr Al)l 5t
lnstalasi Kies dan Konfigurasi
Perangkat Android
nfiiffin
rei&tr
-#* Unduh. aplikasi installer windows Media Format r 1 Runtime, yang
(+*-&
dapat diperoleh secara gratis pada uxt: http:l/ii*.aiotniirii.lo*t
w i n d ows-m ed i a-fo r m at- t t -ru ntim* t 68 60 t .'htm
memiliki ukuran file sebesar 7,71 MB.
p;k"i' li.i- i n i l. i;;
Gambar 4.1 Halanan web unduhan Windows lnstailer 3.7 vZ (Sumber ; http //wwvt.microsoft.com)
60 Pemrograman Smart Phone Menggunakan SDK Andrord d;rn ll,rr kur1l Antlrord liAlJ 4 ln.,talasr Kre,; darr Konfrgurar;r [,erangkat AndrorrJ
61
-,f' Windows A{ dla format ! 1 Runtlme 11 .iiB[ rra.nrsrork
rr r! t {(8.* drrb&d** ry! dS&ffi eaa
r -r ts k. ?',.xs h!*e.y-kr" a:-t.t *l-*
ptrcRosofTsorrwAEtsupptfl,tti{TAL d
trEglmtcad (7.7:Fi?l lrcExs€ rERHi i
c
I
'-frr+k.qirmk J:E:-l
n esit i.-Y.a!Ld,I-q"3lsrd*$g$s,J.siJ{"rc.tli$-g:istx '. ri**rt..!j!nrr{i!.4!n,;niril**l
i,
rirrnsF kEE/a.hrqt#.
^! i}tirl
Lart Updrtd. 2010-OS'1?
I h:.r*.Nr. *'@Bttirir*or+ lerel rtd,irr mrrlq *t+frfr.F
Ll€cnrc: frt:sart fl;g '- -.EXr-
(}6: lYindafr Vi5t , 2$03, xP. :000 H?rk t*
.*-tr!,r{B& a!rr;rl**d-
Requl.cmcntJ: iao caio6l requi.amcnts
Publa{r.r I:l{*gc* t*rs'ar' t'r I-r.... lTtu 1
K,F*l IffiFru
Noncprtc: *:1$"i:*5*':XS:qrAq.tts)
Tclnl Dornloads f rofir 2OQ8-o9- tO: 9,277 Gambar 4.5 Gambar-gambar proses instalasi Microsoft .NET Framework 3.5
oottrlo.ds ol t!*t rrctlL r09
Pada instalasi Microsoft .NET Framework 3.5, pilih radio button I Have
Gambar 4.3 Halaman unduhan Windows Media Fornat 11 Runtine
Read and ACCEPT dan kosongkan check box send information about
.... Kemudian klik lnsrall. Setelah selesai, pilih Restart Now. Setelah
restart selesai, tahap terakhir yaitu install Windows Media Format I1
4. Setelah paket installer di atas telah terunduh atau menggunakan file Runtime.
suplemen buku ini, selanjutnya install aplikasi berikut secara berurutan
yritu , windows installer 3./, kemudian Microsoft.NET Framework
3.5, dan Windows Media Format / 1 Runtime.
Saat instalasi windows installer 3.1 klik t Agree kemudian klik Next, ,!rq *
terakhir klik Conrinue. Setelah selesai, klik Finish selanjutnya lakukan Gambar 4.6 lnstalasi Windows Media Format ll Runtine
restart Windows.
il3-l0l-l cxt
lfteE \* 1-':'r:*:ir
lnstalasi Kies t.r es
-l 5-3 J 0i "
',: #i'':
Kies adaial-i software lool Pilr'rl're '\,ianaget ':iiilurrak;,rrr r-trrirli'' ttleilr t'tnsfer
"l
:
iii"-nr1",tti*uriia dan file phonebook iforniat '.'c;r:.ti)' ii'iclali-ri liies, rrerangkat {#r """"- ;
,inatnia clapat difungsikan sebag;r U'Sll rerlr.rirtr; n:trri;it1i di;ti-rtlt t-''odem' (a) (b)
Kies irerlir riiirrstall karena ruea {iirjai.riltitv.:,:iilcl'tak;n iir:'tal.:isi driver
p,,rungL,U Ai'ir.lroicl yang dibrrtrrnkan clt-h lillii '\vrijirliri ',g..ll-ri'rr:at r"rrendeteksi Gambar 4.8 (a) icon aplikasi Kies (b) Menu installer Kies
Con t,'rt..1ui,i-,ng ke perangkat tr.:r::ebut ,113iai;-ri ,,i-JIl '.i;in :iilK ,'rndi"<;itl.
l. Ljnr.Juh aplikasi 5At#5LfJC lties ii{- lr..'ne ,:i,,rit {irljn-slal/ o/oSrJnl
Pilih negara dan bahasa lndonesia (Cambar 4.9a), klik Berikutnya.
pada i-iRL: hrrp:i,/rnr,--san,.5rJrt;lri.;r.;l-.,i.ri:.r.::r1,.":1.11r11rr;i,1s1t;itt'air'r;t;rittt;t/.r-l Selanjutnya centang check box Saya setuiu dengan persyaratan dan
-soltw,art.oJo?ph<srte .1;,r)dai,.. L,i,i
rii,iJ ,{.r.irlri:.ir '1 J) aiatr qittrak;lrt
ilii<ii ini. ,\plik;.isi lir;irrstall ketentuan di atas, kemudian klik Berikutnya (Cambar 4.9b).
insta!ie,r 1,ang disertakan daiani :ul,.i.,rrq,il
(iiirigai, se[rilikni'.r f ili-'
lrr()rir;;irr'adJah p!'ogr.int ,-rriirt:1.rii :r',:lutr'. irpriti
!l i.,!-i!,.i t :(l r.l h K ies verr, i tt' r'ir.l rtl.
r
s
@
\,.
+
,il.i
{I
1l
iI
tfr *.:*..t&.h:fs d,6 *BH :ll&,gt A +iA ad} d *IYd
- rund*7 aJ r.
-469i€ rltr r33 rff t&rlB7r4
$*P *J$'d! Sall*g* {. BS ,& *+ f., iG +*!a rJ
1e 4,a s ffi i-rr!l$,v 8r. r ry *,ts I
Gambar 4.7 Halaman web unduhan aplikasi Kies dan gqram uninstail (sumber : htlpl/
/ :*r.q-l .r t: .F-iF
-y!r
+ wr at
-rlEw, :C
J
my.samsungmfrile.can)
64 Pemrograman Smart Phone ifunggunakan SDK Android dan ll,rt kttrtl Atttlrottl llAlt 4 lrr,,l,rl,r.,r Krr,,, rl.rrr Krrrrfi,lrrr;r.;r Ilrrarrllk;rt Arrdrorrl 65
4. Klik radio button lnstal semua (Gambar 4.10a), kemudian klik taskbar Windows XP (Cambar 4.12a) atau Windows 7. Setelah instalasi
Berikutnya. Setelah instalasi berhasil, klik button Se/esai berikan selesai, akan tampak icon perangkat CT-|5503 di sebelah kanan atas
centang kedua check box pada Gambar4.10b, kemudian Kies otomatis aplikasi Kies (Cambar 4.12b).
aktif (Cambar 4.11).
.--!__.e-
i; f*rdx* Hardxro
Gambar 4.12 (a) lnstalasi driver Android Samsung (b) lcon perangkat Android GT-|SS\3 pada Kies
a **a*r:rdEtluj{t*
'd
il
Driver samsung cr-15503 yang ter-insta// dapat dirihat pada window
Dgv]ce Manager. Beberapa device yang tampak adalah: Composite
ADB lnterface, Card r,)SB Device, IJSB Modem, Diagnostic seria.l port,
(a) (b) dan USB Composite Device (Gambar4.'t3).
:. llt FC*- r*
Gambar 4.10 (a) Radio buAon pilihan instalasi (b) check box shortcut dan nenjalankan Aplikasi
a;{s5Etlr*ffi
Kies ll t$i$.r€ *r*ad er.:GL 106 L&rfre
i: 5| C*,rr**
a {* er*{r$cit
{.i E$?*Jri6 6'I-11103 ird us8 5a€
{* !i/o*8*rAx,8a'7r*
r, r{s(
"ttc r*p{ass48,}res
e t ogcrrc*rtlr
,{ .} 0!O,flr'{*l{f}re{
* ffiHp.6*mrt*rr
..
r e
D€ ATr{A?rF{ coredatr
.L(rytE rb
t ") tt !rd r6craoaol hrran
'--
lrl t*tao-'
* l, 1*r"rt*tdugstb&
Gambar 4.'13 Window Device Manager
66 Pemrograman Smart Phone Menggunakan SDK Andnitl rl,ttt ll,x krrrt: Arrrlrotd IJAIJ 4 lrr,,l;rl;r,;r Krr',, rl;rrr Korrfrllrtr;r:,r [\rr;rlr11k;rt Arr<lrord 67
2. Untuk mengaktifkan instalasi aplikasi (ApK) melalui kartu memori
Start Ks microSD dengan cara buka menu Applications -+ centang check-box
Unknown source (Cambar 4.16a dan b). Aplikasi ApK harus tersimpan
di kartu memori microSD.
Auto :tart Kier TrryAgent
Arto Sart lfts
tborrt rcctlruyfgrcna.-
&ir
(a) (b)
Gambar 4.15 (a) lcon menu Settings (b) menu pilihan bahasa
68 Pemrograman Smart Phone Menggunakan SDK Androttl rl,ttt ll,tr ktttli Antltotd lrr'.l,rl,r',r Krr,,, rl.rn KonhJirrr;r:,r lkrrarrllkal Arxlrorrl 69
Dasa r-dasa r S DK Android
ooOoo-
70 - Pemrograman Smart Phone Menggunakan SDK Androttl rl,ttt ll,rr kttt1l Attriroid
Tabel 5.'l Versi versi AVD yang tadia pada SDK Aldroid Revision: 3
Tipe Platform AVD Keteranga.n
Skins: QVGA-P, QVGA-L, HVGA-P, HVGA-L,
Android 2.3 API Android versi 9, tanpa API Coogle HVGA (default)
Android 2.2 API Android versi B, tanpa API Coogle id: 2 or "Google Inc.:Google ApIs:3,,
Android 2.1 API Android versi 7, tanpa API Google Name: Google ApIs
Android 2.0. API Android versi 6, tanpa API Coogle
1
Type: Add-On
Android 2.0 API Android versi 5, tanpa API Coogle
.l
API Android versi 4, tanpa API Google
Vendor: Google Inc.
Android .6
Android 1.5 API Android versi 3, tanpa API Coogle Revision: 3
Android + Coogle API f; Mendukung Android versi 2.0.1 & API Coogle Maps versi 6 Description: Android + 6eeg1e ApIs
Android + Coogle API 7 Mendukung Android versi 2.1 & API Coogle fr4aps versi 7 Based on Android 1.5 (ApI 1eve1 3)
Android + Cooele API B Mendukung Android versi 2.2 & API Coogle Maps versi B
Libraries:
* com.google.android.maps (maps. jar)
Contohnya, saat kita memutuskan untuk membuat aplikasi Android yang APf for Google Maps
menerapkan API Google Maps untuk Android versi 2..1 maka target AVD
yang harus digunakan coogle API Level 7. sedangkan jika aplikasi yang akan Skins: QVGA-P, HVGA (default), HVGA-L,
dibuat tanpa API Google Maps untuk API versi 2.2 dapat digunakan AVD QVGA-L, HVGA_P
Android versi 2.2. i-d: 3 or ..android-4,,
Name: Androi-d 1.6
Proses Pembuatan AVD Type: Platform
Proses pembuatan AVD dapat menggunakan beberapa cara, baik
API level: 4
menggunakan aplikasi text based (pada command prompt) atau CUl, berikut
penjabarannya: Revislon: 2
1. Cunakan perintah android untuk membuat, mengedit, menghapus Sklns: WVGAB54, WVGA800, eVGA, HVGA
AVD pada lingkungan command prompt. Berikut adalah contoh ( def auJ-t )
androld action IoPsr action] - Perintah create, delete, dan update untuk membuat,
menghapus atau meng-update RVO dengan menambah
Rincian untuk opsi-opsi action yaitu: beberapa opsi AVD, berikut contoh tampilan kEluarannya,
- list target, untuk menampilkan daftar package API yang
tersedia (dapat ditambah dengan meng-update package SDK)'
Berikut ini adaiah keluaran dari perintah list target: tj:\)android create avd -t 1O -n GoogleFroyo
Available Android targets: t rr:;it_ed AVD ' GoogleFroyo, based on Google ApIs (Googte
ici: 1 or "android-3" Irrr:. ) ,
Name: Android 1-5 w i t Ir I irc following hardware config:
Type: Platform lrw. I c:rl. <lcnsiLy:l gQ
API level: 3
72 -Pemrograman Srnart Phone Menggunakan SIX furrkrxtl tl;ttr ll,tr krrrtl Atrrlrottl ItAll lr l);r,,,rr rl,r,,,rr lil)K Arrrtrorrl
/3
pada opsi -t 10 adalah sasaran versi API pada AVD yang
dibuat, dengan integer adalah diketahui dari perintah list-
Larget yang akan dibuat mengacu dari daftar API (ditunjukkan
dari perintah android f ist target,) dan opsi "-n
Googletrroyo" merupakan nama untuk AVD, yang dapat
ditentukan secara bebas.
Name: Froyo
Path: C:\Documents and Settings\user\.androj-d\avd\
Froyo. avd
Target: Android 2.2 (API leve1 8)
Skin: HVGA
Sdcard: 72Yl {m -.- -_J..-_] .-f\r i
l-_-.i
Penulis sarankan untuk tidak membuat AVD dengan perintah
text base ini, kecuali bagi yang sudah terbiasa.
74 femrograman Smart Phone Menggunakan SDK Andrrlttl tl,ttt ll,rr ktttli Arrrlrorri liAll rr l),r,,,rr rl,r,,,rr li[)K Arrrlrrrrrl
75
rei,fili'r'ilt AVD yang telah terbuat akan tampak dalam tabel AVD di aplikasi
o*t,ffi3 re:, '. .:' I|j I
SDK (Cambar 5.5).
r€ry
k&r &*i kti! reietx,i&dirlr'5 f,.,i lror t!*t l
reili..', W'...., x:
:;epen u h nya dapat nrengem u iasi kan perangkat keras. cor.rtoh nya
kamera, jika Kita ingin mengembangkan aplikasirang mengakses
tac*rr6 ffiI *g**. ffiI
karnera maka tetap diperlukan Android fisik.
].ff' w(c*
:ri* sleli
.-!a3{fi1&rr: *l-\€Ss tre dalt: :x: r.ri rn r Lgilgf .
@: t!'r @n Ff p'ifxli *3t s k cr€.. *.qi,*"s. Emulator Android
i
i
Fi+xf,,
I
j
.1
!r,
te,
,u
ls
16
16 F==ffi1
,U
{a} b)
Garbr 5.4 (a) TaM lN lwrdvnre prryrtyAvD A) Window informasi konfigurasi AVD
78 Pemrograrnan smart Phone Menggunakan sDK Android rlatt ll,rr krrrli Atrrltottl llAlt rr l),r,,,rr rl,r.,,tr lil)K Anrlrord 79
.l
bantuan untuk variabel-variabel environment
sdcard. img.
-help-environment
emulator -wipe-data
-help-keys pertolongan pemetaan manual tombol keypad Menghapus atau mereset data image disk user (dengan lokasi image mengacu
pada path direktori yang ditentukan menggunakan opsi -datadir dan
_heIp-keyset_fileuntukbantuanpendefinisianfilekustomisasi
pemetian tombol keYPad
-data atau pada path default). Perintah ini juga secara otomatis akan
mengkopi seluruh file konten milik user (dari referensi -initdata) ke
-heIp-virtual-device menielaskan bantuan penggunaan Android irnage yang baru saat sebelum emulator diaktifkan. lnformasi lebih rinci
(AVD)
VirtualDevice image disk menggunakan -heIp-di s k- image s.
Opsi kontrolAVD: <system> merupakan path direktori AVD target (yang tiap AVD memiliki
rIi rektori yang terpisah), pada sistem operas i Wi ndows XP AVD-AVD tersi mpan
-avd (avd-name> atau G(avd-name) C : \Documents and Settings \<nama_user>\ .
cli direktori
console atau command android\ dan untuk Vista atau Seven pada C:\Users\<nama
Disunakan untuk menialankan AVD pada lingkungan
;,;;pl. a;.ara defauli, opsi ini harus digunakan' user>\ . android\.
()psi debugging:
Opsi image disk:
-cache <filePath> -debuqt <tags>
untuk mengalihkan imag,e partisi ke direktori filepath'
Perintah ini 'ifautt,cache
s;#; emulator menggunakan file
l'r.rintah ini untuk meng-enab/e satu atau lebih pesan debug, untuk masukan
t ,ig tambahan gunakan tanda pemisah spasi, koma atau kolom dari nama
iika opsi ini tidak digunakan,
image Partisi temPorary. l.ornponen-komponen debug. Untuk menampilkan daftar komponen yang
Ir.rsed ia, dapat digunakan -he 1p- debug- t a gs.
-data <filePath> debug-no-<tags>
direktori filepath' Jika opsi
Untuk pengalihan file image disk data.user ke
otomatis mencari file userdata-qemu ' N4en-disab/e pesan debug pada tag debug yang telah ditentukan dari nilai
i^; ti;Jk ;igunakan, (lihat opsi -avd)'
;;;;;;A;Ji "nl,iutot
Jrir* iorJer penvimpanan AvD '. t-ags>.
-init-data <filepath> ogcat. <logtags>
-initdata <filepath> atau I
yang akan digunakan' Secara default' Mcngaktifkan keluaran logcat yang memiliki nilai tag tertentu. Pada kode
Menentukan path direktori lokasi image
i*ig*,t", tersimpan pada s s
< y t em> / u s e rdata' img' ,rlrlikasi yang disertakan variabel ANDRoID LoG TAGS akan secar;r
olomatis akan menampilkan logcat pada keluaran -
-nocache
Untuk
perintah untuk memulai emulator tanpa menggunakan paftisi cache- :rirel L
opsi -cache <fire>' N4t'ngaklifkan shell root pada terminal konsol. User dapat menggunakan
i$iil;i"; iihat bantua; menggunakan pcrint.rlr ini meskipun daernon adb emulator pada kondisi tidak aktif. Saat
*rarndisk <filePath> crrrtrlator tel.rh ciirnatikan dengan menekan, shell akan tetap aktif.
MenentukanimageRAMdiskyangterletakpada.direktorifilepath.lika ',1r,vir-c)
user tidak *"nggun"t ur'.pri'i,liiE *" defa'ult,
akan mengacu ke direktori
<system>/ ramdi s k . img' l'r'rrrrl.rh ini ick,ntik dengan -sheII yang digunakan untuk mengaktifkan
,.lr,,ll r<r<rl <k,rrgan mcngacu pada devlce character (karakter perangkat)
-sdcard <filePath> <fi1e> lr,rllrrlrr. (lnluk mcngctahui daftar berbagai tipe perangkat dapat melihat
Untuk menentukan path direktori di mana
file image kartu microSD akan rrr,rrrr,rl lrr. I Jr t;h.,rr-clc-vices.
digunakan. pada fonais' iefault mengacu ke direktori <system>/
l-data <filepath) ;
-keyset <file> I
lApabila i
imenciptakan userdata .
Emulator Android menggunakan image yang dapat di-mount dan tersimpan i img, dengan data usertetaptersimpan ]
86 Pemrograman Smart Phone Menggunakan SDK Arxlrorrl rl,ur ll;rr krrrli Arrrlrotd ItAlt 5 l)ar;ar da:;ar Sl)K Android 87
lmage Temporary
file image yangwriteable
Saat startup emulator, sistem akan rnenciptakan dua
(dapat ditulis), yang file-file image tersebut terhapus setelah emulator
dinratikan. File tersebut adalah:
. Duplikat image sistem Android
off. cl:*r its ch*rk b*x A {illad box rrl*r* thst anly p*rt cf
. Partisi image untuk direktori / \cache ihr fealure ir lurned qn,
Pada File image tersebut, usertidak dapat nrelakukarr rename atau men-di-sabk'
penghapusan image temporary setelah emulator dimatikan. Saat kondisi ,-..1;i,"
r_': .
5i'nptr Fietsrei[ M;A;d. prot;i-liixr*Fi
awal emulator aktif, direktori ,/cache masih kosong, yang selanjutnya !":
{j
Sirnpl* T(FIF *eryicer (i,e" c<hq drytirxe *tc}
akan digunakan browser untuk men-cache halaman dan gambar web yang :*&. Iablet Pf, C*mpanentt
telah terunduh. Partisi cache dapat pula dinon-aktifkan menggunakan opsi fJ&
-nocache saat startup emulator. .-.131 Tetna *rrer
lJ$ IfiP Ctiwrt
Shell Emulator atau Perangkat Android
Untuk mengakses shell pada emulator, Kita dapat dikoneksikan dengan
aplikasi telnet, yang merupakan aplikasi default dari System Windows
dan tersimpan di direktori C: \windows\system32\. Untuk Windows
rc'tr]i:ffi-t
7, secara default tel-net belum ter-install, untuk meng-install-nya klik Start
Menu -+ Control Panel -+ Programs + klik Turn Windows features on or off . (b)
Setelah window Windows Features muncul, berikan centang pada check box Gambar 5.7 (a) Menu aktivasi feature progran tambahan di windows 7
Telnet Client,lalu klik OK untuk memulai proses instalasi (Cambar 5.7a dan (b) window list check box progran yang dapat di-instail
s.7b).
B8 Pemrograman Smarl Phone Menggttttakatt lil)K Attrltttltl tl,rtt ll,tt kttrli Attrltrttti l);r,lrr rl;r,,,rr SI)K Android 89
itrrril.o itl Con:tr lr: : t ylie ,
lrtlp' f *t' o I i:t ol *:rnn.rfir:l:
rlU
ll* li p
irlrrrlr'n id conse l{: aornrnrl h* 16,:
Ir*Lp!hII lr1:i.nt ir i is t of r:on$aftd:i
f"ent si.rrtr lat.r Iurdual"t *s$n;-:!
$*r} $*o'-locat inn connantlr
$$r! tl$tl r.* lated coRnarrr{l:
ki l) kill tllr cnnlator lnrtance
n*t ucr'k Fr&na$* ne!:rrqrk liett- r.nga
Gambar 5.8 Title WindowAVD r* ue rr poucr" r*lated eonq".r.ndi
14r it i *x i* rltti.i e nnf rr: I. se::t irn
rrd ir. nail69e 1to rr- red i rcc t idns
sn3 ShS related connand:
avd tn&nagcr. vir"tual d.ouice statc
Karena itu, untuk menghubungkan tel-net dengan perangkat emulator ui.ndar..r nrarr;rge enulator vindorr
tersebut dapat digunakan perintah: ' lt" in {conna.nd}' f or, nolrnrand-*prc lf ic }e !p
telnet loca.Ihost 5554 [1,
Dari .perintah digunakan alamat port emulator yaitu 5554, sedangkan (iambar 5.1a shell connand yang dapat
diakses pada console EmulatorAVD atau perangkat
untuk mengetahui nomor port perangkat Android atau emulator yang Glah Android
terhubung dengan ADB dapat digunakan command adb devices yang
akan menampilkan sejumlah perangkat atau emulator yang aktif (Cambai
s.9). Emulasi Geo-location
l',rrl,r EmulatollvD juga memilikifiturgeo-rocation dengan mengemulasikan
h:r)adh deuices 1';r'r.rngkat cPS, yang dapat diaksei melalui aplikisi tui""ut untuk
lI,ist of ttauices at*arhed ,r,'rrjalankan emulator.console.dan menggunakan perintah ge-
hsqulaton*555{ devie* diikuti nitai
ssE6s?f eae61 dev ica l,rrrrlinat lokasi atau dapat pula diguna[in tool ddms. perlntah qeo
tidak
lr'rrrv.r merdukung masukan dalarn
lI -sat,an derajat, tetapi mendu[ung prla
r, rsrrkan dengan format N M EA
I rr
0 7 Bi. Berikut formai penu lsan perint"#quo,
r:r'-
I
I ,rit.itude>l
sederhana CPS pada latitude (bujur dan
emulator atau perangkat android. emulator. lintang) berupa angka
desimal bersatuan
derajat. altitude
(ketinggian) dalam
satuan meter.
90 Pemrograman Smart Phone Mcngllrrnak,rrr Sil )K Arrrlrorrl rl,rrr ll,rr krrr1l Arrrlrorrl llAll lr l),r,;rr rlas;rr St)K Arrdrrlrrl
91
I
Penielasan
Perintah geo digunakan untuk merubah koordinat perangkat AVD secara
Sub-command Definisi realtime selama emulator dalam keadaan aktif. Saat perintahgeo digunakan,
nmed <per.intah> Pengiriman data Format penulisan emulator akan menciptakan provider location tiruan, kemudian informasi
menggunakan format <perintah> harus koordinat tersebut akan dikirimkan ke aplikasi yang membutuhkan dan
NMEA 0183, yang identik dimulai '$cP'. Juga meregister lokasi hasil respon. Berikut penulisan perintah geo:
dari pengiriman perangkat mendukung format
,$GPGGA' dAN
modem GPS.
,$GPRCM,.
seo fix 170-3761.73 -'l -6636
geo nmea $GPRMC, 081836,A, 3751. 65, S, 1450'l .36,8,000. 0,
360 . 0, 130998, 011 . 3, E* 62
Fornrat NMEA 0783 merupakan suatu spesifikasi standar teknis dan standar
transmisi data sebagai sistem komunikasi antarperangkat elektronika yang Untuk proses updating lokasi CPS pada kode aplikasi dapat dilakukan query
digunakan pada bidang kelautan. Seperti: sonar, anemometer, gyrocompass, location manager dengan memanggil fungsi :
releiver CPS. Standar ini dibuat oleh National Marine Electronics Association
AS dengan sistem komunikasi secara serial dalam format ASCll, yang
LocationManagier.getlastKnownlocation ( "gps" )
mendefiiisikan bagaimana data ditransmisikan dari satu sumber device ke Untuk mengetahui informasi yang lebih rinci tentang location manager, dapat
sejumlah perangkat listener (Wikipedia, 201 ). 1
dilihat Class Locatj-onManager pada dokumentasi Android dengan
Koorclinat longitude dan latitudemerupakan sistem koordinat sferis berbagai method-nya dan di bab lainnya yang membahas implementasi
lrersatuan derajlt dengan separator desimal berupa tanda titik. Po-sisi kutub Aplikasi menggunakan fitur Ceo-Lokasi.
utara memiliki latitude gO;, sedang,kan kutub selatan -90o. Contohnya
koordinat latitude dan longitude Daerah lstimewa Yogyakarta, yailu -7.6636"
dan '11 O.376173". Untukhemudahkan pemahaman sistem koordinat sferis, Emulasi Event Hardware
pada Cambar 5.1
'l ditunjukkan beberapa contoh titik koordinat longitude
Melalui konsol kita dapat juga mengirimkan suatu event ke emulator dengan
igaris bujur)dan latitude (garis lintang) dalam satuan derajat. masukan perintah event. Berikut adalah contoh perintahnya :
Kutt*& u18r8
longitrde = -30 Lstltude - g0 event < send I types I codes I text >
l*lifude = S
Berikut subcommand event yang ditunjukkan pada Tabel5.6.
karakter Pesan tertentu. ^J lou:i yo( to RiofrSi thc tctt.ingr r*Iatcd tu Lll.t tsttrol'k dota connecl ion oI rl'" i
..n'r ldt.d desise. I
event text <message> Menggunakan format string UTF-8, nilai .rvr.i lrblt; tul| cot*tdnd; i
duA, nnt$qtsl{ ttGt(r,
unic6ie dipetakan terbalik sesuai keyboard' 3 t eLua
; prtd clmnEe nctwrk uped
Karakter vans tidak didukung diebgik*.- ley 6lran$6 nBtmrk ldtsncy
L
dc
cnrturq durp netxonk }acLGts to filc
,KO nrisc lnq tub-comnd
I caPacitY >
Pada Tabel 5.7 ditampitkan rincian subcommand
power :
roid Con*o
health <unknown I good I overheat I dead t l-idak mendukung panggilan atau menerima telepon
I overvoltage I failure>
.l . 'T
idak mendukung emulasi kamera
Set emulasi kaPasitas ', Tidak mendukung konektivitas pada port USB
power health <Persen> baterai (0Y. - 100%)
{, Tidak memiliki fitur deteksi koneksi headset
Sebaeian fungsi emulasi iuga disediakan di Window '
DDMS
Iidak ada fitur deteksi state interkoneksi (jaringan operator, atau CPS)
ffi ;:il;"";;," Luin'",1 ad iiba n d n cY :1, T 11q8^': :If. -?H:1:
i
It lidak memiliki fitur eject atau insert memori SD secara live (SD card
ffiliiff;i;,;i;;i ;i;;t; pada sub-bab DDMS'
dapat puridirihat
lr.rnva dapat dibaca-tulis dengan di-mounting saat AVD tidak aktifl
'r lirl,rk nrendukung pembacaan atau emulasi charging baterai atau
Pemantauan Status Jaringan 1roW<,f St;tte
jaringan dapat l(r I rrl,rk nrt'nrlrrkung koneksi bluetooth
Untuk pengamatan status koneksi, delay,. dan kecepatan
;;;;6 network vang dijalankan melalui
;;rintah
teinet' II I r.rrrrcr.rlc y.urg sangat rendah saat menjalankan aplikasi grafis 3D
I .' lrrl,rl< sr.pcnrrlrnya mendukung emulasi fungsi geo-location dan sensor
*l
(akan dibahas pada bab aplikasi menggunakan fitur Ceo-Location, dan AVD yang telah dijelaskan pada sub-bab Emulator di atas.
aplikasi sensor).
i
$;1)3rttr in*ta l l frpploek*.U_l 1J. apk
Instalasi Aplikasi Android *i:B Xnr* {L&9543 }rvr*s irr 11.,/ius )
.-,. ltkg: .zrtata,/1*calrtfip"/fltt!)Llcir l-t I ll ..rtlk
Untuk menginstalasi aplikasi apk Android, kita dapat menggunakan ^.)ucce 5$
beberapa cara yaitu: e l\)*
a. Mengunduh aplikasi dari Market. Cara ini hanya bisa digunakan dari
perangkat Android karena AVD tidak menyediakan aplikasi Market.
Untuk mengunduh aplikasi, jalankan aplikasi Market pada window Gambar 5.15 Proses instarasi aptikasiApK android dari conntand pronpt
Menu Aplikasi (Cambar 5.14) kemudian pilih kategori aplikasi yang
diinginkan. lnstalasi dari memori Spc.1(, aplikasi ApK yang tersimpan pada
memorisDcard dapat pula diinstalasi ke sistem nndroid menggunakan
Aplikasi MyFiles atau.aplika.si yang sejenis (cambar s.ro)lieiapi,
cara.ini tidak dapat diterapkan untuk AVD karena secara defau
emulator tidak menyediakan aplikasi File Explorer
lrl
t;t I
All appllcatlonr
[-alclicol f rs &r]ay*i*, {$;:irryc 1r,:'! kl]l*r.
Burlnerr
fnb !*arcF (!,&:61o1ps1u ir,' fir' 3 f t.,,.ilr'; AL{,i
Gambar 5|14 Kategori aplikasiyang tersedia diMarket (atau Google Play) Apiar kita dapat melakukan instalasi selain mengunduh
aplikasi dari Market
(r.rra b dan c.di.atas), pada-perangkat Android"perlu
dil;ku6n lonfigurasi
rl.ngan masuk ke menu settrngi -+ ,+ppricaiiort sutii,g, dan
b. lnstalasi melalui tool adb. Tool adb dapat digunakan untuk instalasi r ..tang pada unknown sources sepefti yang
berikan
aplikasi APK pada AVD atau perangkat Android fisik. Berikut adalah telah di.ieraskJn pJa sub-bab
Konfigurasi Perangkat And roid.
format perintah instalasinya:
adb -s (serial-_device) instal-1 path/file.apk
Opsi -s digunakan jika ADB terhubung dengan beberapa perangkat
atau AVD nilai serial device adaiah nomor scri Arrrlroid atau
liAlj rr l),r.,,rr rl r,,,rr i,l)K Arrrlrorrl ()7
96 Penrrograntan Srnarl ['ltottc Mlrl,littn,rk,rtt ',l tK Atrrlr.rrlrlrrrll.rr l'rtt1'Atttltottl
U ninstall Aplikasi Android
Untuk melakukan proses uninstall aplikasi APK terdapat dua cara yaitu:
a. Menggunakan tool ADB. Tool adb dapat pula digunakan untuk
menghapus aplikasi APK yang telah terinstalasi, berikut format
penu I isan peri ntahnya:
98 Pemrograman Smart Phone Mcnggunakan SDK An<irortl rl,rlt l l,rr I'rrr11 Arrtltoirl llAlJr, l),t',,rt rl,r,,,rr lil)K Arrrlrsrrl 99
Di dalam opsi -cdapat juga diberikan opsi pe.nentuan direktori path pada l',rda windows XP atau Z, dapat digunakan UltralSO (Cambar 5.18) aplikasi
image SD card (berekstensi
*.img) untuk digunakan pada AVD'
rni nrendukung baca/tulislnrenghapus file di dalam file image (format yang
,lidukung diantaranya : .img, .iso, .nrg, .cue, bin).
Membuat dan Modifikasi File lmage Disk
Untuk membuat image sD card dapat menggunakan tool mksdcard,
tooi inl teiah te,masrfdi d"lr* package SDK. Tool ini dapat diakses pada I ,:.*q
direktori tools/ dan merupakan subdirektori dari package SDK. Dengan $sllcaBo .. r&.m 3R €r$6ft I
,) rd'd-€.s
bentuk command sebagai berikut: * '
d4'Eu. flrl fi
I
:ffo il fl1{.tt
,-, J.Jad isl8.1l{J r!,Ot
i rcmrrxm*rntE. Jbca! 0 1fi0il91{lt
mksdcard [-1 1abel] <size>[KlM] <fi1e> -- t,:rii
{] ta11.0iR
Ju'5r t'H 0
rJ!]{6
:lfr0.ur ! 1tl 17
lrtr$11{rirrif
102 Pernro;lraman Smarl Pltonc Mcn1111trnak;rn SI)K Arrrlrorrl rl,rtr ll.r, l trrl Arrrhorrl
103
r )"rdlr g lc I I
Kategori server :
i::r :.,
1t f",:
-l
- '
,
l._--:'_l
(a)
Gambar 5"21 (a) tlenu Run pada witdows XP (b) ! aunchcr pisci;t u,,indor,t:, 7
iser*m'r 1&&
i*$ Ilf-ii*ilr
*&*iE*ts.
&*{t
[, ,i amrs i; rn
.l
(a)
(a) (b)
'r r::'*--:--:
..'., :-:-.1."".., -"."..-.- .,....--.
4
.|
r* !
*-: : . .*#{ir}"* -i- v fT=:
Gambar 5.22 (a) Menu DDMS pada IDE Eclipse (b) icon Perspective DDMS
'106 f'entro5irarnan Srrtari Ptrone Mcn1111un;tk;rrr fil)K Arrrlrorrlrl,rr Il,r, lrrl'nrrJr)t(l l),r',,rt rl,r:,,rr lil)K Arrrlrrrrrl 107
FItur DDMS
DDMS merupakan aplikasi yang memiliki beberapa window dan tergabung
Infb rl'reaJs
I
vi,r Nexp
I a5*mtno*,rrra*er I Sys*nft I fnn*
dalam satu kesatuan grup window. Pada w,indow sebelah kiri atas (Gambai Ii i -'u i stats I uunc I sure I Harrc _
5"24) menampilkan perangkat Android atau emulator yang terhubung dengan 1 1?! yra:t 16t 99 ftarr
tool ddms. Dari tampilan tersebur dapat diidentifikasi VM yang aktif, dengan *l !?4 m:rart t3 17 H€apir.'oiker
menampilkan nama package tiap aplikasi yang berjalan pada host tersebui. *"{ 115 'r,n'i:'ait t' 0 Sgnd Catclrrr
1?6 runr**c f51 563 -)o'/,lP
i2f n&rve 0 0 Eirder Tkrad *1
slslBj ffiSl :qJ D l?9 natr-'e U C' Sinde{'nread *2
7 149 xart 0 I Rll,Sender
i+.E1-*1*sd,*ewlf, i
a 151 litled-vc.xt ?41 151 RllRc<,civer
*a{f*d.trof,tr &l?tr l
l*cr,xviro*d.cf-*rt !i Gambar 5.26 Tab Threads
afxtgsd.o.D€rn?.ff*<ti
Pada tab tersebut ditampilkan beberapa kolom:
aofi.and6*,;rsn:.. '}
oan,{dr*odd ffis . lD : merupakan ID unik dari penugasan VM
t**r,y,drpd,crai
cm.r,&od.g"c@
l
. Tid : lD thread Linux, untuk bagian proses main thread akan
ion.!.*r*,csj$:*: *r\r ditampilkan nilai yang sama dengan process lD yang
'. fr :rlr:srt';*r: i tampak pada window sebelah kiri
::lI,to6{)t.n"iaj.; .:,{,-jt, 1.&; :' . Status : merupakan status thread VM. Untuk thread daemon
igr,*rdr:.$j -
-t, ditampilkan kode astersik (*), juga ditunjukkan level status,
r{ l:
,:, ,, dengan rincian sebagai berikut:
Gambar 5.24 Tanpilan DDMS yang terhubunq dengan Emulatlr AVD Can perangxat Antiroid . Status running, yaitu saat dalam state aktif atau
telah dieksekusi
Pa,ria window selrelah kanan atas rJitampilkan tab displav beberapa rnformasi . Status sleep, saat thread mengeksekusi sleep ()
dan tcrol{ocri untuk debugging. Diantaranya adalah: . Status monitor, yaitu thread dalam kondisi
- menunggu lock
1a.binfo, menampilkan intbrmasi umum patla VM yang dipiiih, berupa
lD proses, nama package. dan versi VM (Gambar 5.25)" . wait, thread dalam kondisi Obj ect . wait ( )
. native, thread eksekusi code native
{nfq l:t,}!llds I wrruao l*ocaum'rraOccr . vmwait, thread menunggu dari VM resource
O0h'i<Nae I i"es .
App d*scrpbon; cm.ar*cd,dpnr zombie, thread dalam proses pemusnahan
H4 Yc!'sori; Sahr* Y 1.2.0 . init, thread proses inisialisasi (tidak terpantau)
Process ID; 131 . st.arting, thread proses awal eksekusi (tidak
Srppo.A fiofikrg Col'rkd: Yes
S{Jspotrb I-FROF Contsdr Yel
terpantau)
. utime : waktu kumulatif yang dibutuhkan untuk eksekusi kode
Gambar 5.25 Tab lnfo level user, dengan jangka waktu sekitar'10 milidetik
. stime : waktu kumulatif yang dibutuhkan mengeksekusi
Tab Threads, menampilkan tread yang berjalan pada VM tersebut. kode di
Dapat di-update secara langsung dengan mengklik button Refresh. level sistem, dengan jangka waktu sekitar 10 milidetik
. name : nama dari tiap Thread
Pada kolom ID dan Name memiliki nilai tetap, sedangkan
nilai kolom lainnya terus berubah secara periodik yang
.rk.rn {<'r-r4rr/alc ser:ara otomatis tiap periode 4 detik.
Tab Allocation Tracker, menampilkan tracking alokasi memori dari tiap Gambar 5.29 Tab Emulation Control
VM (Cambar 5.28). L.ocation Control, menyediakan fungsi emulasi location provider
Cara penggunaan Tab Allocation Tracker yaitu pilih salah satu VM di di mana koordinat longitude, latitude dapat ditentukan user atau
window sebelah kiri, kemudian klik Start Tracking. Selanjutnya klik meng-import dari file, berikut rinciannya :
Cet Allocations yang akan menampilkan proses alokasi sejak tracking 1. Memasukkan koordinat longitude dan latitude dalam satuan
dimulai. Untuk meng-update, klik kembali Cet Allocations. derajat (yang telah di.ielaskan pada sub-bab Emulasi Ceo-
location) ditunjukkan pada Cambar 5.30a.
2. Mengunggah file CPX untuk menampilkan lintasan yang akan
ditampilkan. Alur lintasan dapat di-p/ayback pada peringkat
dengan kecepatan tertentu (Cambar 5.30b).
.l
rE { *f .*.&e.hamr.{l}...gctT?rtldti6k 3. Menggunggah file KML, berisikan data koordinat suatu lokasi
6$ * r&dad.d*n"Ddrd{a,.. h:rdrn"gai dalam satuan derajat sebagai rangkaian proses playback pada
4{ { ;lva,rS"hJfkrFariory rEu"6f&eri6e( perangkat Android (Gambar 5.30c).
Jffe,r*r,*rffefr(bry *{,8yt!erf{ir
4 dah.*,ryrhm,l{rBw,,, nnt 4. Berikut contoh isi data file KML :
}{ 4 org*prek.tt*nm1... &p6t&
4 sxtoid.iidm,bdrnila,., na**eAQ (Placemark)
r+ dClrtaS?*E{fi"B6fsra.". rul
4 rg.ipadt,h.{rilor{y,,, eispate (name)Tugu yogyakarta<,/name)
r{ 4 r{ld.ddn,Oturir'." hm&i}Fr
<description)Tugu, Yogyakarta,
Gambar 5.28 TabAllocation Tracker fndones ia< /de s cripti on>
Tab Emulator Control, pada menu tab ini menyediakan sejumlah fungsi <Point)
simulasi state pada Emulator AVD atau perangkat Android, yaitu:
. Telephony Status, untuk mengubah state emulasi percakapan
telepon dan mode transmisi data (home, roaming, searching, dll.).
<coordinates>1 1 0 . 3 61 021, --l 7829L1,0</
Juga dapat mensimulasikan kecepatan jaringan mobile (GPRS, coordinates)
EDCE, UMTS/3C, dII.). <,/ point.>
. Telephony Actions, berfungsi untuk mensimulasikan panggilan < / pl a cema rk>
telepon atau pengiriman SMS pada emulator.
- Screen Capture
Berfungsi untuk merekam screen shot dari display Android atau
Emulator (Cambar 5.32). yang fungsinya sama dengan print screen.
.U-!.tr\ menggunakan fungsi ini, klik menu Device
jSc.een Capture.
Klik save untuk menyimpan ke file, atau klik Refresh untuk meng-
update tampilan screen shot.
112 , Pemrograman Smart Phone Menggtrnakan S[)K Arrrlrorrl rl,ilr ll,rr krrr1, Arlrlrrrrri llAlirr l),r,,,rr rl,r,,,rr lil)K Arrrlrorrl 113
;rlil{"'' Xt;
l:mffi-3**::*J". .i'-: .i
CaurrC m6:
c-' l-- ll
.:]:
.*
f :a q,,. ra !:r;ax
{+:'3
.-.
-il r. !:t*
lqB i I
Hrr *-HffiEry
,!L?.,{S,.lr:,.,,.,.,,.... . .,, r li
.,
*r5;:rtrltlt**l! tiit:
:r*1 r., tatr&r*rr .. f,t!:
!.u..r*, hf,niiir| ..,'lti:
114 Pemrograman Smart Phone Menggunakan SDK Androt<l rl,rtr ll,rr krrrg Arrrlrottl llAllrr l),r,,,rr rl,r,,,rr lil)K Arrtlrorri
1't5
Mematikan VM
Setiap VM yang berjalan pada perangkat Android dapat dimatikan
melaiui tool ddms secara remote dari PC menggunakan menu Actions
-+ Halt VM, yang sebelumnya dipilih VM yang akan distop pada
window VM.
-oo0oo-
116 Pemrograman smart Phone Menggunakan sDK Andnrrrl d;ttt ll,tr krrtl: Arrrlroirl
Package Core Android android. os: menyediakan class untuk pengaksesan pada
lingkungan OS Android, diantaranya BatteryManager,
Karena aplikasi Android berbasis framework Java sehingga struktur penamaan E i I e Ob s e rve r, H a n d e r, L o op
-pore.-lt.-r-r Binder,
e r, Arn
J-
r ;.
package librari Android identik pula dengan package Sun Java, diantaranya: android-provider : terdiri dari crass-crass prebuirdS"content
. java. lang sebagai core dari class bahasa Java provider yang disediakan Android.
. java. io menyediakan fungsi input dan output android. telephony: menyediakan fungsi class untuk akses
. j ava. net untuk fungsi koneksi jaringan lLocation,
telepon, seperti Ce1
. java.util merupakan class utilitas, pada package ini
PhoneNumberUtils, dan TelephonyManager yang berfungsi
termasuk class Log yang berfungsi untuk
menentukan nomor telepon, nama operator, jenls
laiingan. ti[" t"f
dan nomor SIM Card. "p"n,
menampilkan LogCat
j ava. text menyediakan fungsi utilitas handling teks
android- text: terdiri dari crass untuk pemroses berbasis teks.
j ava . math menyediakan fungsi operasi matematika dan
android-utir-: sekumpuran utiritas untuk proses manipurasi teks
atau XML.
kalkulasi angka
j avax . math class-class fungsi jari ngan
' android.view: menyediakan fungsi untuk Ur, terdiri dari crass
Menu, View, ViewCroup, dan rangkaiin listener atau callbick.
j avax. security class-class yang menyediakan fungsi sistem
security ' android. webkit: berisi crass-crass untuk fungsi browser web.
. javax.xml class-class untuk XML berbasis DOM
' android-widget: berisi crass-crass erement kontrol Ur tambahan
yang bersumber dari crass View. widget tersebut Jirnirr*yr,
. org.apache class-class untuk XML berbasis SAX (Simp/e Checkbox, Datep,icker, Ed.itText, Listiiew, frameLayoui,
Button,
APlfor XML) CridVi"*,
lmageButton, MediaController, progressBar, RadioButtfn.'
. g."dl?id.speech: berisi class untuk fungsi speech recognition
(deteksi ucapan), class ini hanya tersedia pada
Package yang dirancang khusus untuk perangkat embedded Android dapat 5S *rrii.s ke aras.
diketahui daii nama domain package android, sedangkan package yang . android.sax: package ini menyediakan fungsi utilitas SAX yang
memiliki nama domain com.google adalah librari yang dikembangkan didesain untuk perangkaiembedded Android.
oleh Coogle untuk fungsi API agar dapat mengakses ke sejumlah Coogle ' android. sensor: package ini memiriki sejumrah subcrass
service, berikut adalah sebagian package tersebut: untuk fungsi sensor-sensor yang tersedia pra, p"rant[ai.
contor,nya
. android. app: merupakan package untuk akses application acceIerometer, compass dan gyroscope.
model Android dan penyedia main class yang di-inc/ude pada ' androi-d.rocatlon: menyediakan sejumrah crass untuk fungsi
Application. layanan berbasis lokasi, diantaranya LocationManager
sebagai
. android. content: merupakan package implementasi Content penyedia akses ke location service, berupa rayanan
t"ol3."tion yung
Provider untuk mengakses data dari storage. {1nat _t9r;updare secara otomatis ,"r,8*unrk"; ffig;; provider
CPS (Clobal positioning Sysrem) atau lo6tion proriO"r?"ng"n
. android.net: package yang meyediakan implementasi API untuk
mendeteksi ID BTS (Base Transceiver Station)Seluler atau
."r,
jaringan socket-level dasar. Berisikan sejumlah class primer diantaranya Hoispot WiFi.
URI (Uniform Resource ldentifier), ConnectivityManager,
. com . googJ-e . androi-d . mapq: package ini menyediakan fungsi
Localsocket, LocalserverSocket, Proxy, juga fungsi akses dari service co_ogte
.lass, diantaranya:
uapi aan ai alramnvai"rr*; sejumrah
HTTPS pada level browser atau iaringan.
Projection, dan MapActivity. .Ceopoint, MapView, M"da;r.lE; overlay
. anCroid. graphics : terdiri dari primitives untuk grafis, seperti
Bitmap, Canvas, Camera, Color, Matrix, Movie, Paint, Path, Rasterizer,
-lypeFace.
Shader, Sweepcradient, dan package librari tersebut tersimpan dalam satu
bundling package
. android.opengl: merupakan class utilitas untuk pengoperasian "r'lrrrrrh
r rrr l . icl . j a.r dengan pendistribusian secara mandiri otur, coo'gf"
dari"m
OpencL ES. l,rk.l S[)K Android. Seliap versi android. jar disesuaikan Je-rigan versi
Pemrograman Smart Phone Menggunakan SDK Artrlrrlrl tl.ut ll,tt kttt[: Ailtlrttttl
llAll (r l);r:,ar ltrrrrrollrarrran Arrdrrlrrt
118 119
API karena dari tiap versi terdapat penambahan librari untuk fungsi tertentu ' Pada kondisi default, aplikasi berjalan dalam proses yang terpisah. sistem
seperti yang telah dijelaskan pada Bab 2. Android akan memulai proses jika ada kode yang perlu dijarankan dan
ditutup l<etika tidak diperlukan lagi sehingga resource dapat digunakan
oleh aplikasi lain.
Tipe Data Primitive Pada Android ' Tiap proses menggunakan vM tersendiri sehingga tiap kode aprikasi
Tipe data primitive atau dikenal sebagai tipe primitivu p19u Android sama berjalan secara terisolasi yang tidak mempengaruhi kode aprikasi
seperti bahasa pemrograman Java. Yaitu String, Boolean, Character, lnteger, lainnya.
Short lnteger, Byte, FlJat, Long masing-masing tipe data tersebut didefinisikan ' setiap aplikasi diberikan sebuah kode User lD un ik. yang kepemirikannya
di Tabel 6.1. (permission) diatur agar file aplikasi tersebut hanya dapat dilihat oleh
user yang menggunakan dan aplikasi itu sendiri. Meskipun demikian,
Tabel 6.1 fipe Data Primitive yang didukung Android terdapat pula metode untuk mengekspor ke aplikasi lainnya.
l',rrl.r Ar"rdroid, sistem memungkinkan mengatur dua aplikasi untuk di-share
l-ebar data t,,rrlu user-lD yang sama sehingga masing-masing aplikasi saling dapat melihat
lrl. lainnya. Untuk menghemat sumberdaya sistem, Linux process mengatur
:Boolean' ,rPlikasi 1'ang berjalan dengan user lD yang sama dan di-share pada vM yang
',. tn)(1.
char
byte- ,-u- _
,51S1--e"qynpg.el ;o.9,J -,\.tz?.ttttt68d.tL! l
f short 5rgned rnteger u lo otr , _r!!?9 !1"'56o !'a "_!_ Komponen Aplikasi (Application Component\
ar )^ I . - ' -
'-2147483648 htngga l',rrl.r sistem Android memiliki fitur utama yaitu suatu aplikasi
int Signed integer 0 32 bit dapat
1: 2147483647 ,r,'rrrlgunakan unsur-unsur aplikasi lainnya selama diijinkan oleh aplikasi
, , -9223372036854775808 l.rs.but. Misalnya, suatu aplikasi A membutuhkan tampilan scrolling list
long 'Signed integer 0L 64 bit hingga ,i,rrrl)ar dan aplikasi B yang telah dibuat pengembang lainnya teriedia
9223372036854775807 ,
Irrrrg,si scroller yang kompatibel dan dapat diimplementaiikan o[eh aplikasi
float ,5:t,.,75- rloating or 32 bit \ Karena itu, dapat disimpulkan sistem Android memungkinkan aplikasi A
l.i5r"Jr!;f::t rrrcn jalankan perintah pemanggilan fungsi scroller dari aplikasi B, tanpa harus
IEEE 754 floating 0d 4.98-324 hingga rrr.rnbuat fungsi scroller dari awal. Meskipun demikian, kode aplikasi antara
double , 64 bit I
120 Pemrograman smart Phone Menggunakan sl)x Arrrlrorrl rl,rtr ll,rr krill: Atttltotd llAlt {r l)asar l)errrroprarrran Arrrkrlrrl 121
kedua, NewMessage untuk menyediakan penulisan pesan SMS baru, 0,
menu . add ( i kas iku . MENU_LOCATION, 0 ,
ap1
Activity Inbox sebagai penampil pesan yang tersimpan, Activity
Search untuk fungsi pencarian pesan tersimpan dan Activity Settings getResources O . getText (R. string.menu_Iocation) ) .
untuk penampil konfigurasi aplikasi SMS. setfcon (android. R. drawable . ic_menu_edj_t) ;
Meskipun dari sisi pandang User lnterface hanya di dalam satu menu.add(0, apIikasiku.MENU_VIEW_LOCATION, I,
kesatuan aplikasi, sebenarnya setiap Activity bersifat independen dan getResources O .getText (R. string.view_location) ) .
terimplementasi sebagai subclass dari base class Activity.
set I con (android. R. drawable . ic_menu_zoom) ;
G tt:iiu fgtlu'ttr tls$regnllrt menu . add ( 0, aplikasiku . MENU_SpEC I FY_LOCATION.
,l}$r:r lc
2, getResources ) . getText (R. string. specify_
(
122 Pemrograman Smart Phone Menggunakan SDK fuxlrtxl tl,rtt ll,rr krtrli Atldroid llAll (r l)asar l,emrograman fuxlror<l
123
,,rdrIrld
l*^.ffi
& *$ila*rtr rd.1crru.t crrc;
_ " fril!1pr,"
F.*r,ir*
*-- ,la},n(rtr;,;;;1. tlir tlr:gr
Brflwger
berfungsi sebagai host dari Activity, Service, atau I
I
Hsl*ru
I Pl{P
Sehingga dapat disimpulkan, Content Provider merupakan layer data
sebagai penyedia data abstraksi untuk client dengan tipe penyimpanan
data terpusat. Ada 2 metode aplikasi untuk dapat menyimpan data,
SLlL
-r
yaitu: hrrllqr&r
a. Menciptakan Content Provider di dalam aplikasi
b. Memasukkan data ke provider aplikasi lain (diperlukan
perm issio n u ntuk men gakses provider tersebut).
Aplikasi tidak dapat memanggil method ContentProvider
secara langsung, maka untuk pengimplementasiannya dipanggil r-
method object ContentRe s olve r. Obfecttersebut berkomunikasi
dengan tiap Content Provider atau Content provider dari aplikasi
lainnya untuk me'manage komunikasi yang berhubungan dengan
LJ
SQL
interprocess. -
Berikut adalah bagan ilustrasi hubungan interaksi antara Activity, Gambar 6.4 Bagan interaksi antara Activity, Service, Broadcast Receiver,
Content provider, dan
database, Broadcast Receiver, Services, dan Content Provider yang user rnterface dari suatu aprikasi yang berrnteraksi dengan rayanan web
berinteraksi dengan suatu web service untuk mengakses suatu data
'\1g,rr lebih mudah mema.hami fungsi Content provider tersebut yang
pada server.
lr.rinteraksi dengan sejumlah A_ctiuily, service, dan sroadci,it-
Receiver,
,l.rlrat dilihat pada projecr RSSUSCS di bab 9 yang mengimplementasikan
, l.rss Content Provider sebagai penyedia fungsi aksei
k" d;;b;r;.
User lnterface
I rr rl.rlam sistem Android, [Jser lnterface dibangun menggunakan
'' r,'w object
dan viewGroup. object view adalah"expr"*i# rr"i' interface
1r,rrl,r sistem- subclass dari class view disebut widgLt
rr rrplt'rnentasi object Ul.
v"ng rJrngsi untuk
(lrrtrrk rnendefinisikan activity Ul diperrukan
sejumlah Apl View dan
.'i,'w(;roup. Pada cambar 6.5 ditampilkan diagiam hierarki Apr View
rl,rrr V icwGroup.
Agar kita memahami fungsi lntent, di dalam bab 8 project CariLokasi terdapat
A<;tivity CariLokasi dan View digunakan untuk menciptakan
Irrtent, yang mengirim data teks sebagai referensi URIyang mengakti{kan
A< tivity Coogle Maps. Sedangkan di bab 9, project RSSCuaca dan
l(SSUSCS ditunjukkan pengimplementasian Intent lebih kompleks untuk
rrrcngaktifkan Activity DispJ-ayDat.aRSS dan Activity PetaGempa.
Shutdown component
K.rrcna tiap Activity memiliki LJI (user interface) dan Activity dan dapat selalu
,rktif dalam waktu lama atau ke kondisi idle. Sehingga, untuk men-shutdown
A< livity digunakan beberapa metode terstruktur, diantaranya:
130 Pemrograman Smart Phone Menggunakan SDK Arrtlrotrl tl,rtt ll,tt ktttg Androtd llAlt tr l),r,,;rr Ihmrograrrrarr Arrrlrrrrrl
131
Siklus (Lifecycle) Gomponent
. void onRest art () dipanggil saat state saat restart atau membuka
Tiap component aplikasi memiliki siklus (/ifecycle) terpisah, dimulai saat kembali Activity
meng-instantiate aplikasi tersebut untuk merespon intent dan berakhir saat .
instance ter-destroy. Antara proses tersebut terkadang component dalam void onResume O dipanggil saat state me-resume Activity
kondisi aktif atau non-aktif. Atau dari sisi pandang Activity, apakah dalam . void onPause O dipanggil saat state Activity dalam kondisi pause
keadaan terlihat (visib/e) oleh user atau tersembunyi (invrsible). . void onStop ( ) dipanggil saat state Activity tidak aktif
Bagian ini membahas lifecycle dari Activity, Service, dan Broadcast Receiver. . void onDestroy ( ) dipanggil saat state Activity proses kill (oleh
Termasuk lifetime state dan method-method yang akan menotifikasi user sistem atau manual)
berupa proses transisi tiap state dan kemungkinan dampak state saat berakhir []ntuk mempermudah pemahaman fase dari tiap state tersebut, kita dapat
proses hosting dan ter-destroy-nya instance. rnelihat bagan yang ditunjukkan pada Cambar 6.8 dan Cambar 6.10,
scdangkan untuk memonitoring tiap state dapat digunakan 3 metode nested
/rnp (loop bersarang), yaitu:
Siklus Activity
. Fase Keseluruhan, inisialisasi setup Activity dalam state global
Setiap Activity di dalam aplikasi Android memiliki tiga state utama, yaitu: menggunakan method onCreate ( ) diakhirimethod onDestroy ( )
. State aktif. Activity yang berada dalam kondisi foreground (latar depan) untuk menghapus seluruh resource Activity.
screen (ditunjukkan pada bagian stack activity teratas dari task yang . Fase Visible,adalah lase Activitysaatpemanggilan method onStart ( )
sedang berjalan). Activity tersebut menunjukkan sedang menjadi fokus hingga method onStop O selama Activity dalam kondisi aktif,
dari action user. meskipun tidak pada posisi latar depan atau tidak berinteraksi dengan
. State pause, yaitu pada seluruh keadaan di luar dari fokus, tetapi tetap user. Di antara kedua method, resource dapat dipertahankan untuk
terlihat oleh user. Atau didefinisikan terdapat activity lain yang terletak menampilkan activity ke user.
di atasnya dengan tampilan window transparan atau fullscreen. Activity . Fase Foreground (latar depan), fase ini berada diantara method
pada keadaan pause dapat ditampilkan kembali sepenuhnya. Pada onResume O hingga method onpause O . Fase Foreground terjadi
keadaan ini sebenarnya Activity tetap dalam kondisi aktif (sepenuhnya saat Activity ada dalam kondisi latar depan layar dari activity lain dan
ter-maintain state, informasi member, dan tetap ter-attach di window saat ada interaksi user. Pada fase ini, Activity dapat pada level state
manager). Meskipun demikian, akan dimatikan oleh sistem jika dalam pause atau resurne.
keadaan low memory. I ).rlam Gambar 6.8 ditunjukkan bagan yang menampilkan ilustrasi hubungan
. State stop, activity akan terhenti total jika sepenuhnya tertutup activity l.rse siklus dari class Activity
dan stack Activity aplikasi lainnya. saat iaat
lain, meskipun Activity tersebut masih menyimpan state dan informasi rliluar fase oncreate ( ) dan onpause ( ) tetap didefinisikan sebagai fase
member. Tetapi, tidak terlihat lagi oleh user, akibatnya window akan ter- ,rktif meskipun display aplikasi tidak terlihat user, contohnya user menekan
reset dan berpotensi dimatikan sistem saat memori diperlukan activity lornbol Back yang akan menutup aplikasi atau kembali ke state aplikasi lain.
lain yang berada pada stack di atasnya.
Sistem akan men-drop suatu Activity dari memori pada state pause atau
stop. Atau mengakhiri Activity tersebut dengan menampilkan request ke user
menggunakan method finish O . Jika user mengaktifkan kembali Activitiy
tersebut akan di-restart ulang dan di-restore dari state sebelumnya.
Untuk me.notifikasi perubahan transition Activity dari satu state ke state lain
dapat dilakukan pemanggilan beberapa method:
. void onCreate (Bundle savedfnstanceState) dipanggil
saat state penciptaan Activity
. void onStart () dipanggil saat state start atau aktifnya Activity
132 Pemrograman Smart Phone Menggunakan Sl)K Andrtrttl rl,rrr ll,rr krrr11 Android
I tAl i (, I ),1,,,1 I'r'rnrol],rrrr,rrr Arrrlrorrl 133
"**"*'."*-" *"-*'E rrnarrrit
'! *'*_-.,
$ihlusActiviU
A.i$VSl# . ' orcref,tg(l
AE{vfiyAIlll I Fnse vleible
lArffBAl ---i--d
J Urdr rEr**i*!
,rplitoiB r lur*rl txrMtt i
\_ -
--" .1 .'- * - .,,,,,,L. .,.*
Fss
ApL.raA.
Fonignlu(rd
mRsmc(!
tffis I
? Frffi*d"m
rTTr+"r r
onPaxfl
-'**-t**-'- h1ffqs#,ffi'
i rdffil{r
I
t{rhk
6mr{tan r!t* tu$*fu hrr
p.rqhflrt.n nnul xnlursi
Gambar 6.8 Hubungan antarActiity state latar depan dan latar belakang (Sumber: Abelson W.E
et, al. 2009) , Sr'{ril9nr.l$h
'. rrcntuorhta,r ntfrrrrr
Proses berlangsungnya loop dan alur activity ditunjukkan pada diagram
alir Cambar 6.9 yang mengilustrasikan untuk tiap level state. Pada bagian
diagram oval berwarna gelap menunjukkan saat dalam state utama suatu . itrdlr0i*:bfiq* I
Activity, sedangkan untuk bagian persegi panjang adalah method callback
(panggilan balik) yang dapat diimplementasikan untuk menjalankan suatu t-:i:-:-t-m:::;1
proses, pada saat dalam transisi Activity di tiap state.
[:
i
F.-r?:ml
iL .s!qH$j},+l
.'" *.. : ^
'';'l
"..'-
-"* ,*-* _
tu rfrflr-
'_.-*;i*-;frirttd .
Gambar 6.9 Bagan alur level state suatu Activity (Sumber: httpl/developetandroid,com)
134 Pemrograman Smart Phone Menggunakan SDX Andttttrl rl,rrr ll,rr krrrg Android llAlt lr l),r,,,rr l\trrrrrgr,rrrr,rrr Arrrlrrrrrl 135
1
Siklus Service
(baris ke-2). Bagi kita yang terbiasa, dalam pemrograman Java Anotasi ini
Dalam pengimplementasian service di Aplikasi Android dapat digunakan
sebenarnya telah lama didukung untuk membangun project aplikasi berbasis
beberapa method, yaitu:
Java J2SE menggunakan IDE Netbeans 1.5 ke atas.
' Method context. startservice ( ) untuk mengaktifkan service
1 publi-c class Hell-oAndroid extends Activity { . Method Cont.ext . stopService ( ) akan menghentikan
2 SOverride service dan tidak berpengaruh dari pemanggilan berulang fungsi
3 public voj-d onCreate (Bundfe savedlnstanceState) {
startService
4 super.onCreate (savedlnstanceState),'
. Penghentian seryice dapat menggunakan method Service.
stopSelf ( ) atau Service. stopSelfResult ( )
5 setContentView(R.Iayout.main); . Mengaktifkan langsungdari program, menggunakan method Context .
bindService () , berupa client process menyiapkan
koneksi
Penyimpanan state Activity dengan object service. Kemudian koneksi tersebut digunakan oreh
Android memiliki keunggulan dalam hal mengefisiensikan dan mempercepat service. Method ini akan mem-binding sejumlah client menggunakan
waktu load pengembalian dari sistem untuk ke state sebelumnya. Yaitu satu seryice.
dengan cara dilakukan proses capturing state sesaat sebelum sistem . Method Context.unbindServlce O untuk menutup servlce
men-shutdown Activity tersebut (dengan melakukan kill-process oleh langsung dari program..
sistem). Proses capturing tersebut dapat dilakukan dengan menerapkan service juga memiliki method siklus yang dapat diimprementasikan untuk
method onSavef nstanceSLate ( ) di tiap Activity. Method rnemantau perubahan tiap state. Terdapat tiga tipe (public) dan tidak ter-
onSavelnstanceState akan dipanggil sistem, saat sebelum Activity lrrotect yaitu:
ter-destroy, atau pada waktu sebelum method onPause ( ) dipanggil. Untuk
febih jelasnya, tahap-tahap proses capturing state dari proses tersebut dapat void OnCreate ( )
dilihat pada Cambar 6.10. void onStart (Intent intent)
void onDestroy o
l'ada sejumlah method di atas, siklus hidup service dapat dipantau pada
kondisi tertentu sebagai berikut:
. Seluruh lifetime service, yaitu antara mehod OnCreate ( ) dan
method onDestroy o . Contohnya, service aplikasi pemutar musik
yang menciptakan thread saat oncreate ( ) dan berhenti pada thread
onDestroy ( ) .
Gambar 6.10 Bagan proses capture state pada suatuActivity (Sumber: Meiec R, 2010) . Saat service aktif, dimulai saat eksekusi method onStart ( ) .
Ditangani oleh object lntent startservice o . Contohnya service
Saat Activity diaktifkan kembali, objea Bundle (sebagai method pemetaan
dari nilai string ke bentuk sekumpulan obiect) akan melewati method aplikasi pemutar musik yang mengaktifkan lntent untuk mencari file
yang akan diputar. Penghentian service tidak memberikan callback
onCreate dan mengeksekusi method lain setelah melewati state
( ) method onStop ( ) . service tetap aktif hingga ada dimatikan manual.
onStart (), atau onRestorelnstanceState O. Method tersebut
berguna ybt kondisi suatu Aplikasi pada suatu state yang sebelumnya telah
ter-capture. l'.rrl.r cambar 6.11 ditunjukkan diagram alir callback method dari siklus
rcrvice.
M v
-.___*"'.7
t mRBund,U
l Menggunakan method
---L--- sen&roadeaet
t5ervir ba*rrrdi]. onUntird(l Aciivity B
' atau
k:**9j rendord*red8roadcas t
rr
**.*.*t"**,*-r
r mu*srsf 0 on0crrsril
;
Gambar 6.12 Bagan nelhodonReceive ( ) dan return dari broadcasl
IMffi
Gambar 6.11 Bagan method callback suatu service dengan service lainnya (Sumber: httpl/
saat Broadcast Receiver dalam kondisi aktif akan ter-protect dari proses kill.
St,baliknya, jika Component Broadcast Receiver sedang tidak aktif maka
rlapat di-ki// oleh sistem.
Jika kita ingin membuat aplikasi Android berbasis jaringan internet (misalnya,
aplikasi yang mengimplementasikan API Coogle Maps atau RSS Feeder) maka
perangkat Android diharuskan terhubung internet menggunakan koneksi Gambar 6.14 Hierarki project Android yang di dalannya terdapat sejunlah file
WiFi, melaluijaringan operator (CPRS-3C-HSDPA). Hal ini disebabkan SDK
142 _Pemrograman Smart Phone Menggunakan SDK Androrrl rl,rrr ll,rr krr11, Arrrlrorrl
liAli (, l),r,,,rr Il'rrrrogr,trrr,rrr Arrrlorrl 143
. android:maxSdkVersion sebagai penentu level API tertinggi di
yang ditampilkan saat proses instalasi browser Opera.
mana aplikasi dapat berjalan normal. Sebelum menggunakan atribut ini
Sffif} z,zrnr sangat perlu membaca dokumentasi (uses-sdk>.
[)ata manifest ini serupa dengan manifest pada aplikasi java MIDP yang
berisikan deskripsi keterangan aplikasi, versi aplikasi, dan dukungan versi
r/evice profile. Di saat user meng-insta// suatu aplikasi atau memvalidasi
ulang setelah melalui proses update, sistem Android akan mengecek atribut
. uses-sdk> pada manifest aplikasi tersebut dan membandingkan dengan
rrilai internal level API yang didukung. Proses instalasi dapat berjalan jika
tcrpenuhinya beberapa kondisi, yaitu:
. fika atribut android:minSdkVersion terdeklarasi, nilai tersebut
harus lebih kecil atau sama dengan level API sistem. Jika atribut tersebut
tidak ditemukan maka sistem akan mengasumsikan aplikasi tersebut
membutuhkan API level 1.
. Jika atribut android:maxSdkVersion terdeklarasi maka nilai
tersebut harus sama dengan atau lebih besar dari level API sistem. Jika
tidak maka sistem menganggap aplikasi tersebut tidak memiliki nilai
level API tertinggi.
Gambar 6.17 Fungsi uses-permission untuk menanpilkan permission saat proses
I'ada tabel 6.1 ditun.jukkan element-element yang didukung
AndroidManifest. xml
instalasi
Komponen lain dapat dideklarasikan dengan cara yanB sama, seperti element Tabel 6.1 Jenis Element-element yang didukung AndroidManifest.xml
< s e rvi ce > sebagai element untuk service-service, element ( re ce ive r)
untuk Broadcast Receiver, dan element <provider> untuk Content Etem€nt Definisi' ,
dari children <i-ntent- I 3 android: name:"com. app . sample . plaees . VIEW LIST,, />
filter>. l4 <,/intent-filter>
<service> root Mendefinisikan tiap I 5 </activity>
service latar belakang I (r <activity android:name:"ReviewDetal1,,
yang digunakan, juga
,r r r<lro id : 1 abel:" G s t ring/app_name_review,,)
dapat men-support dari
children (intent- / <lntent-filter>
I
filter>. Itl <category
(provider) root Mendefinisikan tiap I ') android: name:"android. int.ent . category. DEFAULT,, ,/>
Content-provider .'0 <action
yang digunakan untuk ' I android:name:" com.app.sample.places.VIEW DETAIL,,
/>
memanajemen presistent .'.' .: / intent-filter>
data agar dapat diakses
.' \ '</acLlity>
aolikasi lain.
I ).rr i Man.ifest, filter pertama (baris ke-3) merupakan paling umum digunakan,
Filter lntent lr.r trp.r kombinasi action android . i-ntent . acti-on . uaiu dan
, rrr, lr' intent. category. LAUNCHER sebagai default launcher
<)rd -
Jika komponen tidak didefinisikan secara eksplisit, sistem akan mengaktifkan .rplik,rsi. Fungsi intent-fil-ter pada activity RevlewCriteria,
sejumlah komponen yang telah terdeklarasi pada manifest. Yaitu dengan lr''v i .wList, dan ReviewDetaif sebagai starting /auncher atau
cara membandingkan object lntent dengan filter-filter intent untuk pr.rrcrrrp.lliln Activity pada main menu aplikasi.
pencapaian target yang paling memungkinkan. Komponen filter intent akan
und E;;!ridj!,'!...,lml aplikasi, misalnya di dalam suatu Activity dJpat iGrnu[i, method
Dcapntr
lq
,:.-=:lml Clas s R. anim . file_target. atau mengguiakan data XML
dengan sintaksis G tpackdge: I anim/fi1enariE.
l,tr*r made
Sssffitalo.r
r-.*-3
---=-_jl,q;q
r*---------
. Direktori / color
Untuk penyimpanan fire data XML yang mendefinisikan state perubahan
C6fu dlmod -,*",_:lEI;l warna/.yang tergantung dari state. object view object. Misalnya
state
PraM
- _ ::litffil perubahan warna button (saat diketuk/tapping, te*okus,
aiau kondisi
ti{rirffi r-----*-3 lainnya).
Prffi I ,l htrra."l . Direktori /drawable
ta* afiny .[I;E;] Sebagai direktori penyimpanan file image dengan format
Aloe t * Gp{sbE l------------- didukung diantaranyac rF, )pG, pNG, 9.pN6. Direkiori i"i
yang
F'xfi s h{ lirr:h r*----------3 irsu
r.rnpat penyimpanan fi.rejire XML ya.ng mendefinisikan statL
sebagal
List,
('.1 or, rlan Shapc. Untuk mengakses resource image
Gambar 6.22 Menu Attributes dati liap Element dan sub-Element tersebut dapai
150 Pemrograman Smart Phone Menggunakan SDK Artrlrorrl rlirrr ll,rr klrr11 Arrrlroid I 1/\ll {r I ),r',,rr l'r,rrrro;ir,rrrr,rl Arrrlr, rrrl
151
menggunakan class R.drawabl-e.filename atau pada XML Berikut ini ditunjukkan contorr implementasi
menggunakan G Ipackage : ] drawable/ . layout pada suatu Activity
menggunakan layout resource
main_Activity. xm1:
Pada saat kita membuat project Android, secara default akan di-inc/ude-
kan image icon.png yang akan digunakan sebagai icon aplikasi public void onCreate (Bundl-e savedTnstancestate)
yang tersimpan dalam direktori drawabfe-1dpi (untuk icon super . onCreate ( savedf nstanceState
{
. Direktori ,/values
file_layout . xml- dapat diakses dari kode aplikasi
Setiap file layout Direktori ini untuk penyimpanan data
string dengan format XML, yang
menggunakan beberapa method, diantaranya: terbagi menjadi beberapa j;nis iip;;;t"a,
yaitu:
o Method setContentView (R. layour, . nama fif e o File string,. file ini sebagai resource data
, string yang
layout) untuk dapat mengakses suatu resource layout pada di imprementas ikan pada kodE ipri[tilr"g ilil, r,r.i'
" "' r"
content Activity. string. xml, berikut contoh isi file terseiut:- "l* r,
152 Pemrograman Smart Phone Menflf,tttt;rk,ttr fil)l( Attrltrtrlrl,rrr ll,rr krrtli Antlroid llAll {r l),r,,,rr l,r,trttogr,rrrr,rrr Arrrlrorrl
153
string> Dari isi file di atas tampak tag array name sebagai nama
<string name:"menu_save_data")Simpan Data</string> array string nama_kota. Agar strhg array tersedut dapai
.dapat digunakan method getEtrrngArr:ay
terbaca pada
<string name:"menu_open_data ")Bu ka Data< / st ring> -
kode aplikasi, yang ditampilkan sebagai berikut:
<stri-ng name:"menu_specify-focation")Tentukan Lokasi</
Lhis . kota_t.u j uan : (Spinner) findViewByld (R. id. kota
string>
tujuan);
<string name:"view processing")Data sedang diproses - - -</
ArrayAdapter<St.ring) nama_kota : new
string>
ArrayAdapter(String> ( thi s,
</resources>
R.1ayout. spinner_view, getResources ( ) .
getStringAray (R. array. nama_kota) ) ;
File ini biasanya digunakan sebagai fungsi localization
(penerjemahan bahasa aplikasi) yang seluruh data-data string n ama_kota . s etDropDownViewRe s ource ( R. 1 ayout . spinner
tersebut akan tampak pada layout aplikasi atau menu. Adanya dropdown);
file string.xml akan mempermudah proses translasi oleh I his. kota_tujuan. setAdapter (nama kota),.
user tanpa harus memiliki kemampuan pemrograman java
disebabkan tidak perlu mengetahui fungsi class-class yang
terdapat pada source code aplikasi tersebut. Penggunaan resource R. layout . spinner dropdown
o file ini berfungsi sebagai resource dari sejumlah
File array string, berfungsi
.. sebagai resource layout spinner -VinS akan
data string untuk digunakan pada suatu menu pemilih (radio menampilkan. menu spinner dengan resource string diperoreh
button atau menu spinner) dengan nama file arrays. xml, dari array. string nama_kota- Lontoh pur"r"pui file arriy
berikut contoh data array yang digunakan pada suatu aplikasi string ini dapat dirihat pada project aprikasi RSS-uscs, dengan
sebagai menu radio button: nama file array arrays. xmf .
154 Pemrograman Smarl Phrtnrt Mttt11lltttt,rk,rtt i,l )h AlrrIrrrrlrl.rtr ll,rr ktttli Attrlrgid i /\11 l, l),r,,,rr l'r,rrrrol:t,rtrr,rrr Arrrhlrl j55
Fungsi element-element dari contoh di atas diantaranya (item name:,,android : textColor,, ># f f f f f f</
yaitu tag element pJ-ura1s dengan nama lD ltem>
jumlahBarangTersedia, sebagai kumpulan string
dipengaruhi oleh suatu nilai sehingga akan memberikan </style>
keluaran string yang berbeda. Contohnya jika pada kode aplikasi <styIe name:',edit_t.ext,,)
didefinisikan string item quantity bernilai kosong maka
akan memberikan keluaran string stok barang habis.
<1 tem name:,,androi-d : text S i ze,,> 1 6 sp<,/ tem>
i_
156 Pemrograman Smart Phorre Monlilitttl,tk,rtt lil )h Arrrltrrrrl rl,rtr ll.r, l'trrl' Attrlrrttd IJAIJ (r l),t,,,rr l!,nrrl1;l.rnr,rrrArrrlrlrrl
$7
Direktori Source
Direktori Binary
umlah file byte.code.dengan ekstensi Direktori ini berisikan source code aplikasi iava yang tersimpan dalam
Di rektori bi nary (/ bi n) menyimpan sej
package. Penamaan package menggunakan sistem direktori tree ber-style
*.class dan *.dex V.#'."iiip^i"" fi(" hasil kompilasi dari source code
layout resource, dan c/ass Java, yaitu mengikuti namapackage class java (diawali dengan nama general
,pri["ri vrne Jie"br.ir""-p,]i, J"ng"n juga
.fitejite dan diakhiri nama project aplikasi atau mendefinisikan fungsi komponen,
tersimp'" vang siap
;;;;;r;;r,; a.iava.d"tu- direktori ini
puOt"i',rlator aiau
1'l:
perangkat Android' l':fl misalnya com. contoh. widget . aplikasiku . service. Nama
didistribusikandan ar[iJiiuf"npin
package diharuskan lebih dari 2 nama (contohnya com. aplikasiku),
untr-rk jumlah maksimal package dan nama file tidak dibatasi.
DirektoriAssets
pada direktori assets tersimpan sejumlah file yang tidak berhubungan A d Projectad*aSr
Direktori ini E {i$ src
i;;;;;";gun p,olIi ipil"il vuitu fite-file selain resource.
file teks lisensi atau EULA dari
bt;;;;; Jisr;.,rtin ,"nri!i penyim.panan ES com.contoh.wdget.adikasihl
,r.*'Jpf if.rliain ftt" ["""nrtiipat diakses pada kode aplikasi menggunakan L{ U ad*as*<u.java
method readEula O.
Gambar 6.26 Direktori \ s rc suatu project Android
Direktori Gen Jika kita membuat project melalui menu Wizard, New Android Prolect. Dari
file class generated iava
Di dalam direktori ini terdapat sejumlah package dan string
input Package Name dan Activity Name di window properties, secara default
;;.g"; ,.;,"a file R. j rrru,-Atil
file ini merupakan indeks resource data tercipta satu class Activity merupakan main Acti-vity
(Activity tersebut
XML, sebagai antarmluia 4ndroid lnterface Definition Language)' pertama kali dieksekusi oleh interpreter). Setiap activity akan tersimpan dalam
Cf"r; n.llva akan ter-generate secara otomatis setiap user memodifikasi direktori sesuai dengan nama package, contohnya project yang ditampilkan
saiah satu fiie XML (l;y;; Ut string resource strings.' xml)' Jika pada Cambar 6.26, ditunjukkan suatu class yang terdapat di dalam package
"t"u
java secara manual dapat berakibat proses aplikasiku,
;;; ;;rJiri6ri cias, R. com. contoh . widget . yang secara fisis class tersebut
kompilasi aPlikasi akan gagal. beradadi dalam direktori com/contoh/ widget/aplikasiku/
Disararrkan kita tidak membuka class R.
java untuk menghindari modifikasi Aplikasiku. j ava.
class secara tidak sengala. blr"niUlr" filipse tidak mendukung fungsi read-
only fi le-file autogenerate.
,.lr:qPtdictl Androidjar dan Mapsjar
;; s$ rc
ir rl3 g*n l'.*r*;:r.J ':'; ' I irl{:.l Dalam setiap project Android hierarki akan tampak file Android .. j ar atau
1-; $ som..conbrr rnaps . j ar yang merupakan archive library Android dan Maps. Di dalam
r ili n.pra Archive Android. jar berisikan sejumlah class-class runtime Android,
lSr. y.ing menandakan project tersebut meng-inc/ude librari API Androi-d,
*l ott stdangkan archive librari maps . j ar akan di-include-kan jika project
I €{ *"*"a.
*tila rnengimplementasikan API Coogle Maps (Cambar 6.27).
a ill hro.,t
I rS rrtq,
r *J rtrdt
(a)
Gambar6,25(a)HierarkidirektoripadaprojectAndroid(b)isifileclassR.java
l'l )h Atrrltorrl rl'trr ll'rr kttlll Attrlrttttl llAlt (r J),r,,,rr l'r,rrrrolI,rrrr,rtr Atrrlturrl 159
158 Pemrogranlan Smart Pltorte Mtlttf il'1trrr'tk'rrr
*, ;$ src
*i l3 g*n lli,:',rr'l:: : .; l :r' r:,
-:
L) S eooele APis [Andrord 2, r]
I
ffiJ j,rl android,jar - l: 'f'r*rlr t*: lrrPs"&:
srl*s v:Rd'
lJ {:E rnaps.iar - F:'rlri$rer:
m S coar'soosle,android.rnry*
(levelAPl /)
Project Dasar Aplikasi Android
Dalam hierarki project Android (cambar 6.27), secara tersirat
file librari
e"Ji":-O. j ar tersimpan dalam direktori. tersebut' Meskipun sebenarnya
file archive tetap tersimpl" Arf direktori /p1atf orms /android-x di
Jrlu,n ,r.krse'direkro;Sot< "*
nndroid (dengan nilai x adalah nilai level librari
proiect' sesuai
ffi;. ilb i;? ,l,rrnJtitrn saat menialani proses kompilasi.
tersebut. terdistribusi
dengan versi Apl target. iibrari nrchive Android.jar
repositori Android
secara open source y";;t;r;;;-nya dapat diunduh.pada
(pada i i nk U RL: http:i/git.sou rce'android'com)'
-oo0oo-
!!&rdrl
r d! 6g1tr81
: !r! drdrM
diEE@
ArupdTffl
,Ir FrqFrt
a i::' C'15
I **' lx'r'g
$; 'i;:,Java lf
t * *&A,n firylcfoSm*rlt
r ;,,*: {ggn$s
i',1 -,$4ir*1ry,{
qry"*"",
*' :**iqr'
siai* **!+*
,firm:# :il&*tM:w*
*: sqsi
l;f L:.r*6
Gambar 7.2 Window New prolect aplikasiHatoAndroid
,.: sas**" fur ecir&x
*"'r a* x; Kolom isian pada window New project tersebut memiliki fungsi-fungsi
sebagai berikut:
Gambar 7.1 (a) Menu Wizard (b) Menu New Android Proiect
- Project Name yaitu untuk menentukan nama project dan nama
2. lsi kolom project dan properties seperti berikut: root direktori project yang menyimpan seluruh file project;
. Project name : HaloAndroid - Application Name,.digunakan untuk title atau judul yang akan
. Application name : Halo, Android! tampak pada Ul aplikasitersebut;
. Package name : com.contoh.haloandroid - lagkage Name, menggunakan format penulisan package
. Create Activity : HaloAndroid kebalikan dari nama domain web atau mengikuti styt" p"rnoJetin
. Min SDK Version .) package class java yang telah dijelaskan pada bab sebelumnya,
dapat juga ditentukan sesuai keinginan;
. Build Target AVD : minimal Android 1.'t
- Check box create activity, untuk meng-generate class main
Activity yang akan dijalankan pertama- kari oreh aprikasi
hilangkan centangcheck jika ingin membuat manual;
Kolom isian yang terdapat di window New Project (Cambar 7.2)
seluruhnya wajib diisi. Jika salah satu konfigurasi bernilai kosong - Min SDK Version, nilai integer untuk versi SDK yang akan
maka project tidak dapat dibuat karena sebagai referensi konfigurasi digunakan dalam merancang aprikasi disesuaikan padX versi
dasar dari project target. Untuk memulai membuat project baru, device target,. pada contoh ini digunakan level Apl 3, denlan
klik button Finish. Berikut ditampilkan window konfitlrrr,rsi projt'r:t lirrg()l rx'rilrgk.rt Andr,id versi 1.5 meskipun demikian teiap
162 -l)entrof{rantan Srtt;trl l'ltrrttt'Mt'tt,ll:tttt,rk.rtr iil)h Arrrh' r'l rl.rtr ll l I rrrr'Attrltrtttl llAll / l\olr,r I l),r,,,rr AtrIk,r,.r Arrrlrorrl 163
dapat dijalankan pada Android versi diatasnya berbeda. sebagai parameter context instance Android, tiap context
J. Ubah file haloandroid. 3 ava yang ada di dalam package com. akan di-hand/e oleh sistem. Sistem Android juga menyediakan
contoh.hafoandroid menjadi seperti berikut (tanpa nomor beberapa service lainnya, seperti sharing resource, akses ke
baris): database dan fungsi preferensi.
- Bagian this, pada baris ke-11 sebagai referensi context pada
01 package com. contoh . haloandroid,' TextView karena class Activi-ty merupakan turunan dari
02 import android. app.ActivltY; context dan juga class Hal-oAndroid merupakan subclass
03 i-mport android. os . Bundle; dari Activit.y yang juga merupakan bagian dari context.
04 import android. widget. TextVlew; - setText pada baris ke-12 merupakan pendefinisian isi konten
dari TextView.
05 public class Hal-oAndroid extends Activlty {
- Method setContentView (pada baris ke-13) berfungsi
06 /** Activity yang dipanggil pertama kal-i */ menampilkan konten teks pada activity Ul. Jika method ini tidak
07 GOverride digunakan maka teks tidak akan tampak pada Ul yang hanya
menampilkan layar kosong.
OB pub11c void onCreate (Bundl-e savedlnstanceState) {
4. Berikutnya untuk menjalankan aplikasi pada Emulator AVD atau
09 super. onCreate (savedlnstanceState),' + Run As -+ Android Application
perangkat Android, klik menu Run
10 setContentView (R. laYout.main) ; atau dapat pula menggunakan tombol shortcut Ctrl + F7 / (Cambar
1i TextView tv : new TextView(this); 7.3).
fungsi drawing object TextView pada element layout Ul, lu.:14..:1rl.i ;e-...:(;!.tt'r{.ir!:1!.tr:r*laro:d rr_ f",-:,rr:!!it!tair.{i
yang dari contoh tersebut digunakan label teks. Object tersebut l.:i?r:lA.ine:r -lrnrir.!r fr:r!i ) .?:*!i{td:i,1i1tii.dE:!:._,$:ti:da-:lid:rra.1
164 Pemrograman Smart Phorrc M|rrgl.lrrr,rk,rrr lil )x Ailrhrrrrlrl,ur ll,rr krn11 Arrrlroid t(At / I'to1t,r I I),r,,,u A1rlrk,r.,r ArrrlrorrI 165
5. Setelah instalasi berhasil, main Activity aplikasi HaloAndroid otomatis Edla*cionfu: &fxdt
berjalan. Dengan tampilan Ul, aplikasi ditunjukkan pada Cambar
7.5a dan menu aplikasi HaloAndroid akan tampak pada main menu
Aplikasi yang ditunjukkan pada Gambar 7.5b.
l&&*c'hie!grelr
@a*er*rer
Hr,rparc***r.
ffirrar*t-trert
fficrd+,*'
-rurere-.
$*w
i:l: ;,
M@, re:rr PU
07 <TextView
08 android:layout_width=,,fi1l_parent,,
09 android:layout_height:,,wrap_content,,
I0 android:text:,,0strj.ng,/hel1o,,
II />
|? </Linearl ayorrt)
166 Pemrograman Smart Phone Mettgl4tttt,rk,trr lil)X Alrltutrl rl'rn ll,rt krrrli Artdroid llAlt / llolcr:l D;rr,;rr Aphk,r..r Anriorrl
167
Dari atribut xml-ns: android (baris ke-2) kedua merupakan deklarasi baris kode.yang terah ditambahkan. Berikut ditunjukkan
tampiran
namespace XML yang menjadi definisi acuan common atribut. Atribut ini source lengkapnya:
wajib dimasukkan pada tag terluar tiap layout Android. 01 package com.contoh.haloandroid,.
Atributandroid: Iayout height dan android: layout width 02 import andro j_d. app.Actlvit.y;
untuk mendefinisikan ukuran!anjang dan lebar layar yang diperlukan, value
fill_parent berfungsi menerapkan mode layar penuh (ful/screen). 03 lmport androj_d.os.Bund.l-e;
04 / / import android. widgret . TextView,.
Atribut android: text (baris ke-l0) mendefinisikan teks dari TextView
yang akan terlihat oleh user. Dari source tersebut secara default digunakan 05 public cl_ass HaloAndroid extends Act.lvity
{
parser. string resource, ditandai karakter "@" mengacu pada file strings . 06 /** akan dipanggil saat activity pertama kali
xm1 (terletak pada direktori / res / val-ue/) berfungsi sebagai localization. berjalan */
Atau dapat pula didefinisikan string resource langsung melalui layout file
main. xmI, contohnya: 0"7 @Override
08 public void onCreate (Bundle savedlnstancestate)
android:text:"Halor Android. Ini adal-ah strinq dari {
09 super . onCreate ( savedlnstanceState
Iayout main.xml" ),.
10 setContentView (R. layout. main) ,.
File strings . xml sebagai tempat penyimpanan seluruh data text string
11 //TextView tv : new TextView(this),.
Ul Aplikasi, pada project HaloAndroid tersebut terdapat dua variabel string, t2 / /tv. setText (..Ha1o. . . Inl program pertama
yaitu app name (baris ke4) dengan value string tersebut menyesuaikan dari saya!"),-
application name saat membuat project baru, sedangkan pada string hello l3
akan dilakukan perubahan nilai string menjadi seperti berikut: ,/,/setContentView (tv) ;
L4 )
1 <?xml version:"I.0" encoding:"utf-8"?> i5 )
2 (resources)
3 <str j-ng name:"he11o")Ha1o, saya memodifj.kasi I)ari kode tersebut, method setContentView
tligunakan karena terah tergantika" ;u-n;;naun O
(di baris ke_.t3) tidak
menggunakan string resource! </string> ieteie"ril"ro""r."
l":: I . layout - ma i.n (b"aris ke-]0) ya,ifrurrprtrn rayout
4 <string name:"app name")Ha1o, Androidl</string> I file clasi-autogenerare
lrasil dari kompilasi dari referens i t,te' r"Z
5 <,/resources> l ) tayour,/main . xml.
S.telah modifikasi selesai, Iakukan proses kompirasi,
rrraka menampitkan Ut seperti padi
cambai ?:/;;;;";.;1.
"'"'",
seterah Activity berjaran
Pada data string yang ada di dalam body tag dengan nama string hell-o
digunakan sebagai data acuan pada main layout (file main. xm]) di dalam
object TextView pada element layout Ul yang merupakan bagian dari tag ffiGl z:oearr,r ffi@ a:rsam
LinearLayout. Tag Linearlayout berfungsi sebagai pengatur
seluruh child element agar susunannya dapat diurutkan secara vertikal atau
horizontal. Untuk tag app name sebagai title aplikasi dari yang dibuat
(terlihat di bagian teratas tiap aplikasi). (a) b)
Untuk menguji penggunaan layout XML dilakukan beberapa tahap berikut:
(iambar 7'7 Tampiran
ur menggunakan nirai string dari (a) main . xml
1. Pada file class HaloAndroid. j ava, ubah source tersebut menjadi dan (b) strings .
kondisi sebelumnya atau berikan karakter argumen (tanda "//") pada xm.l
168 - Pemrogratttatt Smarl ['ltont' Mt'ttlifitrrr,rk,trr ',1 )h Atrrlt,,r,l rl,rrr ll.rr l ,rr, Arrrlrrrirl liAlt / lIr4cr:t [);r,,;rr A1rIk,r..r Arrrlrrrrrl
169
w i dt h= "wrap_con t e n t. "
Dari kedua gambar di atas, terlihat Ul hasil modifikasi string menghasilkan
tampilan lay-out yang tr*a, brik main . xml atau strings ' xml
karena 08 android: layout-_height="wrap_content"
l;;;;;, ;"ns6r"ikr" definisi string'. J ika memprogram langsung lavou.t andro j-d : 1 ayout_marginLe f t :" I )px"
Uf-r"gl1iJ.[ Xi" perbedaan, dapat disimpulkan penerapan layout XML 09 android: layout_marginBottom:"15px" /)
*"iufufrn cara yang lebih mudah untuk mengonstruksi Ul'
10 <Button android'16:"@+id/button" android:layout
width:"wrap_content "
WaktuSaatlni - Aplikasi penerapan Widget Android I1 android: Iayout_height="wrap_content"
android : I ayout_ma rglnLe ft --" l)px"
Seperti yang telah dijelaskan pada . contoh pertama -.di.. atas'.. berikutnya
aitir"irdi""puta contof, apli[asi. _berbasis layout XML. yaitu Aplikasi 12 androj-d: layout_marglnBottom:"15px"
WakiuSaattni yang merupakan modifikasi dari buku "Unlocking Android-A .rnd::oi-d:text="Cek Waktu" />
widget l3 </Lj-nearLayout)
il;ilp;;,r CuiAE' yang ditulis Abelson W.F mengimplementasikan
TexLView dan
Android dibuat *"ngi,inut [ayout XML, diantaranya
"n
e"li".- Aplikasi iniiienerapkan pula class android. view. Menu dan
Penjelasan:
android.view.subMenuuntukmembuatmenudansub-menuyanS
diimplementasikan dalam kode aplikasi' - Di baris ke-7, seperti pada contoh pertama yang menampilkan
Beri kut proses PembuatannYa:
widget TextView di Layout XML dan nilai string mengacu
pada G+id/output. Dalam Resource ini tidak
l.BuatprojectbaruAndroiddenganrinciansebagaiberikut: menggunakan parser string resource strings. xml karena
a. Nama Project WaktuSaatlni string didefinisikan langsung dari kode aplikasi yang ditLrnjLrkkan
pada bagian source.
b. Application Name Waktu Saat lni?
c. Package name com.contoh.waktusekaran g - Pada kode baris ke-'I0, berfungsi untuk membuat widget Bufton
dengan value text button berupa string yang didefinisikan daianr
d. Create ActivitY sekarang
file main . xml- (baris ke-12).
e. minimum SDK 3
f. Build Target AVD Android 1.5 hingga Android 2-2
i. Modifikasikan file AndroidManifest.xmt- pada main root pi-oject
WaktuSaatlni meniadi seperti berikut:
2. main.xml yang terdapat pada dkektori /
Ubah kode layout XML I <?xml version="7.0" encoding:"rtLf-8"?>
res/Iayout/main-xml menjadi seperti di baw.ah ini' Nomor
1r
ti.prL di bagian paling-kiri tiap baris menandakan keterangan ' <manifest xmlns:android:"http:,/,/schemas.androicl.
V"r.,g
;;;", uiut tiap biris yangiidak perlu ditulis, menandakan jika di
program melampaui ' 'n/ apk/ res /android"
t^1u Lrtit tidak ada nomor-maka panjang kode
baris kode berikutnya. rI package="com.example.waktusekararrg"
batas halaman dan berlaku seterusnya untuk
,t.l android:versionCode:"1" android:versionName="1.0">
01 <?xml version:"1. 0" encodi-ng:""1;-8"?>
l'r <application androi-d:icon:"Gdrawable/icon"
02 <Linearlayout xmlns : android:"http: //schemas'
android. com/ aPk/ res /android" , (, android:1abe1:"Gstrlng/app_name"
03 android: orlentati-on="verticaf" t) t androi.d:theme="Gandroid:style/Theme.Light">
O4 android: layout-width:"fill-parent" <acrrvirv
05 android: layout-helght:"fill-parent" ,;, l::::i:,ill];:;;:::iili;", name,,,
i rit en1 -filt-er>
07 <TextView android.: id:"G+id,/output" androjd: J ayout-
<
() L2 import java.utll.Date;
ol3
() I 4 lmport com. contoh . waktusekaranq. R,.
ol5
tt I 6 pub1lc class sekarang extends Activity
{
Gambar 7.8 Menu Theme Layout
0l'/ /** Called when the activity is first created. */
4. Ubah kode layout XML strlngs.xml untuk fungsi /ocalization ttlS pri-vate static final_ i-nt MENU eUIT : Menu.FIRST +
yang terdapat pada direktori /res/values/ menjadi seperti t;
berikut ini:
ol() private stat.ic fi.naf i-nt MENU FORMAT : Menu.FIRST
1 <?xmI version:"1.0" encoding:"uLf-8"?> | ') -
PemrOgramatt Smart Phon0 M|ttllgtttt,tk,ttt lil )h Atrrltiltrl rl.rtt ll,rcktttll Anrlrttttl l'tr4cr.l l)ir:,,rr Aphk,t,,r ArrrlrrrrrI 173
172
A25 048 subMenu. setcroupcheckable {MENU_EORI"IAT,
A26 Goverride true, true);
O21 public void oncreate (Jinat Bundle savedlnstancestate ) 049 menu.add(0, sekarang. MENU_OUIT, 1, R.string.
{ quit) . serrcon (
174 - Pemrograman Smart Phortc Mlrrlillurr,l[,s11 lll )h Aultrrtrlrl.rtr ll,rr krrryi Attrlrotrl lii\lJ / l'tolr,r I l),r,,,rr Aphk,r,,r Arrrhrrrrl 175
0-14 switch (item.getItemIdO ) { item) ;
075 case GMT: 101 )
OnClickListener () {
v) {
082 outpuL. setText ( new Berikut penjelasan dari kode class Sekarang. j ava:
Date () .toGMTStrinSO);
- Pada baris ke-3 hingga ke-1 1 dapat dijelaskan bahwa class
083 ) diimplementasikan class android. view. Menu berfungsi
084 )); untuk membuat menu aplikasi (tampak di bagian bawah apliklsi
pada Cambar 7.ga). Class android. vlew . Menultem
085 return true; sebagai interface untuk fungsi eksekusi suatu button dan
086 ) class android. vi-ew . View . OnCl- i ckI,i_ s tener
087 switch (item.getItemIdO ) { sebagai fungsi interface callbackjika suatu item (dalam hal ini
adalah button) diklik, akan menjalankan method out_put.
088 CaSe DEFAULT: setText O yang terdapat pada baris ke 34,69, 82, din 96.
089 j-f (1tem. isChecked ( ) ) Class-class tersebut tidak perlu dimasukkan manual karena
090 item. setChecked (false) ; otomatis d i masukkan oleh I D E Ecl i pse saat kita mengi m plementasi
suatu method.
091 else
- Class I ava . util . Date berfungsi untuk menampilkan data
092 item. setChecked (true) ; tanggal dan jam secara realtime sesaat setelah method new
093 Date O dipanggildan ditampikan menggunakan format default
String, CMT dan Locale.
094 Lhis.button. setOnClickListener (new
OnCfickListener (
- Pada baris 48 hingga 49, merupakan fungsi untuk membuat sub_
) { menu bertipe floating (yaitu LOCALE, GMT, dan DEEAULT)
095 public void onClick (final- View dan merupakan bagian dari menu t.imeformat, dengan value
v){ string resource yaitu Format Waktu. Display Ul dari s.-ub_menu
tersebut ditunjukkan di cambar 7.9b saat aplikasi berjalan di
096 output setText (new emulator.
DateO.toStrlnSO );
091 )
098 ));
099 )
176 Pemrograman Sntarl ['ltrtttc Mt'ttli11rtt,rk,rtr l,lll" Atrrlt,rrlIl,rrlllrr l'rrr1'Attrlrtttfl llAll / I'rrrjr,r I l),r,,,rr AlrLk,r.,r Arrrh,rrrl
177
,nrmlJ* ::il Fl,l irtffit €r r'3r F\l (baris ke-71 ,82, dan 94) yaitu mode LOCALE (Cambar 7.lOa),
GMT (Cambar 7.1Ob), atau DEEAULT (Gambar Z.9a).
- Pada baris ke 103, terdapat method finishO untuk fungsi
menutup Activity melalui button MENU_QUIT. Karena pada
aplikasi ini hanya terdapat 1 Activity makl-secara otomatis akan
menutup apl ikasi secara keseluruhan.
6. Jika project berhasi I terkompilasi dan telah ter-i nstal I pada AVD maka
akan tampak display layout Ul seperti berikut:
1-:
{$ iii li,
Gambar 7 .9 (a) Tanpilan Aplikasi WaktuSaatlni dan menu, (b) sub menu floating t ime f o rma t (a)
178 Pentrograman Smart ['hont' Mt'tt,:litttr,tli,rtr ',lth Alrltrrrrl 'l.rrr ll,rr lttrll /\tltltottl llAlj / l'rnllr I l),r.,,rr Alrhk,r,.r ArrrLnrrl 179
Location Service dan Google
Maps
Pemrograntan Srlarl l,lrorro Mtrrllllrrrr.rk,rlr )lt Atrrlttrrl ,l,rrr ll,rr l,tttl, Atttlttttri llAlltl Aphk;r,r lx.n{,rtrl).ur Al'l (iooplr M,rI', 183
182
"l
13 public cl-ass Caril,okasi extends Activity { 34 Al-ertDialog ad : adb.createO;
t4 /** Method ini akan dlpanggil saat pertama kali 35 ad. setMessage ("Aplikasi Gagal
Activity tercipta *,/
Mengakses");
15 GOverride JO ad. show O ,-
16 public void onCreate (Bundle icicle) {
3'7 )
17 super. onCreate (icicle) ; 38 )
18 setcontentView (R. layout.main) ; 3e |);
t9 final- Al-ertDialog.Builder adb : new AlertDialog. 40 )
Builder (this) ; 47)
20 final- EditText addressfield: (EditText)
findViewByld (R. id. address) ; Beberapa penjelasan dari class carif okasi . j ava:
21_ final Button button : (Button) findViewByld(R. - Pada. baris ke-6, package android. app . AtertDialog digunakan
id. l-aunchmap) ; untuk menampilkan Alert message (baris ke-34) saar intenitidik dapat
22 button.setOnClicklistener(new Button. mengakses event OnCl- i ckLi s tener.
) --
t t.)ill.-;rri;Ilc
r
l I rrnt:r+ ] i'*t-[#i
W
Tabel 8.1 Contoh URI dan Acti1n lntent yang didukung Android (Abelson W.E et. al. 2009)
Tioe lnformasi Content Provider Format data URI Tioe Action lntent
,
I Melihat daftar com. android. content: // fntent.ACTION_
T:_.1
;I
**-J*-**
I U!1;'l3y kontak contact contacts/people VIEW
I
ta* lolrri
I la+:ut I *d{5f ca I Mencari lokasi
com. google .
qeo:0, 0?q:11"1irrt Intent. ACTION_
L------J out,'t melalui Coogle
android. maps
ang*S Ieman+Yogya VIEW
add:rez c karta
Akses ke browser
com. android. http : /,/qoogle . Intent . ACTION_
browser co. id VIEW
Akses Pencarian com. androi,d. Tanpa URI hanya Intent.ACTION_
(looele Search browser pfain text WEB SEARCH
irSriral Tokasi dari database location service bagian dari Coogle android:text="Masukkan lokasi yang dlcari,
services. "rr" l,,t rll(rt :" />
project ini adalah hasil modifikasi dari aplikasi yang diperoleh dari buku < Texl-Vi ew anciro j-d' 16: " + id/ i nput-_1abel2 "
;uiioif.ing Android - A Developer's cuide" ditulis oleh Abelson W.F. @
188 , Pemrograman Smart Phone Metttrlgututkixt lil)x Arrrhorrl rl,rrr ll,rr krrlli Arrdroid llAll ll AIhk,r',r l]r,n(,r,rl),rn Al'l (irrrr]4h, M,ril',
android : layout_marginBottom:" 5px" <TextVj-ew androld. i6:"@+id/output,,
android : 1ayout_marginToP: I)Px" " andro id : layout_width:"wrap_content,,
android:text:"nama kota/daerah/jafan atau android: layout_height:"wrap content,,
dal-am bentuk koordinat/ contoh: -7.44L,110.241)" /> android : layout_marginLe f t :" 10px"
<EditText android. 16:,,@+id / inpuL,, android: layout_marginBottom:,, 75px,, / )
android : layout_w j-dth:"fi1 l_parent " < /LinearLayout.>
192 Pemrograman Smart Phone Meng,{utt;tkart lil)K Atrrlrrrrrlrl,rrr ll,rt ktttpl Attdroid ItAll 8 Apltka:;t p(]ncrirl)ln Al'l (ioogk, M,r1r,, 193
import j awa. util. List; i),
import con. contoh. geocode. R; )
// class pelformceocode untuk proses konversi
public class GeocodeApp extends Activity { Geocode
private EditText input; private String prosesceocode (finaI String
private Textvieer outpui, textlnput, final boolean isAddr) {
private CheckBox isAddress; String hasil = 'Konversi geocode - - +
private Button button; tsextlnput + 'gagal"r //definisikan result stlirlgr
if (this.input != null) {
Goverride Geocoder geocoder = nes
public woid oncreaLe (Jina] Bundle Geocode!(this), //instansiasikan ceocode!
savedlnstancestate) { if (isAddr) (
supex . oncxeate ( savedlnstancesta te ) ; Lty I //baca input lokasi,
this . setcontentview ( R. Iayout. main ) ; nenggunakan method getEromlocationName
// masukan lokasi dari TextBox List<Address> addresses =
this.input: (EdilText) findviewByIcllR. geocoder. getFronLocationName {text Input, 1);
id.input), if (acldresses I= nu1]) {
// keluaran hasil geocode. hasil = addresses.get(0),
this. output = (Textview) JindviewByld (R. tostring O;
id.output); I
this.button = (Button) JindviewByld(R. I catch (IoException e) {
id.geocode button) i Log.e("ceocode", nEr!or,,, e);
this. isAddress = (checkBox) ]
findvie{ById R. id. checkbox_addres s ) ;
( } else {
// setelah di-klik, jalankan proses // saat checkbox isAddr fa1se, jalankan
Geocode method getFromLocation
this.butlon. selonclicklistene. (new try {
Onc]icklrstener O I / / baca masukan fongitude-latitude dengan
public void onclick(final Viei{ v) { memparsing text dari tanda penisah ",,,
oulput. Stringl] coords = textlnput.
setText (prosesceocode (input. getText ( ) .tostrinq () . split(",");
isAddr:ess.ischeckedo)); if ((coords != null) &&
I (coords.lenqth == 2)) {
154 - Pemrograman Smari Phone Mcttgl1ttttakittt lil)K Atttltrrtrl rl,rtt ll,rr ktrr11 Atttlrotd ltAlJ fl Apltkast penr!r,rl)nr Al'l (irxrpllr,M,rgr,, 195
List<Address> bentuk data unformatted text. Untuk lebih jelasnya pada Gambar 8.4
addresses : geocoder.getFromlocation (Double. ditunjukkan diagram sequence Aplikasi ini.
parseDoubl-e (coords [0] ) , Double
tu]ltub Grccoddpp
j
irda:.a,:;::1 :.r,
)
return has1l;
6JLPU: -ii'iI'JrL tt
]
Gambar 8.4 Diagram sequence aplikasi CzntohGeocode
Penjelasan class GeocodeApp . j ava: Setelah aplikasi terkompilasi dan diunggah ke emulator AVD atau
Dari class ini tampak saat instantiate Ceocoder menggunakan method perangkat android, akan tampak Ul Geocode luaran dari method
Geocoder geocoder : new Geocoder (this) sistemmenganggap getEroml,ocationName dan getEroml,ocation setelah user
user membuat Ceocoder yang dikonstruksikan menggunakan Context . memasukkan nama lokasi seperti yang ditunjukkan pada Gambar 8.5.
Saat user telah memasukkan nama lokasi dari textbox EdltText input
dengan memberikan centang pada check-box isAddress (dengan nilai
boolean True), selanjutnya akan diproses oleh geocoder menggunakan
rnethod geocoder. getFromlocaLionName (textf nput, 1)
dengan l-iasil keluarannya berupaString hasil yaitu nilai koordinat
longitude, latitude yang akan ditampilkan pada TextView output.
Method tersebut hanya difungsikan untuk menampilkan keluaran 'l lokasi
yang didefinisikan nilai maxResu-l-ts : 1 (nilai yang ditulis tebal dan
digarisbawahi).
Sedangkan pada proses geocoder sebaliknya, yaitu dari masukan longitude,
latitude dengan menentukan boolean isAddress bernilai Fa1se, yang
selanjutnya akan menjalankan method geocoder . getFroml,ocation
dan memasukkannya ke List Array Address untuk ditampilkan pada
TextView dengan lD outpuL label pendefinisian nama lokasi dalam
196 Pemrograman Smart Phone Menggunakan S[)K Arrrlrorrl rl,rrr ll,rt:kttrg Arrdrord llAIl B Anltka:;t Don(.r;rtlnn Al'l (iorruh, M,rtr:, 197
i.:'! !.';i .i :;iii:r'i:l I r: .rjil iiji
i,
t
', I
li i - i. itrir-1r:. 1 I 11. t ,rIll ;' jtr
1".",rtl
v I iliili'fJrirfl i
1***-*:ill
. t'dq.r",rrs.i
," illl.r-r1
. .. r..... ... 'l
198 - Pemrograman Smart Phone Menggunakan SDX Artdrotrl rlarr llar:krrrg Android llAltli Apllka:;r lxll(!r,ll),ut Al,l (iooglr M,rp,,
199
GambarS.TsistenkonstetasiGpSyangmeribatkan30saterit(sumberKapranE.D,Hegafiy,c',
J., 2006)
Gambar 8.8 llustrasi Pengukuran lokasioleh satelit-satelit GPS (Sumber: Kaplan E.0., Hegany, C.,
a*rrn&
,d_:-
lntormasi
Assistanc€
Server A-GPS
BTS B
Android dengan
Receive(A-GPS
\
-{.
I 1...1.,,..
t't''''tt' Gambar 8,10 Fungsi location prlvider pada Google Maps menggunakan koneksi GPS
l
Jika kita mengimplementasi tipe provider GPS PROVIDER
pada perangkat yang tidak mendukung CPS atau A-CPS maka
akan memberikan keluaran return error.
GPS
Gambar 8'9 Baqan sistem navigasiAssisted
Richton' R'' E'' 2010)
b. ProviderNtrTWORK PROVIDER, providerini jugamemberikan
(suiter Diuinic' G'' M, keluaran constant xring longitude dan latitude dengan presisi
'
yang lebih rendah (50 meter hingga 3 km). Tipe provider ini
menggunakan lokasi service dari jaringan BTS Seluler atau
Fungsi Geo-Lokasi pada Aplikasi Android HotSpot Wi-Fi.
package librari Android yaitu android ' Jika kedua jaringan ini dalam kondisi aktif, secara otomatis
Seiumlah c/ass di dalam geo sistem akan memilih salah satu yang memiliki keakurasian
i=j:";i";'ltrr*eii"U"s; ,1.[' s^eo-lokasi, yang dapat mengakses dari tertinggi. Pada mode jaringan operator koordinat diperoleh dari
p"ti"i%t rt"''bPS',A-GI'S' Hot Spot Wi-Fi atau
lokasi menggunakan 'koordinat informasi lD BTS seluler hasil request ke server MSC seluler,
longitude dan /atitude'
BTS operato, ,"trnlrtnlr"r?rn Jipuroleh kemudian informasi lD BTS yang diperoleh digunakan sebagai
;;tfi;; ;"ns ar("*'bltt'g" "iiatoid ' 1 ocation tersebut vaitu :
referensi request ke server Google service untuk mendapatkan
. Class LocationManager, menyediakan fungsi akses'ke location pengembalian nilai koordinat. Pada koneksi menggunakan
longitude' latitude' dan
provider y"ng ,L'n'ie;;l# posisi
-prr"m koordinat
location
WiFi HotSpot, lokasi koordinat perangkat diketahui langsung
class ini terdapat 2 tipe dari request ke server Coogle service yang menyimpan
p"r"ieLiii"Jr"ii
altitudeorrt
provider'. database koordinat HotSpot tersebut. Jika pada database Coogle
belum tersedia database koordinat Wi-Fi tersebut maka akan
a.ProviderGPSPRoVlDERdeneankeluarankoordinatbertipe
hanya tlilirrrr'rkan sistem
constant titr"f p"a' GPS-PRo\irDER
ntcnrl rcrik.rtr kolrr.rr:rn error.
lJ)h Atrrltorrl rl'ril ll'rt'kttlg Androtd ItAlS 8 Allhk,r:,r lx.nr,r,rl),rtr Al'l (1r111pr11. 16,t;,' 203
202 Pemrograman Smart Phonrl Mttttggttttrtkntr
Konfigurasi Geo-Location
l. Emulator AVD
Dari penjelasan emulasi geo-location di atas, posisi koordinat diperoleh dari
berbagai sumber baik hardware cps internar'aiau emulasi cpa ;;;ggunakan
tool ddms atau melalui emulator console dari akses telnet (pajic'ommand
prompt).
Lsc.atim{ql!"ols
!,I*rd lo* | ${- |
f xomg
i. $€x&lesma,
lin$*Unlt
La&i.lde
,tu, i"i"nl. Sehingga data y-ang tersimpan di array 0 tidak selalu berisikan sclanjutnya telnet. tersebut akan terhubung dengan console dari emulator
nama jalan atau kecamatan. AVD sehingga kita dapat menjalankan periitah-p'erintah padi lingkungan
. Class Geocoder, fungsi class ini telah dijelaskan pada contoh , onsole yang telah dijelaskan pada bab sebelumnya.
geocoder.
t.Jrtuk menjalankan emulasi geo-location setelah emulator console
. Class GpsSattellite, menyediakan fungsi pembacaan state
r l,rpat menggunakan perintah:
berjalan,
r"irrnfun satelit GPS yang terhubung dengan receiver,. beberapa
iniorriri yang dapat diakses diantaranya sudut Azimuth, sudut elevasi, ,r, ,o fix <longitude> <f atitude>
irri" SfVn'fSilna/-to-wo;s e Ratio), data almanac dari tiap sate/it' Class Nil.ri longitude dan latitude tersebut menggunakan separator angka desimal
ini didukung untuk level APt 3 ke atas (OS Android versi 1.5 atau lrcrupa tanda titik (standar US).
Cupcake).
\t'lt'l.rh emulator console terhubung dengan emulator Android, masukkan
t rttrttrtand geo fix yang diikuti dengan nilai koordinat,
misalnfa [ongitude
I 10.3837 dan latitude : -7.76-45!26a jika comman'd tersebut
dire"sponi
,,l.lr p.r..gkat atau emulator AVD akan memberikan keluaran oK.-
204 Pemrograman smart Phonr-. Mtlrrggrtttakarr lil)K Arrrlrorrl rl,rrr ll,rr.krng Android
ItAl{ tl Agrhk;t.,r lx,n(,t,rlr,lt Al,l (iouglr.M,r1r., 205
geo fix -1 .7 6454264 1L0 ' 3937 RegistrasiAPl Map
Karena dalam pengimplementasian aplikasi ini diterapkan API Map untuk
OK mengakses Coogle Maps yang bersifat proprietary maka diperlukan registrasi
untuk mendapatkan nomor unik API key yaitu nomor MD5 fingerprint sebagai
PadaversisDKAndroidyangdigunakanpadabukuiniuntukfungsiemulasike sertifikasi aplikasi yang mengakses Coogle Services. Nomor API key terdiri
terhubung
g""l.f.rliierkadang *irin"*J*iliki bug, vaitu tidak dapat dari dua tipe sertifikasi yaitu sertifikat default debug dan sertifikat production.
emulator saat menS-ufaut" tolasi nvo itau Emulator gagal mengaktifkan
Untuk mengetahui nomor MD5 fingerprint, dengan menggunakan
digunakan
CPS saat aplikasi ,"-ffi",t koordinat' Di sarankan
sebaiknya
Debug Certificate yang disediakan dalam paket SDK Android, berupa file
command geo fix n]"tlLi t.rnet karena cara ini sangat iarang menemui
debug.keystore dan tool MD5 Fingerprint generator keyt.ool,
permasalahan. tool ini merupakan aplikasi conso/e based yang merupakan bagian dari
paket JDK (tersimpan dalam direktori C: \Program Eil-es\.rava\
jdk1. 6.0_22\bin).
ll. Perangkat Android
Berikut ditampilkan perintah lengkap untuk mendapatkan MD5 Fingerprint
PadaperangkatAndroiddiperlukankonfigurasiuntukmengaktifkanfungsi
jaringan wireless dan hasil keluarannya pada command promptwindows 7:
L"":rI..ti"i- Untuk;;";k;at;ng hanla mendukung tanpa.perangkat keras
(baik melalui wi-Fi irrT"grn ciu/:c-operator)
"t-r, gs -+ Loc.ation and Security
6il';;Gg;n"trn t onfiguirtip"a, menu Seitin
Networks, disertai tap tombol Agree
-+ berikan centang *"n',i Uiu Wireless lkan data lokasi
C:\Users\user_name\.android>keytool -list -keystore
(permission rgar ur"r";l*i"'Oof"hfan Coogle me,nsu1gy debug.keystore -storepass android -keypass android
'lioin.,ioug. "Sedangkan- p[r^ngkrt yang *eiitiki f itir CPS dapat diberikan
CpS sate//ites yang tampak pada Gambar
8'13a dan
centang pada menu ui"
8.1 3b. Keystore type: JKS
Keystore provider: SUN
(a)
(b) Nilai Iuaran keytool adalah nomor MD5 fingerprint, yaitu B1:E0:C1
:3B:BE:85:CB:DC:AB:A6:AC:C3:21:DB:89:BB, nomor ini
rligunakan saat proses registrasi pada website Android developer pada Iink
Gambar8.l3(a)menulocationseruicenenggunakanjaringanwielessdanGPS(b)Menu
l.lRL: http://code.google.comlandroidlmaps-api-signup.hrml (Cambar 8.14b)
Permission
rli dalam teks box My certificates's MD5.
provider maupun gps provider,
Kedua tipe provider tersebut baik network
daDat aktif secara kedua provider tersebut memiliki
b"r;;;.-i"trpi,
keakurasian Yang berbeda.
pemrogramanSmartphoneMr.rrggrrrrirkarr iillhArrlrorrl rl,r||ll,rr.krttl1 Atttlrottl ltAlttt Alrltk,r"r p|n|r,rlr,rrr Al 'l (ioolih'M,rlr" 207
206
"Professional Android Apprication Deveropment,
2nd Edition,, yang dituris
oleh Meier R. Datam p..oju.t ini &Jr;;'6;';r;;r,'""rrL1r,
.1 1: ri.". ft t
provider tersebut yang masing-masing "[an kedua
beke4'a secara mandiri dengan tingkat
yan g berbeda. Blri kut'.",
, ttflrltt.!rdtt!\rtsl
l:i:ll.r',"" ";i;; ;"*b;"l";;q
;J
"'fr
i uri t"r.
llr fiiif.ii'* *{E4t{
.'hii
t.y rr csqd h( r! 9ctrr cai.d rrti lsr cldfEnte fihe irgwnl Pada project ini menegunakan build
target Apl Google Maps karena
aplikasi ini mengimplementasikan;;.i;;";'ptMaps
a: : a::._ L ia :3:ra5: a?: &. lE:&(: l:: a I i:: , !:: !: I :! com . sooq f e .
tirn rs * uampb rni brM to qEt f@ trtrd sn you ey lo mrpFng ghry ? l9"I :., * ; I
Anorotct.
up
:,d i m a n a pac k ige te e b u t n u
Jrka suatu perangkat Android tidak mendukrnE pl.f.ueu
i
r-n- i i i I [ ;;;i^;;
API Map (bagian dari Apr coogre rurupsr ..,u[a
",
(- -r tlqlt.a:.i: - r j.e-_.XSVr.s
ra:r61cl I r:or:_*: dip. ar I 1_pr.6rt aprikasi ters?fri;id:k
dapat berjalan dengan nor'.nril nprilaii in1'jrg'"
.s!crlt I5:iu'- !.-i:t-':!tJ -t!.Dt'
iriat: 1dr.a,t!{/"t*H.a51.rx!!{;_{:s:t' ;ok1'(:.Lr},r:itl' android. location. Geocoder sebagai"fungri f.",i"urii ,;";;i#;Ll,
J*i
koo.rdinat.longitude dan latitudl
project sebelumnya.
;;","dffir"
frfliri ruili p;;
Gambar8.l5 PerolehannonorAPl keysetelahregistrasi MDS lingerprint(Sumber: http.://code.
goog le. com/a nd roid/maps ap i-sig n up htm l) 2' Modifikasikan fire AndroidManifesr. xml menjadi seperti berikut
ini:
r) I <?xml version:,,1.0,,
encoding=-r51_g,,?>
Project CekLokasi - lmplementasiAPl Google Maps dan tt.t ..rnanifest xmlns :android:,,http:,/,/schemas.android.
Geo-Location ' 'n/ apk/ res,/android,,
Project selanjutnya adalah aplikasi Cek Lokasi untuk menorapkan fitur Ceo- () i packagq:,,com. contoh. Ceklokasi,,>
location untuk memperoleh koordinat longitude rl.rrr l,r(ittr<lc tti<'rtggtrnakan t)4 <appJ.jcal ion
Network Provider dan CPS Provider. Projccl irri ,rrl.rl,rlr rrrrrrlili[,rsi rl.rri lruku
208 [,r'rlrgJlrartrarr Sttrarl l,lr6rr1 Mr,rr]:t:rrrr,rk,rrr ',1 )lt Arrrhrrrrl rl,rrr I l,rr krrrt, Arrrlrorrl llAll tJ Aplk,r,l lx'nlr,rp,lt Al ,l (ir)()t:k, M,rl),, ZOg
05 android : icon:" Gdrawable/ lcon") Pada permission ACCESS trINE LOCATION (baris ke-16)
06 (uses-library android: name="com' google' android' diperlukan agar dapat mengakses fungsi navigasi menggunakan
provider CPSatau A-CPS, sedangkan penggunaan permisson ACCESS
maPs"/> COARSE LOCATION diperlukan agar perangkat dapat menjalankan
01 <acti-vi-tY fungsi navigasi melalui network provider (dengan jaringan operator
08 androi-d : 1abeI=" G string/ aPP-name" atau Wi-Fi).
android: name:" . Ceklokasi") 3. Selanjutnya modifikasikan file Main. xml- yang terdapat pada
09 <intent-fifter> direktori /layout menjadi seperti berikut ini:
10 (action android: name:"andrord' intent' 01 <?xml version:"I"0" encodinq="uLf-8"?>
action.MAIN" /> 02 <Linearlayout
11 <categorY android: name:"android ' intent '
03 xml-ns : androld:"http: //schemas . android . com/ apk/
caLegory.LAUNCHER" /> res /android"
LL < intent-fifter>
/ ()4 android:orientation:"vertical"
13 < / activitY> 05 and.roid:Iayout_width:"fill_parent"
t4 </aPPlication> 06 android:layout height:"fill parent">
i5 <uses-Permission android:name="android' 01 <TextView
permi s s ion . INTERIiIET" /> 08 andro i-d . 14: " + id,/ network],ocat ionText "
@
opsionat or, n1[rgiifiiiar[a,auiung'oleh salah satu produk perangkat 'o andro id : l ayout_he i ght:"fif I_parent "
Android. f ungrl' p'"nd"[t"r"rlun ini I uga d iperl ukan untuk perl uasan
.' I android: enabled: " Lrtre"
(extend) dari Activity MapAct ivi ty'
INTERNET
Pada baris ke-16 terdapat penambahan perm.ission
menjalankan request 'j
Vrng Jip"tf ukan agar aptiLa* dapat. -!to::t
akan
android:apiKey:"0mlMptSb4uHprcIILHrfQR2CBT4RHn9N
dengan *.nuiup[Jo class Geocoder yang .
dimasukkan
cGPkVhUw" / >
dalam Array Addresses menggunakan method
geocoder'
' | /l,in,',rrI, \.,,,r1
getFromI,ocationName'
?11
210 Pemrogramattsntarll)lrrrtrt.Mr.trgllttttak;rrr,;IlKn||t||lllllrl.rtrll.rrkrrttiAtrrlrtlttl
Pada tag T extVi two r kLo ca t i onText
ew dengan referensi I D n e
rmport android . l-ocation . Location,.
digunakan untuk menampilkan string value longitude-latitude dan import android. Iocation. Locat j_onlj_stener,.
konversi Addresses dari pengimplementasian class Geocoder import android. location.LocationManager;
menggunakan provider wireless network, untuk TextView
gpslocat.ionText digunakan untuk menampilkan data string import androld. os. Bund1e;
Iongitude.latitude dan hasil konversi GeoCoder dari provider CPS. import andro j-d. widget . TextVj-ew;
Dari layout Main . xml, Ul terdapat tag com. gooqle . android. public cl_ass Ceklokasi extends MapAetivity
{
maps.MapView yang merupakan syarat untuk display MapView GOverride
sebagai penerapan API Coogle Maps dan pada pengimplementasian
MapView di setiap aplikasi diharuskan memasukkan nomor API key,
protected bool_ean isRouteDisplayedO
{
yang dapat diperoleh dengan meregistrasikan MD5 fingerprint yang return fa1se,.
telah dijelaskan sebelumnya. Tetapi, jika menggunakan nomor APlkey ]
dari pengembang lainnya, aplikasi tersebut sulit men-tile image dari
server Coogle Services, disebabkan APlkey tersebut sudah digunakan
pengembang lainnya. MapController mapControl l_er ;
Overlaylokas i pos itionOverlay,.
4. Selanjutnya, modifikasikan class Cekl,okas i . j ava yang tersimpan
dalam package com. contoh. ceklokasi menjadi sepefti berikut GOverride
ini: public void onCreate(BundLe savedfnstancestate)
package com. contoh. ceklokasi,' {
212 - Pemrograman Smarl Plrone Mr,rrggutraknrr i'l th Arrrhorrl rl,rrr llar.krrrg Android
ItAII tl Apllkirsr lxlncr,rl,,ln Al,l (ioogk, M,t1r.,
213
/ lalankan update request setiap 2 detik
/
dan perubahan posisi min lm
// tambahkan Over]aY],okasi
locationManager . requestLocat ionUpdates
posi:tionoverlay : new overlaylokasi () ;
(
menggunakan method
melalui private final Locationllstener focationlj-stener :
/ / la1ankan System Service
new Locatj-onl,istener() {
interface context publ1c void onlocationChanged (Location
String context : Context.LOCATION
locatlon) {
SERVICE;
updateNewNetlocation ( location ),'
l-ocationManager : (LocationManager)
l
getsystemservice ( context) ;
/ / guoakan location provider GPS
dan
public void onProviderDisabled (Stri-ng
wireless network provider)
String gpsprovider : LocationManager'GPS- t
updateNewNetI,ocation ( nu11 ) ;
PROVIDER;
Location gps locaLion : locationManager )
. getl,astKnownI,ocaLion
gpsprovi (
updat.eNewGpsLocation ( gps-location ); I
. getLastKnownlocation net'workp ( It
rovlder) ;
private void updateNewNetLocation (Location
updateNewNetLocation (net-Jocation) ; l,rr:ation) {
216 Pemrograman Smart Phonc Mt'ttl4gtttt,lk,ttt lil )K Arrrltorrlrl,rrr ll,rr:ktn11 Android ItAlt ti Agrhk,r,,r l)r,nr,,,tl),lr Al'l til,rHlr,M.rlr 217
addressString) ; longitude, !) ;
) StringBuilder sb : new
StringBuilder O;
private void updateNewGpsLocation (Location j-f (addresses. slze O > 0) {
location) { Address address =
String IatlongString; addresses.get (0) ;
TextView myl,ocationText ;
mylocationText : (TextView) findViewByld(R. for(inti:0,.i<
id.gpsLocationText) ; address. getMaxAddressLinelndex ( ),. i++)
String addressStrj-ng : "Tidak dj-temukan sb. append (address .
nama lokasi"; getAddressLi-ne (i) ) . append (.., .') ;
sb. append (address .
if (l-ocation != nul-1) { getLocalityO ) .append(.., ..) ;
// upOate koordinat l-okasi sb. append (address .
menggunakan gps provider getPostaf Code O ) .append(.., ..);
pos itionOverlay . sb. append (address .
setcpsLocat j-on ( locatlon ),' getcountryName O ) ;
double tat - location. getlatitude ( ) ; I
double lnq = location. addxessstring = sb.tostring0;
getlongitude0; ) catch (IoException e) {
latlongstring = \latitude:z + lat + )
" Longitude:" + Ing, ) else {
latlongstring = "Provider GPs tidak
double latitude = Iocation. rnenemukan koordinat,,;
getlatitude O , ]
doubte longitude = location. mylocationText. setText {.,posisi saat ini _
qetLongitude O; r;ps (biru):\n,,
+ tattongstring +..\n,, +
Geocodel gc = nei{ Geocoder (thi ddressstring);
Locale. getDe fault ( ) ); )
try { l
List<Address> addresses =
gc. ge!Fronlocation (latitude,
218 _ Pemrograman Smart Phorrr,Mtrrggrrrr,rk,rrr ',1 )h Arrrhrrrl rl,rtr ll,rr:ktttli Antlrottl llAlt 11 Al)lrk,r,,r l)r,nr,t,rlr,lr Al'l t,or,1,11, y,,,,
?19
Dari class Cekl,okas i dapat dijelaskan class ini digunakan Class overlay]-okasi akan difungsikan untuk membuat overlay
sebagai pengimplementasian API Coogle Maps sehingga pada ba.ru atau layer tambahan di atas layer tile image peta Mapview
Main Activity class Ceklokasi diharuskan menggunakan extend seh.ingga pada interface aplikasi seolah-olah gambir peta yang terlihat
dari MapActivity, juga harus mengimplementasikan method oleh user telah "ditandal" oleh aplikasi tersebut. Overlay ya"ng telah
isRouteDisplayed. Activity tersebut akan mengarahkan ke terbuat tersebut dapat dig.unakan sebagai bidang draiing d"engan
layout lD untuk penempatan tile image peta yang telah ditunjukkan menerapkan canvas (untuk menggambar garis, kurva, atlu kolak)
pada layout main XML di atas. Pada state OnCreate tersebut sebagai penanda untuk koordinat tertentu, ylng nilai posisi koordinat
diimplementasikan class MapControl-fer menggunakan method akan diperoleh dari Provider Wireless Network dan piovider CpS.
getcontroller O untuk meng-enable fungsi zooming dengan
memanggil method setZoom (2 0 ) dan pengaturan posisi tile
image. Base class Overlay digunakan untuk penambahan overlay
l:::_lEj.xll
yang ditampilkan pada layer teratas, yaitu dengan cara rnenciptakan te claie
instance dan ditambahkan pada List yang diperoleh menggunakan
method getOverlays O.
!'t6E€,tn ]n.! C61:.
i*
turu **rr ,aa*'e &
LOCATION SERVICE digunakan ,rlry,,,1
sebagai reguest instance
menggu nakan system service ge t S ys t emS e rv i ce melal u i i nterface
Context. LOCATION SERVICE. Karena suatu aplikasi tidak
l*dmr
r
,.r
-s,
ir';'q:,,, I
dapat diinstansiasikan seZara langsung c/ass LocationManager, Itlr<!3t lkLrrdrrl
class LocationManager menyediakan fungsi kontrol update ,*}{e . rglt .,.f'a*Ur. l. i i:.:i! l';'*r:rlr
lokasi.
l.rt'lidj-sd f .r itl: '
A,fFdS i st.bnc.tltd
Class CekLokasl diimplementasikan sebagai location service f"".&*o :
Hasil dari pengujian penulis menunjukkan nama lokasi yang diperoleh . r ' fir.Ltiir**an*ir{iir
q i1,t s!!1.dr$.r*d6{ftr'r.*ft nt*ir.6drs.iLrrdilqg}
antara kedua provider dapat berbeda karena tergantung dari ketepatan i-krrffi
. l
220 Pemrograman Smart l)honc Mr,ttggtttt,rk,rtr i'l lX Arrrltorrlrl,rtr ll,tckrttll Artrlrotd llAll fl Aphk;r.;r l)t'nrr.rlr,lr Al'l (,rxrglr,M,rp', 221
import android. location. location; @override
import com. google. android, maps . GeoPoint; public void draw(Canvas canvas, Mapview mapview,
impor! con. google . andr:oid. maps . Mapvie{, boolean shadow) {
import com, googfe . android, maps . overlay; Projection projection =
mapview. getProj ection ( ) ;
inport com. google , android. maps . Proj ection; if (shado, == false) {
// update lokasi nenggunakan network provider
pubtic class Ovellayl.okasi extends overlay { Dou}rle latitude = n€t locatlon.
// definisikan radius titik ctisplay koordinat getl.atitude () r'tE6;
private final int mRadius = 5; DoubLe J.ongitude = n€t tocation-
getaongitude O *1E5;
location net_Iocation; GeoPoint geoPointi
Location qps_location, qeoPoint = new
GeoPoint (latitucle. intvalue O , longitude.
public tocalion getNetlocation ) { ( intvalue0);
return net_locatio^i // konversikan nilai net location ke foflrat
pixel
public Location getcpslocation O { Point point = nev PoinEO,
return gps_Iocation; projection' toPixels (geoPoint, point);
)
public void setNetlocation (Location location) { RectE owal- = new RectF(point.x - mRadius,
this . net_location = location; point.y - mRadius,
) point.x + nRadj.us.
public void setcpsLocation (Location locatsion) { Point.y + hRadius);
this . g"s_location = focation;
1 / konliqurasi tipe paint
/
// Anda dapar menant,ahkan suatu fungsi yang akan Peint Paint = n6!r Peint(l;
aktif saat user nen-tap Paint. aetNlGB (250 t 255,7,55r;
// ritik tsb Paittt. aetlntir,Iiat (t!u€r;
Goverride p.int. 3€tFak€BotdT€xt (true) ,
public boolean onTap (GeoPoint point, Mapviev, Paint backPaint = ne{ Paint0;
napvie{) { backPain!. setARGB (175. 50, 50, s0),
relurn false; backpaint. setAntiAlias (true);
1 // Buat gamba. ma.ker
222 Pemroflrantan Snrarl l'lrorrl Mr,rrl:l:lrr,rh,rlr l,l )l\ ArrrLr,rrl rl,rrr Il,rr krrlli Artrirrtttl ItAll ti Agrlrk,r',r lr('rr,r,rlr,rr Al 'l (,r'r'1'h,M,pp', 223
canvas.drawOval (oval-, Paint) ,' )
getlatitude ( ) *1E5;
Doubl-e gpslongi-tude : gps_locati-on i
Pada class.ove r l ayLo ka s digunakan untuk fungsi overray, yang d i dalam
class tersebut terdapat method draw ( ) untuk drawlng overlay dariioordinat
getlongitude ( ) *1E6; yang diperoleh provider network dan cps. Class ini juga mendukung method
GeoPoint gpsGeoPoi-nt; callback OrrTap O untuk fungsi tapping pada suatj marke r.
gpsGeoPoint : new Pada class cek],okasi dan overJ-ayI,okasi- terdapat fungsi perkalian
GeoPolnt (qpslatitude . longitude dan latitude dari rocation yang bersatuan deraiatiengan nilai
lE6 atau'l x106:
intValue O, gpslongitude. lntValue O ) ;
Doub1e geolat = location.getlatitudeO * 186;
/ / konversj-kan nifai gps_location ke format Dorrble geoLng = location.getlongitudeO * 186;
pixel Perkal.ian tersebut diperlukan
.karena object ceopoint sebagai penyimpan
nilai koordinat latitude dan logitude menggunakan t^tu^i m,icro-degree
Point gpspoint : new Point ( ) ; (mikro-deraja0,
titik koordinat tersebut akan digunakan sebagai referirrsi
projection.toPixels (gpsGeoPoint, gpspoint),' MapView. Dengan demikian, titik koordinat yang terah di[eroieh clari
kedua provider (wireless network dan Gps) harus dikonversikan ke satuan
rnikro-derajat, dengan cara dikalikan nilai -Ix106.
RectF gpsoval : new RectF(gpspoint.x -
Pada cambar 8.17 ditunjukkan diagram sequence sebagai keseluruhan
rnRadius, gpspoint.y - mRadius,
l)roses apl ikasi CekLokasi.
gpspoint.x + mRadj-us,
gpspoint.y + mRadi-us) ;
224 Pemrograman Snrarl Phono Mottggttttakntl lil )K Arrrltorrl rl,rrr ll,rr:krrr11 Arldrgrrl Apltk,t',t grlnlr,rl),rr nl 'l 1 ,,,, M.r1r,
225
'1,h,
OnCreate
Gunakan
NEI'IUK PRO\IIDER,
226 Pemrograman Smart Phone Mcttl.lgtlturk,ttl lil tK Atrrltorrl rl,rrr ll;rr:krrrg Androttl liAll tl AlrIk,r,,r l)(,nr,t,tlr.rrr Al'l (,,r,1,1, M,t1r
?27
[..ryanan RSS (Really Simple Syndication) merupakan suatu sindikasi
informasi /eed dari suatu web service sehingga publik dapat lebih mudah
nremperoleh informasi terbaru yang terangkai dalam bentuk ringkasan dan
t.rnpa membuka website tersebut. Saat ini layanan RS,S feed sudah menjadi
st.rndar umum yang telah diterapkan banyak website diantaranya layanan
lrerita, forum, weather report (laporan cuaca), kurs, BitTorrent, dan socia/
trctworking. RSS diciptakan oleh Ramanathan V. Cuha saat masih bekerja di
Netscape tahun 1999, versi rilis pertama tersebut bernama RDF (Resource
I)ascription Framework) Site Summary. Kemudian pada rilis versi lanjutannya
rrronggunakan nama RSS versi 0.90 dan kini telah mencapai versi 2.0.
I),rta RSS adalah data text berformat XML dan yang masih dalam keluarga
Nl,rrkup Lang,uage, diantaranya HTML atau WML. Format XML banyak
tlrlcrapkan di sejumlah tipe data, seperti file dokumen, database atau RSS
lr.r'rl rli mana rlirta tcrsebtrt merupakan hasil request dari server.areb service.
XML telah cukup lama diimplementasi ke berbagai software aplikasi untuk setelah registrasi, akan dilakukan verifikasi di mana kita diminta membuka
PC, tablet, hingga perangkat mobile J2ME. email untuk mengaktivasi akun. selanjutnya kita akan menerima email dari
server berupa informasi nomor API key contohnya yang telah penulis buat
RSS feed dari awal hingga saat ini umumnya digunakan sebagai data feeder yaitu 1cfad9a4d0094747111701, API key ini digunakan saat proses requesr
pada browser web berbiiis PC (yang bersifat multi-platform) atau sebagai tool ke web service (Gambar 9.2a).
gadget pada os windows Yista/7 dan Mac os-X. Kini, setelah masuknya era
i.,o5il"'trrrt phone memungkinkan layanan RSS Feed diimplementasikan Untuk mengakses laporan cuaca, user tidak diharuskan melakukan proses
ke dalam aplikasi mobile sehingga memberikan pengalaman baru bagi user registrasi seperti pada registrasi API Key Android Map. Disebabkan layanan
yang akan semakin mempercepat dan mempermudah dalam mengakses web service tersebut mengijinkan dalam satu akun melakukan multi-request
informasi dari web service. APl sehingga dari 1 API Key dapat diakses oleh multi-user pada aplikasi
APK yang sudah didistribusikan. Tetapi, penulis sarankan daram proses
Bab ini akan memfokuskan bagaimana cara membangun suatu aplikasi pengembangan aplikasi, gunakan APt Key sendiri melalui proses registrasi
sebagai R55 Feeder dimulai dari tahap mem-parsing data XML berbasis java agar server web service tidak terlalu terbebani.
hingga cara membuat aplikasi Android sebagai R55 Feederyang diintegrasikan
dengan fungsi location Service.
*cc{Urut Actlrirfl,an . WOrl* $lsa[rer Ontlns,,tq*
$tu 1{ lll*Sxr sihr !*xn qr,t&m&&atixr*L!..{snr
RSS Feed lnformasi Cuaca 'ls, *l$!qd ($ni
firah t !i** * rl I tE!6.! !fu I IrBr I &r!ree,
Pada sub-bab ini akan dibahas cara memperoleh data R55 Feeddari suatu web llcx
service. Yaitu akan digunakan salah satu (weather report). Layanan ini dapat
{pl l;rt r[ acr(t. &fi i'tr&l.! &ft(rfl :!
diperoleh gratis, tetapi karena bersifat propietary sehingga dari web penyedia I,y"l. tdSlld{ffigallM l f*t
jaia tersebut harus melalui proses perijinan dari web service dengan registrasi Erl*** r'fid {ft:l* l,.It urra* .r'' &,F{ t{rr rr&,t !* !*6*f lltd rrit&: tJ{fl{irl y*! *{l *r}t,i *t*1 r
melalui akun email untuk memperoleh nomor API key. Data laporan cuaca I* ai*:ili.i lp,' rdr*c$r radt{s'*!: #afr,t{t &t t ,k ii*q*.
trrf!.
yang tersimpan pada server tersebut akan selalu di-update se_cara periodik
dan-data informasi dapat mudah ditampilkan dalam berbagai format luaran. ,:&tnri:!w,::llilSr.**mt ,.*s*grftr*xarE4.l.r.qrr:-:ilrd5*ti*;*Sil:l::ri1
Untuk membuat akun bukalah link URL: http:llworldweatheronline.coml ! lh* ,&te! l$r dl{r n0a rynrt. FlGsrr {&y ,tr!:t F{:tr tp.t {C} tlltl F i bqs*rr
register.aspx melalui browser (Gambar 9.1). (a)
t&& ;t*,ils!*
l*rfr*fr&**
l;;."-
,xiil*
!;ajl:ri:1,.nrrlii r':1r
ts,e&..*L&,.yserkt
tri *r.ar r.tl, f,,1 | ,.! ,a.mlr nla
.-'i-....-
lrr, r t- 6{;
'rF
!EJe*i&. rnnlst
(b)
(a) (b)
Gambar 9.2 (a) Notifikasi enail pada akun yang telah teraktivasi, (b) Hatanan Apl request
Gambar 9.1 (a) hataman form registrasi (b) infornasi notifikasi email (Sumber: http.l
generator
wo rl d we ath ero n Iin e. c o m )
API WorldWeatherOnline.com juga mendukung request informasi Pnoses Parsing Berkas XML
weather forecast (perkiraan cuaca) hingga 5 hari kedepan, dari kedua P"irsing adalah proses untuk merepresentasikan suatu berkas XML terstruktur
contoh di atas hanya menggunakan request weather forecast'l hari. (berbasis teks) menjadi data (berkas) string, kemudian data string tersebut
Yaitu pada bagian "&num of days:7" yang mendukung request rJigunakan untuk berbagaiaplikasi, dalam bab ini akan dibahas implementasi
hingga 5 hari kedepan dengan menggunakan request "&nurn_of_ khusus dalam aplikasi. Proses pembuatan aplikasi parser diawali dengan
days:5" dan untuk format data RSS lainnya ditentukan dari input rrrembuat aplikasi conso/e based berbasis java, menerapkan fungsi parsing
"f ormat:", diantaranya /sOrV, tab delimited, dan XML. XML untuk membaca data text R55 Feed dari web service.
Pada bagian terakhir API request harus disertakan Nomor API Key
232 Pemrograman Smart Phone Menglltrrr,rk,rtt l.il)K Arrrhorrl rl,rrr ll,rr kttrpi Attdrotd l3Alj 9 Aphk;r,r lllili I r,r'rl 233
Data RSS Feed dan Aplikasi Parser XML l7 <winddirl 6 Point>N< /wlnddlr 1 5point>
Untuk mem-parsing dokumen XML dapat digunakan berbagai metode 18 <precipMM> 6 . 3</precipMM>
diantaranya NanoXML, inyXML, kXML. Beberapa API Android telah tersedia 79 <humj-di ty>8 9< /humidi t y>
sejumlah parser, diantaranya SAX menggunakan class org.xml .sax 20 <vi s ibi 1 ity>1 1< /vl s ibil ity>
atau XmlPul-lParser atau parser DOM (Document Object Model),
menggunakan package j avax. parsers dan package org. w3c. dom. 2t <pre s sure>1021,< / pre s sure>
22 (cl-oudcover>10 0 <,/ c l- oudcover>
23 (/current_condition>
Pada sub-bab ini dibahas proses parsing document XML menggunakan parser
SAX yang juga akan diterapkan pada project RSSCuaca di bab 9, sedangkan 24 (weather)
untuk parser DOM akan dibahas pada project aplikasi RSS-USCS. Berikut 25 <date>20 1 0-1 1-30</date)
adalah contoh dokumen XML berupa data R55 Feed yang diperoleh dari
26 < tempMaxC> 8< / t empMaxC>
web service worldweatheronline.com (hasil request menggunakan browser
Firefox yang telah ditunjukkan sebelumnya, setelah registrasi dan diperoleh zt (tempMaxF> 4'7 < / tempMaxF)
API key) dengan nama file weather_data . xmf : 2B <tempMinC>3 <,/ t empMinC>
234 Pemrograman Srrt;rrl ['ltorrt Mlrtlllittrr,rk,rrr ',1 rlt AnrIlrrl rl,rrr ll,rr krnl: Artrlrortl IlAll () Aphkasr liSll I r,r,rl
235
45 <wi-ndspeedMi es>2 1< / windspeedMi 1e s >
l- 1l <,/weather>
41 <wi ndspeedKmph> 2 3 < / wi ndspe edKmph> '72 </daLa>
48 <winddi re ct i on>N< /winddi rection)
49 <winddi r 1 6Polnt>N< /wi-nddirl SPoint> Class ContohParsersAx. j ava
50 <w j-ndd j- rDegree>2 3 0 < /w j-nddi rDegree>
Selanjutnya dalam sub-bab ini ditunjukkan pembuatan aplikasi parser
51 (weatherC ode>229< / weathe rCode) XML berbasis console. Parser ini modifikasi dari tutorial yang dibuat
52<weatherlconUrf>< I ICDATAIhttp:. / /www - Nazmul, 1999 (http://developerlife.com/tutorials/?p:29). Menggunakan
class ContohParserSAX. java sebagai parser dan class ,elther.
worldweathe ron I ine . com/ image s /ws ymbo I s 0 1-png-6 4 / j ava untuk deklarasi variabel-variabel class parser SAX. Kedua
ws ymbo I_0 0 1 8_cf oudy-wi th-heavy-rain . pnS I I >< / mengimplementasikan librari standar JDK, yang tidak berkaitan dengan Apl
weatherlconUrl> Android, aplikasi Notepad atau Notepad+ + dan dikompilasi menggunakan
compiler java.yang tersedia dalam paket JDK melalui command-prompt
53 <weaLherDesc>< ! [CDATA [Moderate rain] I ></ (tanpa IDE Netbeans / Eclipse).
weatherDesc> Berikut adalah source code public c/ass ContohparsersAX sebagai
54 <precipMM>33.1</PreciPMM> parser SAX, menggunakan pemodelan event based:
55 </weather>
56 (weather)
<date>2 At0 - 72-2</date>
import j ava. io . IOException,.
51
< t empMaxC> 6 < / tempMaxC>
import j ava . util- . Arraylj-st;
5B
<tempMaxF>4 6<,/ temPMaxF>
import j ava. utif . Iterator,-
59
60 <tempMinC> 4< / tempMinC>
import ; ava . uti-l- . Llst;
6t <tempMinE> 3 3< / tempMinF>
<wi- ndspeedMi te s>12< / wi-ndspeedMj- 1e s >
import j avax. xml . parsers . ParserConfigurationException;
62
<windspe e dKmph>2 3 <,/ wi ndspeedKmph>
import j avax. xm1 . parsers. SAXParser,.
63
<winddi- rect ion>S< /wi nddi rect i-on)
import j avax. xml- . parsers . SAXParserFactory;
64
65 <windd-i r1 6Point>S< /winddirl 5Point>
<winddi rDegree>1 8 1<,/winddi rDegree>
import org. xm1 . sax. Attributes ;
65
(weatherCode>1 1 3</weatherCode) import org. xm1 . sax. SAXException;
61
58<weatherlconUrf)< ! [CDATA Iht.tpl. / /www.
import org. xm1 . sax. helpers . Def aul-tHandler,.
worldweatheronl ine . com/ image s /ws ymbol s 0 1-png-6 4 /
ws ymbo J-_0 0 1 8_c I oudy__wi th_heavy_rain . png I I >< /
publlc class ContohParsersAx extends DefaultHandl_er {
weatherfconUrl)
69 <weatherDesc>< ! [CDATA IModerate rain] I ></
weatherDesc)
List WeatherArray;
'10 <precipMM>33.1</PreciPMM>
/ / n,t inl.r in context
236 J)emroflrantan Smirtl l'ltottt' Mt'tt111'tttr,rh,rtt ',1 tl\ Atrrltntrl rl,rtr Il,rr krrrl' Attrlrrttrl llAIl 9 Ap|karr l{lili I r,r,rl 237
private Weather tempEmp,' [JeatherArray : new Arraylist O;
)
private Boolean inntag_query = false;
private Boolean inntas_current_condition = public void runExanple O {
fa]se, parseDocument O ;
private Boolean innlag_obser:vation_time = false, printDatao;
private Boolean inntag teinp_C = false; ]
private Boolean inntag_weathercode = false;
private Boolean inntagjrecipitation = false; private void parseDocument O {
priwate Boolean inntag_hunidily : false; // deklarasi factory baru
private Boofean inntag_visibility = false, SAxParserEactory spf = SAxparserEactory.
private Boolean inntagjressure - false; newlnstance0;
private Boolean inntag cloudcover : false; try {
// dektarasi insrance parser
private Boolean inntag_seather : false, SAxparser sp = spf. newsAxparser ( );
private Boofean inntag_date = false;
private Boolean inntag_tempninc = false; // parsins file target dan me-
private Boolean inntag_tenpnaxc : false; register class untuk call back
private Boolean inntag_$indspeedkmph = false; sp.parse ("forecast.xint,,, this);
priwate Boolean innlag windclireclion - false;
private Boolean inntag_weathercode = false; ] catch (SAxException se) {
printstackrrace O;
se.
private String query value; ) catch (parserconliqurationExceprion pce)
private String observ_time; I
238 Pentrogratttirtt Stttirrl l'lrrlrl Mt'tt;11lrttt,tk,ttt ',1 )lt Atrrltrrtrl rl,rrr I l,rr krtr11 Atttlttlttl ItAll() Aphk,r,,r liiiti I r,r,rl 23g
sb.append("Visibility :" + thj-s.
Private void PrintData O {
visibility);
sb. append (", ") ;
System'out'println ("Location Name'/ZIP Code
sb.append("Pressure :" * this.pressure),'
: " * guery0); sb.append(", ");
System'out'println (currentCondiLion O ) ;
sb.append("Cloud Cover ;" * this.
System'out'println("No of Eorecast : "
*
cloudcover) ,'
WeatherArray.sizeO ); sb.append(". ");
Iterator it : WeatherArray'iterator() ;
return sb. toString ( ) ;
while (i-t.hasNextO) {
System.out.printl-n (it'next O ' )
)
public void startElement (String uri, String
pubJ-ic String currentCondition O t
focafName, String qName,
StringBuffer sb = new StringBuffer O ;
Attributes attributes) throws
sb'append("Current condit-ion : ") ;
SAXException
sb.aPPend("Ti-me:") ; / /
{
sb'aPPend(" :) ");
if (qName.equalslgnoreCase ("guery") )
sb'append("Observe Time :" I t'his"observ-
{
thj-s.inntag_query : truei
time); )
sb.aPPend(", ");
if (qName. equalslgnoreCase ("current-
sb'aPPend("Weather Code :" f this"
r:ondition" ) ) {
weatherCode); t.his.inntag current condition :
sb.aPPend("' ");
lrue;
sb.append("Precipitati-on :" + this'
)
preciPMM);
if (qName. equalslgnoreCase ("observation_
sb.aPPend(", ");
t ime") )
sb'append("Humidity i" + this'humidity );
{
if (qName.equalslgnoreCase ("temp-C") ) {
if (qName.equalslgnoreCase ("date") ) {
)
)
:
this.inntag PreciPltation true;
)
if (qName. equalslgnoreCase ("windspeedKm
i
ph") )
if (qName. equalslgnoreCase ("humidity") ) {
{
()
244 - Pemroliranr,rrr finr;irl l'lrottl Mltrllylurt,rk,rrr l,l tl', /\rllrrtrlrl,tn ll,rr ktrtl,Attrlrotrl l3All Aphkl,;r l(liti I r,r,rl 245
I if (qNane. equatsrsnorecase (..precipMM,,) ) {
) this.innLag precipitation = false;
)
/* ini dipanggif saat closing tag,
Method )
misalnya : if ( qNane. equals Ignorecase ("humidity,,) ) {
* </tag> this.inntaq humidity = false;
*/ I
public void endElement (string uri, Strinq if (qName. equal s Ignorecase ("visibility',) )
localNane, Str:ing qName) {
condition") ) {
1f (qName.equalslgnoreCase ("temp_C") ) { )
this.inntag_tempmaxc = false;
)
if (qName.equalslgnoreCase ("weatherCode") ) )
if (qName. equalslgnorecase (..tempMinC,,) ) i
this.inntag_weatherCode : fafse; thi-s-inntag_tempminc = false;
) l
246 PemroJlraman Snrarl ['ltolrr,Mlrrlllgtttr,rk,rtr i'l tlr Atrrltrrrrlrl,rrr ll,rr l.,rrr11 Arrrlrrrtrl ItAIt() ApLk,r:,r lili1, I r,r,rl 247
if (qName. equalslgnoreCase ("windspeedKm , haracters(char[] ch, int start, int lengt_h)
ph") ) {
i-his.inntag wlndspeedkmph : fal-se,' Agar Class ContohParserSAX dapat mengekstraksi data vieather
]
,lata.xm1, diperlukan penyesuaian sejumlah listening, event call bac?
y.ritu pada startElement, endEl-ement_, dan event chraracters
if (qName. equalslgnoreCase ("winddirecti ti.rri nilai tag yang terdapat pada data weather_data.
on") ) { Schingga, saat parser Conr,ohParserSAX menemukan string opening tag
this. i-nntag_winddirecti-on : false; weatherCode), event startEfement akan memberikan keluaran
)
lroolean inntag_weathercode bernilai True, sedangkan pada event
,'ndElement memberikan keluaran Fal-se. Event characters
if (qName.equalslgnoreCase ("weatherCode") ) rrrer.upakan handler yang akan membaca seluruh karakter string yang ada
{ tii dalam tag saat boolean i-nntag_weathercode dengan niiai ielaiu
'l'rue.
thj.s . inntag_weathercode : false,'
)
sctiap event tersebut berjalan terpisah tergantung dari event charact.ers
s.rat tagqName tertentu dan data string di dalam tag tidak membedakan tipe
) k.rrakter yang dapat berupa angka, simbol, atau huruf.
public staLic void main(String[] args) {
public Weather O {
. Karakter string di dalam opening tag dan closing tag, contohnya pada
<date>2010-11-30</date> yang akan menjalankan method:
)
248 Pentrograman Smarl ['hottt' Mltr;i;1tttr,rk,rtr 1il th Atrrlrottl rl,rtt ll;rr ktttli Attrirotrl llAll() Aphk;r.;t lllili I r,r,rl 249
this.tempMlnc : tempMinC;
publlc Weather (String date, 1nt tempMaxC, int )
public woid setlqruinc (int tenpMinc) { sb. append ('Forecast Details \);
['ernr0grantan Strtarl ['ltrtttl Mt'ttp11ltttt,tk,rtr',1)h Atrrltotrl rl,rtr ll,rr krtrli Atrrirotd llAll (i Aphk;r.;r lilili I lrrrl 253
Aplikasi RSSCuaca
Pro.ject aplikasi adalah weather reporter aplikasi sebagai R55 Feeder. Kini <?xml- version:"1.0" encoding:,,utf-8,,?)
sudah sangat banyak tersedia aplikasi sejenis dalam bentuk widget weather <manifest xmlns : android:"http : //schemas . anciroid. com,/
reporter dari web service, beberapa yang terpopuler yaitu Weather.com atau
apk/ re s,/ android"
AccuWeather.com.
package:"com. contoh . rss . cuaca,,
Project aplikasi RSSCuaca ini
merupakan modifikasi dari source code
buku "Unlocking Android-A Developer's Cuide" oleh Abelson W.F., android: versi_onCode=" 1 "
mem anfaatkan web serv i ce dari www.w o r I dwe ath e ro n I i n e.co m ya n g ri n c an i
android : versionName="1 . 0">
data tersebut telah ditunjukkan pada penerapan ContohParserSAX
RSS
<appJ- i cation andro j- d : l- abel:" G s tring/ app_
(file weather data.xml). Aplikasi ini juga mengakses lntent dengan
cara yang berbetla, melalui Broadcast Receiver dan Service. name" android: theme:"Gandroid: sty1e/Theme. Light,,
Sejurnlah Activity yang diimplementasikan pada aplikasi ini menggunakan android : icon:" G drawabfe / icon3,, )
fungsi -i- ntent dan I nten t F i I t e r yang merryediakan sistem konrunikasi <activity android: l-abel_:,,Gstring/app name,,
antar-Activity. Hal inidimungkinkan karena sistem Android memilikiarsitektur androi-d : name:" Di spIayDataRS S ->
rnenyeru pa i 5OA (Servic e-O r i e nte d-A rch i tectu re) seh i n gga satu Ac i i v i t y
dapat mernanggil suatu Intent
melalui obiect UR/ untuk mernberikan <intent-filter>
perintah ke Activi'ty iain" Aplikasi ini iuga menerapkan database SQLite <action android: name:,,android.
yang telah ter-inc/ude dalam sistem Android dan ntenggunakan fungsi cluerv
sebagai penyimpan data lokasi dan koordinat.
intent.action .VIEW" />
<category
[Jntuk lebih jelasnya, berikut rincian proses pembuatan aplikasi RSSCuaca:
andro j-d: name="android. intent . category. DEFAULT,, ,/>
1. Buatlah project Android dengan rincian sebagai berikut:
<data android : scheme:,,cuaca,,
. Nama project RSSCuaca
. android : host:"com. contoh . rss,, / )
Application Name RSS Cuaca
. <,/ int.ent-filter>
Package name com.contoh.rss.cuaca
< intent -fil ter:>
Create Activity DisplayDataRSS
Minimum SDK 3 <act.ion android : name:,,android.
Build Target AVD : MinimalAndroid 1.5 (disarankan intent. acti-on .VIEW" l>
bukan emulator) <data a ndroid : scheme:,,cuaca,,
androld : host:"com. contoh. rss,, / ),
Untuk menjalankan aplikasi ini disarankan menggunakan perangkat < / intent -fil- te r>
fisik karena diterapkan fungsi Broadcast Receiver untuk
menentukan lokasi user (class Locatj-onManager) dan juga <intent-fil- te r>
diterapkan provider NETWORK-PROVIDER untuk memperoleh (action android : name:,,android. int.ent..
koordinat lokasi melalui CPS atau n-CpS. Jika dijalankan pada ,rction. MAIN" />
emulator, aplikasi tetap dapat berjalan, tetapi fungsi provider
NETWORK_PROVI DER tidak dapat diakses. <category android : name:,,android.
r ntent. category. LAUNCHER,, />
2. Proses selanjutnya modifikasikan File AndroidManifest. xml <,/ i ntent -filter>
meniadi seperti berikut:
' /activ,i Ly>
254 PemrOgraman Silutrl l,lr0rrtl Mt'rrt:t":rril,rl .rrr ',lth Arrrltorrlrl,rrrll,tt ktttli Atltlrrtttl ItAll() AgrIkrr:,r lllili I r,r,rl 255
<act ivity androld : labe 1:" G s tri-ng,/ app_name_v j-ew* pada receiver memungkinkan aplikasi "melihat" data broadcast yang
rs s_saved_l ocat i ons " android : name:" Di splayRS STe rs imp di transmit dari Activity lainnya meskipun pada kondisi aplikasi tidak
aktif (yaitu Activity MAIN_LAUNCHER).
an"></ acLivity>
<act ivi- ty andro id : I abe 1:" G st r ingl app_name_specific_
Pada manifest aplikasi RSSCuaca, receiver seryice
RSSA]-ertServiceReceiver (Gambar 9.4) akan aktif di latar
l- ocation " android : name: " Di spf ayMenu I nputloka s i" ), { / belakang setelah booting sistem operasi selesai dan juga dijalankan
activi-ty> atert service.
<receiver androi-d: name:" . ser/ice. fr E,rervice.R5sAlertserviceReceiver Fecdvs)
RSSWorLdl{eatherAlert" > , s trllnkrtFdb
<intent-filter> @ u"*"e.nhnt.adion.B00T_CCIt4ptElED {Act En}
action . BOOT_COMPLETED" / > Gambar 9.4 Konfigurasi service pada Manifest Aplikasi RSSCuaca
< / intent -fiI ter>
Perrtrogratttatt Sttt;trl l'ltpttl Mt'ttrlf:tlrr,rk,ltr',1)K Arrrlrorrl rl,rrr ll,rt:krrtpl Attdroitl llAlt () Aphk;r,r liSli Inlrl 257
256
Pada manifest tampak permission ACCESS FINE LOCATION dituf i-s !<,/string>
digunakan sebagai navigasi GPS atau A-CPS, sedangkan permisson < s trlng name:"mes s age_inval- id_locat i on " ) 1 nput
ACCESS coARSE LocATroN untuk mengakses geolokasi
menggunakan network provider (jaringan CSM atau Wi-Fi). Permisson salah, nama l-okasi terlal-u singkat</string>
RECEIVE BOOT_COMPLETED diperlukan agar aplikasi RSSCuaca <strlng name:"mes sage_report_
menerima Tlag boot complete sebagai event /isten ing yang adapat unavailabl-e")Layanan laporan cuaca tidak tersedia,
mengaktifkan lntent Service RSSWorldWeatherAlert sehingga
service dapat membaca informasi dari broadcast sistem setelah booting masukkan lokasi lainnya.</stri-ng>
Android selesai. Maka lntent Service RSSViorldWeatherAl-ert <string name:"alert_labe1 ")peringatan ! <,/ string>
selalu aktif setiap Android dihidupkan. Untuk lebih jelas penerapan
fungsi ini dapat dilihat pada bagian 'Penerapan Event Listening pada
<string name:'/menu goto saved")Buka Loka_si</
Service". s t ring>
Activity DisplayRSSTersimpan berfungsi untuk display Ul <string name:"menu view report,,)Cek cuaca<l
data lokasi atau koordinat yang telah ter-request dari web service dan string)
disimpan dalam database RSSDatabases menggunakan layout (stri-ng name:"menu specify location,,) Tentukan
XML view lokasi tersimpan. Rincian proses pembuatan dan
manipulasi ?atabase flssoatabases dapat dilihat pada bagian Lokas i<,/ string>
class RSSDatabases . j ava. <stri-ng name:"menu device location,,)Lokasi
DisplayMenulnputLokasi (menggunakan
Activity ketiga yaitu Saya<,/ string>
class DisplayMenulnputlokasi. java) sebagai penyedia Ul <string name:"menu remove location,,)Hapus
dari referensi input nama tempat atau koordinat longitude'latitude
menggunakan method location. getText ( ) . toString ( ) Lo kas i<,/ string>
yang selanjutnya menjalankan Activity DisplayDataRSS melalui <string name:"menu save focation,,>Simpan
URI.
Lokasi<,/string>
3. Selanjutnya modifikasikan file string resource strings . xml untuk <!-- display lnput lokasi -->
fungsi /ocalization yang tersimpan pada direktori ,/res,/values < s tring name:" spec i f y_locati on_intro,,>Defini s i
dari project menjadi seperti berikut: laporan lokasi :</string>
<?xml- version="1,.0' encoding:"utf-8"?) <string name:"specify_1ocation labef,,)Masukkan
<resources> Kota atau Daerah</string>
<!-- string untuk alerL,warning dan menu --) <string name:"format")Format :<,/string>
<string name:"app_name">RSS Cuaca</string> <string name="city_country.>- koLa/
t ri ng name: " app_name_spe c ific_l- ocat i on " )RS S
<s tlaerah, negara<,/ strlng>
Cuaca - Masukkan Lokasi</string> <strj-ng name:"fat_lng,,>- latitude, longitude<1
<string name:"apP name weather detail-">Detail</ r; Lring)
258 Penrrograrnan Stnarl l'hont'Mltr11;itttt,rk,rrr',1)K Arrrlrorrl rl,ttr ll,rt:kttr11 Attrlrotd llAll () Aphkrr.,r lllili I n'rl 259
<string name:"view location 1abef">Lokasi z</ ilec nrndroid )&&. Frt*
str j-ng> {r*tr* I n*r* An*'sd:rA!l i.lt,
<str j-ng name:"vi ew_date_l abe 1 " >Tanggal : <,/ s t ring>
<string name:"view condiLion label">Kondisi Prqj$qt B5;trryr
alert. cuaca dari koordinat GPS perangkat?<./strj-ng> ffi& ryP" Y:ryT::y,lYrt * "s-cld
ru* ri&cr
string> ,.r Ardrn'd X&*L $ik Itltrl th* roat ltsnr{'lEr i*x t}& f**;
<string name:"server addr")Woridweatheronline. &"irtif T*,*t {a*{ 'rj,:'Jlt{!
com</string> (a) b)
<l-- display data tersimpan -->
Gambar 9.6 (a) Menu fileAndroid xML (b) window preferensifite XMLAndroid
<string name:"view_saved_locations_
i-ntro")Tampllkan lokasi tersimpan:</stri-ng>
Berikut ditunjukkan isi data styles . xml:
<,/resouries> ':?xm1 version:"1-. 0" encoding:-rg6-A,,?>
<resources>
4. Berikutnya buat /rile XML baru untuk digunakan sebagai resource font
< style name:',intro_blurb,,>
style dengan nama styles . xm1. Untuk membuat file XML tersebut
dengan cara: klik kanan proiect -) New -+ Android XML File -+ <item name:,,andro j-d : texts i ze,,>2 2 sp<,/ 1 tem>
masukkan nama file styles. xml pada textbox File (Gambar 9.6a), i t em name:,,android
< : textColor,,)#ee 7 62 O < /
dengan memilih tipe resource Values (Cambar 9.6b), file XML tersebut
tersimpan di direktori / res,/va1ues.
i tem)
<i tem name:,,androld : textstyle,,>bold< / 1 tem>
</sty1e>
<style name:"Label")
<i tem name:,,android : t exts i ze,,> 1 6 sp<,/ i tem>
<item name:,,android: textColor,,>#eel 620< /
r I (.m>
260 Pemrograntan Smart Pltottl Mt'rtp1l"ltttt,tk,rtr 'il )h Arrrlrorrl rl,rrr I l;rcktttli Artrlrortl ItAlS 9 Aphk;r:,r lll,li I r,r,rl
261
<i-tem name:"android : textsty1e")normaI</ 5. list item lokasi. xml, menu input
Buat file XML yaitu:
i-tem) fokasi.xml, rincian cuaEa.xml, dan view 1oklsi-
</style> tersimpan. xml . KeGmpat layout menggunakan resource
Layout (dipilih pada window New Android XML) yang seluruh
<sty1e name:"view_text") Layout tersimpan di direktori / res / layout. Dari tiap layout akan
<item name:" android : textsi ze">1 4 sp<,/ item> ditunjukkan desain layout UI dari IDE Eclipse, berikut kode program
masing-masing layout:
<item name:"android : textColor">#000000</
item>
a. Source code layout l-ist item lokasi . xm.l_:
</style>
<style name:"edit_text")
<item name="android : texLSi ze">1 4 sp</ item> <?xm} version:"1. 0" encoding:"91'p-8,,?>
<item name:"androi-d : textColor">#000000</
item> <TextView xmlns : android:"http: ,/,/schemas - android . eom/
<,/style> apk/ res,/android"
<style name:"1ist_text") android : 16:"@ +idl list_j_tem,,
<item name:"android : textSi ze">1 8sp</ item> android : layout_width:"fi1 l_parent,,
<item name="android : textColor">#000000</ andro j-d : Iayout_hei-ght:"50dip"
item> style:"Gstyle/1ist Lext" />
<item name:"androld : textStyle")normal(,/
item> Layout l_ist item Iokasi.xml berfungsi sebagai
</sty1e>
penyedia list layout text menggunakan nama referensi lisi
item, data tersebut diperoleh melalui ArrayAdaptei
<style name:"button_text") Savedlocation akan me-/oad database lokasi berbasis
SQLite hasil request.
<i Lem name:" android : Lext S i ze "> 1 2 sp<,/ I tem>
<item name:"android : LextCol-or">#000000</
item> b. Source code layout menu input l_okasi . xml-:
</stYIe>
</resources> <?xmI version:"1. 0" encodi-ng:-r1;-8,, ?>
<RefativeLayout
Filest.y1es. xml sebagai referensi untuk kustom font style layout xmlns : android:"http: ,/ / schemas . android . com/ apk/
Ul di suatu aplikasi yang didefinisikan ukuran, text style, font dan
lainnya. Penggunaan konfigurasi styles . xml- akan mempermudah
r es /androld"
pengembang dalam memodifikasi display font aplikasi tanpa mengatur andro id : layout_width:"fiI 1_parent,,
satu persatu tiap TextView dengan menggunakan acuan font style salah ,r ndro id : layout_height:"f111_parent,,
satu string resource, contohnya TextView menggunakan kustom style
style:"Gstyle/intro blurb" mengacu pada style dengan anclroid : gravi ty:" center_hori z ontal',
nama lD style intro nlurn di dalam file styles. xm1. , r rrrlroid: padrl i nq:'10px")
262 Pemrogranran Smart ['ltttttt' Mt'rrliplttrr,tk,rtr 'il )h Arrrlrrrtrl rl,rrr ll,rr krrtli Atrrlrotrl ItAll() Aphk;r,,r l{li!i I r,r,rl 263
<TextView android' i6:"@+j-d/speclfy ]ocation android : textSi ze: " 75px"
I dL)C -L
android : textCof or:"#000 0 0 0"
andro i d : l ayout_width: "wrap_content " android : layout_margi nLe ft:" 5F)x"
android : 1ayout_height:"wrap_content" andro j-d : layout*marginBottom: " 5px"
android: 1ayout_marg j-nLef t--" 5p7" android: 1 ayout_befow:" j-d/ c i ty_country',
@
264 Pemrograman Smart ['hottl Mlttl"lpltttr,rk,rrr ',1 lh Atrrltorrl rl,rrr ll,rr:krrr11 Arrrlrorrl llAll() Agrhk;r.,r lllili I r,r,rl 265
android : layout-beIow:" G id/ f ocation" android : gravity:"center horizontal"
and,roid,: texl-=" G st ring/ spec i fy-Iocat ion-button- android : padding=" 1 0px"
label" /) androId . setVert i ca f ScroI l-BarEnabl-ed: "tr
< /Re 1 atlveLayout> ue")
(TextView android:14:,,@+id/view Iocation
menu input fokasi.xml digunakan sebagai desain
pada file 1abeI"
layout Ul inpu- lokasi untuk masukan user secara manual pada android : textColor:" #0 0 0 0 0 0"
EditText. dengan referensi string name location akan dibaca android : layout_width="wrap_content" android : Iayout_
class Displayilenulnputlokasi. Pada gambar 9'7. tampak
desain layoit U[menu_input_]okasi. xml dari IDE Eclipse. he 1 ght= "wrap_content " android : 1 ayout_marginTop: " 7 lpx"
android : layout_marginLe ft= " L}Px"
Masukkan R*ia atair Dderah android : 1ayout_marginBottom:" 5px"
Format:
- koraldaerah,negara
st.yIe="@style/1abe1" android: text:"G
- latitude,longitude string,/view_location_l-abeI" /)
- ZIF rodt <ImageVier android : i.d=" e+idlcondition
inagle"
android : layout_ridtlt=" I Opx "
an&oid : layout_height=" 8 Opx"
android : J-ayout_toRightOf=" 0 id/wier_
Iocation_label"
android : layout-marginlef t=" 1 5 0px"
android:background=' *ffffff' />
Gambar9.7 Layout XML nenu input-lokas i
<TextView android . 16:,, + id,/view_f ocat i on,,
@
lrlrlrrl Mr,lli11rrrr,rk,rrr 'il)x Atrtlrprrl rl,rtr ll;rt kittli Artrlr6rtl IlAlt() Apltkirst lllili I lrrl 261
266 Pemrograman Srn;rrl
android: layout_width:"{rap_content" android:layout an.tr:oid: layout_marginBottom=,,5px.,
heighL:"Brap_content" style=,,0sry1e/vie!i_rext,' />
android: layou!_be1ow="0 id/view_ <Textview android: _id:,,G+idlview forecast
location" android: layouL_marginleft:" 10px" labeI,,
android: layout_marginBotton:"5px" android: textcoto!="+00o000.
style="0sty1e/Iabel" android: text="G string/view_date ndroid: layout_$idth=.lrrap content,, andxoid:layout
label" /> height=.wrap_content',
<textview and.oid: id="@+idlvie,_date" android: layour_below=.0 id/vier_
android: fayout_width="fifljarent" condit.ion. android: layout_marginleft=,,10px.
android: textcolor="*000 00 0" anctroid: layout_narginBotton=,,5px.
android: layout_height="wrap_content" android:layout_ style=.0style/1abet. androial: text=.0strinq/viee
befow="eid/vies_date_Iabe1" forecast_Iabe1- />
androld: layout_marginLeft=" 10px' <Textview android: id=,, O+id/vier_forecast,.
andloid: layout_margj.nBottora="5Px" aDdroid: textcotor=.+ 00 0O 00.
style="Cstyle,/vier_text- /> android: layout-rridth=.lil]jarent,, androial:tayout
<Texwie$ android: id="G+id/view condition height=,,v.rap_content.
1abe1" android:layout below=,,.aid/view
android: rextcolor="*000000" fbr€cast_label,,
android: Iayout_width="irrap_content" anclroid: layout_ anctr:oid: Iayout marginleft=,,10px,,
height="wrap_content" android: tayout_marqinBottom=.t opx-
android: fayout_belorr="@ id/view_date tyle=,,Osty1e/view_text,, />
android: layout_marginleft="10px" <CheckBox android: id=-G+idlvieti coniigure
android: lavout marginBottom="5px'/ alerts/
style="@style/ labe]" android: Iayout_width=.wrap_content,,
andro d. text=zcstring/wier_ android: layout_height=,,rap_content,
condition_]abe1" /> an.troid: tayout_narqinLeft=410px,
<Textview android: id=-G+id/view_condit ion" android: Iayout_marginBotton=,,15px,,
android: textcolor=" +00 00 0 " 0 styte=,0 style/view_text4
android: layout-width="fil Ua.ent" android:layoul anctroid:layout below=,,Gid/vieu forecasr,, />
height="srap_content"
android: fayout-belor-'8id/wiew- </Relalivelayout>
condition_label" </Scrollview>
android : laYout-narqin,,e f t=" 1 0Px"
268 _ Pemrograman Smart Phone Mr.nplgrtrr,rk,ril lil)K ArIlrorrl rl,rrr ll,rIkrrrg Anrlrorrl llAlJ () Alrltk;r,,r lllili I r,rrrl 269
Layout rincian_cuaca . xml merupakan desain layout U/ yang ctorOnTop--"faIse" /)
akan diimplementasikan class DisplayDataRSS . j ava untuk <TextView android' 16:"@+id/view*saved_locations_
menampilkan reguest data RSS setelah melalui parsing XM[. Pada tag
ImageView digunakan untuk penempatan image yang dipilih dari empty" android : layout_width:"fif 1_parent "
proses class DisplayDataRSS. Pada Cambar 9.8 tampak desain android : layout_height:"fll 1_parent"
layout Ul menu input lokasi. xml- dari IDE Eclipse. style:" style,/ lnLro_b.Iurb"
G
android:text:" " /)
<,/Re l at iveLayout>
Lokasi :
Desain layout ini sebagai display default layout resource yang
akan menampilkan list kosong, diimplementasikan oleh Activity
Tanggal: Di spl ayRS STe r s impan. Selanjutnya saat state onCreate akan
mengeksekusi method loadl,ocations ( ) untuk menampiikan
data dari database RSSDatabases.
Kondisi Cuara:
android : 1 ayout_height:"fil 1_parent " Gambar 9.9 lmage reslurce yang telah dimasukkan ke direktlri resource project
android: layout weight:"1" android : drawSele
ItAlt
() Altltk,r'.t l{1,i, I r'r'rl
270 - Pemrograman Smart Phone Mcnllllttttitk,rrr 1il)K Arrrhurrl rl,rtt ll,rr krrrli Atrrltotrl 271
Setelah file XML sudah dibuat sebagai string resource, styles, dan /ayout.
Selanjutnya membuat 2 package tambahan, yang masing-masing package di rmport com. contoh. rss. cuaca. data. RSSDatabases,.
dalamnya terdapat sejumlah class yang dikelompokkan berdasarkan fungsi, import com. contoh. rss. cuaca.data.WeatherForecast;
berikut adalah diagram package aplikasi RSSCuaca:
import com. contoh. rss. cuaca. data.WeatherRecord,.
1 . Pada package default yang sudah terbuat yaitu com. contoh . rs s . import com. cont.oh. rss . cuaca . data . V{orl-dWeatherFetcher;
cuaca digunakan sebagai Main Activity. Berikut sejumlah source
import com. contoh. rss.cuaca.data.RSSDatabases.
code tiap class yang ada di dalam package com.contoh.rss.
cuaca yang akan dijelaskan secara tepisah. Saved],ocation;
a. Modifikasikan public class Di splayDataRSS menjadi seperti import com. contoh.rss. cuaca. service.
berikut ini: RS SWo r l- dWeatherAle rt ;
package com. contoh. rss. cuaca;
public class DisplayDataRSS extends Activity {
import android. app.Activity;
lmport android. os . Bundle,' private static final String CLASSTAG :
Di-splayDataRSS - class - getsimplelrlame ( ) ;
import android. app. ProgressDial-og; pri-vate static final int MENU VIEW SAVED LOCATIONS
import android. contenL . ContexL,' : Menu. FIRST,'
imporL android. content . Intent,' private static final int MENU_REMOVE_SAVED_LOCATION
import android. Iocation. LocationManager,' : Menu.FfRST + 1;
import android. net . Uri,' private static final_ int MENU SAVE LOCATION : Menu.
import android. os -Handler; FIRST + 2;
import android. os . Messaqe,' private static final_ int MENU SPECIFY LOCATION :
import android.util. Log; Menu.FIRST + 3,.
import androj-d. view - Menu; private static final j_nt MENU_VIEW_CURRENT LOCATION
import android. view. Menultemi = Menu.FIRST + 4,.
import android. widget. CheckBox;
i-mport android. widget. CompoundBut-ton; private TextView location;
import android. widgel-. ImageView; pri-vate TextView date,-
import android. widget. TextView,' prlvate TextVj-ew condition,.
import android. widget . Toast,' private TextView forecast;
j-mport android. widget . CompoundButLon . private ImageView conditionTmage,-
OnChe c kedChan geL i s tene r,' private CheckBox currentCheck,-
import android. location. Location;
import java. lang. String; private ProgressDial_og progressDialoq;
GOverri-de
public void handleMessage (fina] Message msg) forecst : new
stringBuilder(r rtttttn"uilder
ProgressDialog' dismiss ( )''
if ( (rePorL =: null-) I I (rePort' for (int 1 = 0; (report.getForecast.s o
getCondition O := nu]l) ) {
!= nul-I) && (i < report.getForecasts O .l-ength); i++; {
Toast .makeText (DisplayDataRSS ' this,
WeatherForecast fc = report.
get.Forecasts O Ii] ;
R. string. message-reporL-unavailable' Toast' LENGTH-
forecst.append("Hari ini :\n") ;
SHORT).showO;
forecst. append ( fc. getCondition ( ) .
) else {
!r s +
Log.v(Constant-LOGTAG,
getDisplayO +"\n"+"Suhu \n"* "Tinggi ," +
+* HANDLER report - " + fc.getHighO + " C - Rendah i" I fc.getlowo
DisplayDataRSS-CLASSTAG
+ .. crr);
report) ;
]ocation . setText ( report . if (r := 0) {
forecst. append ( "\n\n" );
getlocation O);
date . setText ( report . getDate ( )); )
276 _Pemrograman Smart Plronc Mr,rrpiglrr,rk,rrr iillK Arrrlrorrl rl,rtr ll,tr ktnli Arrritotrl ItAlt () AgrIk,r,,r lliili I r,r,rl 277
PROV]DER;
Location net_Ioc : locationManager. GOverride
geLLastKnownLocation ( ntw_provider ),' pubJ-ic void onResume O {
updateNewNetLocation ( net_Ioc ); super. onResume O ;
Log. v (Constant . LOGTAG, \\ \\ + DispIayDataRSS .
/ laLankan service - yang akan diaktifkan
/ CLASSTAG + " onResume")i
sesaaL setelah proses Booting )
// meskipun service diaktifkan berulang Lldak
akan berdampak negatif dengan aplikasi GOverride
public void onStart O {
startservice (new InLent (this, super.onStart O ;
RSSWorldWeatherAlert. class) ) ; Log. v (Constant . LOGTAG, r\ \\ + DispIayDataRSS
) CLASSTAG + " onStarL");
this.dblokasi = new RSSDatabases (this) ;
GOverride
protected void onPause() {
this . l_ocat ionName : RSSWorl_dWeatherAlert -
super. onPause O ; deviceLocation;
Log.v(Constant.LOGTAG' $ s + DisplayDataRSS.
CLASSTAG + " onPause");
// defini-sikan nama lokasi dari Url (berupa
this . dblokasi . cleanup ( ) ; nama l-okasi atau koordinat)
t.his. locationName : RSSWorl-dWeatherAlert. if ( (getrntenro .gerDatao !: nuII) &&
deviceLocation; (getfntent O . getOata O . getEncodedeuery O !: null)
if (this.progressDialog. isShowing O ) {
&& (getrntent O .getData O .
this. progressDialog. dismiss ( ) ; getEncodedQueryO.lengthO > 8)) {
)
Log. v (Constant . LOGTAG, \\ \\ +
) DisplayDataRSS.CLASSTAG + .rData intent diperoleh dari
guery/ menjalani proses parsing,,),.
GOverride String queryString : getlntent O .
public voj-d onRestart O t getData O . getencodedeuery O ;
super.onRestart O ; Log. v (Constant . LOGTAG, r\ \\
Log. v (Constant. LOGTAG, $ \\ + DispJ-ayDataRSS
+
.
DisplayDataRSS.CLASSTAG + .r queryString - .. +
CLASSTAG + " onRest.art"); queryString) ,-
)
thls.reportlocation : queryString.
278 Pemrograman Smart ['ltone Mt'ttplgtttt,tk,rtt lil ]h Arrrhotrl rl'rrr ll,rr kttrli Atttitotrl
llAB !l furllk;r,,r llliii lnr'rl 279
substring(5, (getlntent O .getData O .getEncodedQueryO . 1) {
lengtho ) ); this.currentcheck.
this.useDevj-celocation : fatsei setChecked (true) ;
II olca
elau t
I ) else {
this.useDevicelocatlon : true; )
)
loadReport ( this . report.Location) ;
)
this . currentCheck. set.Text (R. string - v-iew getResources ( ) . getText (R. string.menu_
checkbox_currenL) ,'
specify_location) ) . setlcon (androi_d.R.drawabl-e. ic menu
if (this.deviceAlertEnabl-ed],ocation i: edit);
nu11) { ) else {
280 - [,ltttrplit,rrrr,rrt lirrr,rrl l'lrorr, l,4,.tr1,1,tttr.rl.,rtr ',1 tl' /'\r,lroril rl.trl I l,rr kttrl' Atrrltrtttl t3Ati 1) Altltk,r',t l(lili I r,r,rl 281
edit);
if (this. savedlocation := nufl) { uri uri : Uri.parse("cuaca://
menu.add{0, Di sp:LayDaraRSS MENU .
com. contoh . rss / loc?addr=" + this . IatlongNetstring) ;
REMOVE_SAVED_LoCATIoN, 4, Intent intent : new lntenl(Intent.
getResources O getText (R. string. ACTIoN-VIEW' uri);
nenu-remove_location ) ) . sell con android. R. dral,able . ic
( startActivitv inte (
Eoto*saved) )
Intent intent : new
. setf con (android. R. drawable. ic menu Intent (fntent.ACTION VIEW, uri);
myplaces); startActivity ( intent) ;
)
282 - Pemrograman Smart I'ltorrc Mrtrggtrrr,rk,rtr )li Atrrltotrl,l,rtr ll,rr kttt1l Atttlrotrl
ItAIt() Aphk,r,,r li'i'i I r,r,rl 283
"l
intent.putExtra ("locationName", this
private void updateGPSNewLocation (Locatlon
IocationName) ;
startActlvi-tY ( i-ntent) ; location) {
break,'
case MENU SAVE LOCATION:
if (l-ocation !: null) {
savedl,ocatlon toc : new double lattd : location.getlatltudeO ;
double longtd : location.getlongitudeO ;
Savedlocation O ;
Ioc.alertenabled = 0; latlongcpsString = lattd * "," + longtd;
Ioc. lastal-ert : 0;
l-oc.loc : this. rePortlocation;
I a1ca
vruv I
I t
)
getlocation O; ) else {
this - dblokasi - insert (Ioc) ; if (this.deviceAlertEnabledlocation !:
/ / )ika loc target telah nuII) {
tersimpan, update alert menjadi enable this. dbl,okasl . delete (RSSDat.abases .
) else { DEVICE-ALERT_ENABLED LOCATIONS ),.
this. savedlocation. alertenabled = I
savedlocation) ;
) l
l else {
if (this-savedlocatlon !: nul1) i private void loadReport (fina1 St.ring addr) {
this - savedlocation . alertenabled = I,oE-v(Constant.LOGTAG, $ r\ + DisplayDataRSS.
o, CLASS?AG * " loadReport-),.
this. dblokasi . updaLe (this . Log-v(Constant-LOGTAG, i\ \ + DispIayDataRSS"
savedlocation) ,' CL.A,SSTAG +' addr - .. + addr);
)
) this.progressDia_]og = progressDialog.
) else f shoy(this, getResourc€s ( ) - gettexr (R- string. view
// f'ungsi save atau tidak men-save data ,oiking). getResources o
RSS Cuaca saat user nenggunakan fitur lokasi perangkat . getText (R- string. serwer_actdr
) , true,
// berikan alert pada lokasi spesifik false);
if (ischecked) {
if this . deviceAlertEnabledlocati on ==
( final viorldweatherEetcher lrwh = ne,
nurl) { WorldweatherFetcher {addr) ;
286 , Penrrograman Smarl l'lttrttl Mlttlllltttt,rl ,rrr ',1 tK Attrltrrtrlrl,rtr li,rr krttyi Artrltorrl
287
/ / kirin rePort ke thread terpisah unLuk show () , y.ing tampak pada Cambar 9.i 0.
digunakan Handler ProgressDialog
/ / saaL progres selesai, kirim empty rnessage
ke handler sebagai penanda proses thread selesai
new Thread O {
Goverride
o"o';:,:::":Tjl
sltw"atr,",, ;
Log.v(ConstanL.LOGTAG, \\ \\ +
dWeatherFetcher
DisptayDataRSS-CLASSTAG + *
Gambar 9.10 Progress dialog saat menjalankan thread Worf
report - " + report);
handler. sendEmptyMessage (0) ;
Setelah threadselesai mengunduh data stringdari parserSAX, selanjutnya
)
akan ditampilkan teks hasil keluaran dari layout rincian cuaca
).startO,' menggunakan method setText pada string resource element
l TextView vang ditunjukkan di bagian berikut ini.
I this.location : (TextView) findViewByld(R.
id. view_location) ,-
Class ini sebag,ai MAIN LAUNCHER Activity
this.date : (TextView) findViewByld(R-id.view
DisplayDataRSS, yang pertama kali dieksekusi sistem saat
user membuka aplikasi RSSCuaca. Proses pengambilan data date) ;
XML dari web service dan parsing di.ialankan dalam thread thj-s.condj-tion : (TextView) findViewByld(R.
terpisah, oleh class WorldWeatherFetcher melibatkan
class WorldWeatherHandler yang ditunjukkan di bagian id. view_condition) ;
kode berikut: this.forecast : (TextView) findViewByld(R.
id.view_forecast);
this.progressDialog : ProgressDialog. show (this, this. conditionlmage : (ImageView)
findViewByld (R" id- condition_image) ;
geLResources ( ) . getText (R. string. view_worklng) ,
getResources ()
this.currentCheck : (CheckBox) findViewByld(R.
ld. v j-ew_configure_alerts );
.getText (R.string.server_addr), true,
false) ;
Untuk menampiikan gambar weather dari layout Ul digunakan
final- WorldWeatherFetcher wwh : new
element fmageView di bagian kode di atas mengacu pada resource
WorldlrleatherFetcher ( addr ),' path direktori drawable yang tersimpan dalam package aplikasi
new Thread() (com.contoh.rss.cuaca:drawable/) nama file image yang
tersimpan dalam direktori drawable/ disesuaikan dengan nomor
kode kondisi cuaca, kode-kode tersebut didefinisikan pada class
Saatd ijalankan th read Wo r I dWe a the r Fe t che r akan tam pak WeatherCondition.java (pada package com.contoh.
progress dialog menggunakan method Prc>grt':;r;i)i al oq. rss. (-u.tca. data). Berikut adalah setlmageDrawable untuk
I
Sry,a
Saat telah diperoleh clata kode weather dari tag {weat-herCode}, b. Selanjutnya, buat class baru dengan nama file
misalnya diperoleh kode WeatherCondit i on bernilai 293 (berupa DisplayMenulnputlokasi.java. Class ini sebagai
huian ringan sedang), kemudiarr akan diset pada layout image dengan Activit.y DisplayMenulnputLokasi untuk menu
gambar icon file "condi-tion 293"pnq" yang tersimpan di input lokasi. Masukkan source code di bawah ini ke class
direktori drawable/seperti yangditunjukkan pada Cambar 9.1 1. Di splayMenu I nputLokas i yang telah terbuat:
292 - PentrograntanSirrr;rrl l'lrorrlMtn1l1lurr,rk,ur '.1 tl'Arrrlrlrrlrl,rrr ll.rr krrrliArrrlrorrl liAll(, Atrhk,r',r l{',', I,'r',1 293
)
)
return super. onMenultemselected feat-ureId, ( )).showO,'
item) ,'
vafidationText : null-;
]
]
return valid;
private void handleloadReport O {
IntenL intent : null;
Uri uri : nu1l;
if (validate{}) { Pada class ini, Activity DisplayMenulnputlokasi akan
uri : Uri .parse ("cuaca : / / com- contoh. rss,/ membaca refensi input user yang akan menjalankan Activity
toc?addr:" + thls.location-getText O -t-oStringO ); DisplayDatRSS input lokasi dari user, masukan tidak
intent : new fntent (Inl-eni:'ACTION-VIEW, diperbolehkan bernilai null (kosong) yang ditentukan dari
uri); parameter berikut :
startActivitY ( intent ) ; this ocation. get.Text ( ) :: nulf dan
.f
)
)
th s. location.getText ( ) . toString o
j.
equals ('t").
private boolean valldate O { Activity ini juga menyediakan fungsi menu MENU_
boolean valid : t.rue; VIEW SAVED LOCATIONS untuk akses ke ListActiviti'
Stri-ngBuffer validationText : new Di spTayMenu Inputlokas i.
Stri-ngBuf fer O ,'
if ( (this.location-getTextO :: nul-1) I I Lhis" Selanjutnya, buat public class baru dengan nama file
location.getTextO .toStringO .equals ("") ) { DisplayRSSTersimpan . i ava, class ini merupakan
validationText. append (getResources ( )' Activity ketiga dengan tipe LlstActivity sebagar
getstring (R. st ring.message-no-1ocaL-ion) ) ; penyedia list data yang tersimpan dalam database SQLite,
va1ld : false; berikut ditunjukkan source code lengkap dari class
i else if ( (t,his - location. getText ( ) ' Di splayRSSTers impan:
toStringo.length0 <:2 )) { package com. contoh. rss . cuaca,'
val idationText - append ( getResources o
getst r ing ( R . s tring - message-inva1 id-locat ion ) ),'
valid : false; import android. app. ListActivity;
)
if ( !va1j-d) {
import android. app . ProgressDialog;
new AlertDialog.Builder (this) ' import android. content.Context;
setTitle (getResources O - qetstring (R- string' alert- import android. conl-ent - fntent;
labef ) )' setMess"Yilro".ronrexL.roSrrins location. Location;
o)- imporL android.
setPositiveButton ( "Lanjutkan", import android. location. LocationManager;
new android - content . DiatoglnLerface ' lmport android. net.. Uri;
OnClickListener O {
import android.
os.Bundfe;
@Override import os. Handler;
android.
public void onClick (final i mport andr oi d. os.Message,'
Dialoglnterface dialog, final int argl) {
finlsh ( ) ,' impor1,111r11 oirl.rrl i J .Log,'
Pemrograman srrrarl [,lr0rrr, M0illil:tttr,rk,rrr )lr, A||rltotrl ,l,ttt ll,rr ktttli Attrltottl liAli() Aplrk,r',r li',',1,,,1 295
294 "l
inport android. view. llenu;
import android. view. l{enultemi
import android. viev. Vie$, private final Handlex handler = neir Eand1er0 {
inport android. widget . ArrayAdapler;
import anclroid. ridget .IistAdapter; Sowerride
inport android. widget.Iistview; public void handleMessage (final Message msg) 1
296 Pemrograman Stnart l)hrtttc Mltt1111ttrt,tk,rrr ',1 )l', Arrrltotrl rl,ttt ll,tr ktttll Artrltotrl 297
] else {
// instansj-asikan locatlon service sebagai latlongGpsString : thls "
PROV]DER
LocatlonManager locatlon-l4anager;
String context : Conte:(t. LoCATIoN SERVICE; private void updateNei.,Netlocation ( Locarion
locationManager = (LocalionManager) location) {
qetsystemserwice ( conlext ) ; if (Iocation 1= null) {
double tattd = tocation.
String gps_provider = LocationManager. GPS_ gettatitudeO;
PROVIDER; Couble longtd : "l.ocal-1orr.
Locatlon gps_loc : locationManager. getl,ongj-tude O ;
getl,astKnownlocation ( gps_provider ); latlongNetString: fattd * "," *
updateGPSNewLocation ( gps_}oc )'' longtd;
) etse {
String nts_provider = LocationManager. NEmORK latLongNetstring = this-
PROVIDEB; focationNane;
Location net_1oc = locationManager. )
getlastxnosnlocation (ntsjrovider) ; )
updateNer.NetLocation (net_1oc) ;
I Gowerride
protected void onpause ( ) i
prlwale woid updatecPsNerrLocation {l,ocation suPer. onResume ( ) ;
location) { this . dblokasi. cleanup O ;
if (location !: nul1) { }
fongtd;
GOvlr r idc
298 - Pemrograman Sntarl l'lrorrl Mr,lt1l11ttt,rh.rrr ',1 tlr Atlltotrlrlrn ll,rr ktttl,Atttirottl IiAIi') A1rlrl,,r.,r I
299
publ-ic boole;rn orrcreateopl-ionsl"1erru (final Merlu menu) switch (item.getItemIdO ) {
i case MENU_VIEW_CURRENT_LOCATf ON :
sruper " cnCreateOptlc-'nsMenr'r (inenu) ; if (this. laU_crgilbtStrrrql {
=rull)
*on,-r.;',:idiC, i-.-spiairF.S;i'j'r-,ls-mpar'i'liiilNU.-Slllt-ll:',,
Uri uri : Uri . parse (..cuaca : /,/
r-r,-f s.{).?,,.- j.1 li.l:-:.lnq.ir'...;:. com.contoh. rss,/1oc?addr:,, + thls. lat.LongNetstring) ;
_:. :.
:i.a{larly-_icr';:r-:l,ir)).sr-"!lcci!(anC:c;iii"F..i;.-r*-lrb'lt-''j' rt';':l'i; fntent intent: new Intent(Intent.
ed.r- i. ) ; ACTION_VIEW, uri t;
rnenu. add {C, DispiayRSSTersi-mpan. MENU-VIEW- startActivlty ( inte
I,OCAT;ON, 1,
CI-]RRENT nt);
getResources O -getText (R. string.menu- )
dewice_location) ) . setlcon (androici - R - drawable - i.l-menu- else if (this.latT-ongGpsString
mylocaLioni ; length O >r1 1
30c Pemrograman Smarl Phonrl Mrttll,:tltt,rk'rtr l'l ll( Artrlr,rrlrl'rrr ll'rr kttlliAtttirottl 301
DispIayRSSTersimpan.CLASSTAG -f " I oaiiI,ocati-ons") ; Iist LlstAct-ivity merupakan host data lokasi-lokasi
this.progressDlalog : ProgressDialog. yang tersimpan dengan tipe data ListView, dengan bentuk
show(this, " Dalam Proses...", " Membuka lokasi tampilan default Ul berupa list data yang ditampilkan dalam
tersimpan", true, false) ; mode layar penuh dan terurut secara vertikal dalam 1 kolom
new Thread0 { yang ditunjukkan pada Cambar 9.13.
@Override
public void run O {
Iocati-ons : dblokasi.getAll- O; tolytkifE Y'i6aitaf'li, lndofl*Jid.
d" Sebagai class terakhir dalam package ini, buatlah public class
Constant. java yang difungsikan untuk pendefinisian nilai
public void onCreate (final Bundle icicle) { String pada output log.
super - onCreate ( icicle),'
this. setContentView (R. layout.view tidak ada
package com. contoh. rss - cuaca;
data) ; / / set string data kosong
getlistvj-ew ( ) . set-Eq)tyvier (findViewByld (R.
public class ConsLant {
id. view_saved_locations_empty ));
this. empty : (TextVj-ew) findViewByld (R. id.vj-ew
:
public static final String LOGTAG "RSSCuaca,,;
saved_I ocat i on s_emPty ),'
public st.atic final Strj-ng PREFS : "RSS pREES,,;
this.dblokasi : new RSSDatabases {ttris) ;
loadtocations O ,'
public sLatic final String CLEARALERT : "com.contoh
)
rss.cuaca.CLR";
Pada proses inputdatadigunakan rnethod loadlocati-ons ()
yang akan menjalankan fungsi getAll O untuk membaca
lokasi yang tersimpan di database sementara dblokasi
)
302 Pemrograrnan Snrart Phonc Mr,rr11p1rtt,rk,rtr f il )lr Arrrlrorrl rl,rrr ll,rr krtt1l Attdrottl 303
data. Package ini untuk menyimpan sejumlah class fungsi fetcher
web service, handler, perekaman dan pengambilan data dari database pubJ-i-c cl-ass llorldWeatherHandler extends
SQLite. Berikut adalah rincian class-classnya.
DefaultHandLer {
Untuk membuat package baru dengan cara klik kanan main proiect
RSSCuaca -+ klik New -+ Package -+ masukkan nama package pada private stati-c final String DATA : "data";
kolom isian Name window New lava Package yang ditunjukkan pada private static final_ Strlng REQUEST : "request";
Cambar 9.14.
private static final String TYPE : "IYPE";
private statlc final String QUERY : "query"i
prlvate statj_c final- String CURRENT COND :
lrtfl Fldeq;*
&elx r n'm, .!rrrg**a- " cu rrent_cond i t i on ",.
private static final Strlng TEMP : "temp C";
304 Pemro6lraman Sntart l'ltono M0tt,ltltltl,lk,rtr iil )K Artrltorrl rl,rrr ll,rr ktttli Attdrotri llAtt 9 Aphkasr RSS lr,r.rl 305
t'templ,linC",' GOverride
public void endDocument O throws SAXException {
- ()
308 Pemrograman Smart Phonc Mlrrplgttrr,rk,rrr 'il)l( Attrltrrtrl rl.rtt ll,u kttrli Attdrrltd ItAIJ Ap|k,r',r llii'i I r,r,rl 309
else if (localName. equals (worlalweatherHandrer. HUMTDTTY) ) {
CURRENT-COND) ) (
thi s' innertag-visibilitv = false'
this.innertag current conal = false; I
) else if ( IocalNane. equals (worldweatherHandler.
else if tocalName. equals (worlalileatherllanaller.
(
PRESSURE) ) {
) else if
loca]Nane. equal slgnorecase (Worldweathe
(
I this. weatherRecord-
String sun = new setwindsPeed Integer (
. getWeatherCondition (code ) ; )
forecst. this . weatherRecord.
setCondition (cond) ,' qetForecastsO Icount] : forecst;
i )
(this. innertag-temP-max) i
if count++,'
forecst . setHigh ( Integer .
314 - Pemrograman Snrarl Phorrr: Mcrrggur,rh,rrr i,l)K Atttltorrl rl,ttt ll.rr:krrlli Arrdroirl llAlt() Aplrka,,r lllili I r,r,,l
315
* lihat
G URL http: //worldweatheronflne.com/feed-
public WeatherRecord getWeaLherRecordO {
generater. aspx
return this . weatherRecord;
* Gauthor MochSoft
)
thls.weatherRecord : weatherRecord;
private static final String CLASSTAG :
)
)
WorldWeat.he rFe tcher . cl-as s . get S impleName ( ) ;
privat.e static final- String QUERY_BASE : "http://
b. WorldWeatherFetcher -
Selanjutnya buatlah public class
j ava seperti yang telah dijelaskan pada class f ree worldweatheronline . com,/f eed,/weather. ashx?q:",-
.
Di spIayDataRSS. Class ini sebagai fetcher atau pengambil privat.e static final- Stri-ng QUERY_ID
ciata XML web service yang mengimplementasikan beberapa : " & f ormat:xm1 &num_of_days:1 & key:1q1.69.
package SAX yaitu org. xm1 . sax. Inputsource sebagai
perryedia fungsi input data XML tunggal menggunakan URI 4d009414'1!t.1,'t07" ;
referensi yang diimplernentasikan menggunakan method private String query;
openStream O dan class org. xml . sax. XMLReader private Strj-ng 1oc;
yang berfungsi sebagai interface untuk pembacaan data XML
yang menggunakan method newSAXParser ( ) .
return
Gambar 9.15 Diagran alir proses query oleh class WorLdWeatherFetcher
3'18 l'rtrr116llrarntrrr lirrr;rrl I'lrorrc Mr,tr;y1;utr,rk.rtr',1)lt At,,ltrrttl rl,rtr ll,rr kltt11 Attrltotrl
llAB 9 Aplikasr tlSS lotrtl 31S
Dalam tabel rssc_loc dibuat sejumlah kolom, yaitu: private static final String CLASSNAME :
. Kolom loc untuk penyimpanan lokasi request RSSDatabases. class. getSimpleName ( ) ,'
. Kolom city untuk penyimpanan lokasi hasil query dari private static final String [ ] COLUMNS : new
web service
. String[] { "_id", "loc", "city", /*"region",*/
Kolom lastalert sebagai penyimpan data waktu
bertipe Long yang diperoleh dari method System. "1asta1ert", "alertenabl-ed" I ;
currentTimeMillis ( )
. Kolom af ertenabled sebagai penyimpan private SQL1teDatabase db,.
boolean enabl-e alert untuk menjalankan service private final DBOpenHelper dbOpenHeJ-per;
RS SWorldWeathe rAIe rt.
/ / 1oner class
package com. contoh. rss . cuaca . data i
public static class Savedlocation t
import android. content . ContentValues,' public long id;
lmport android. content.Context; public long lastalert;
import android. database. Cursori public int alertenabled,-
import android. database . SQLException; publ1c String loc;
import android.database. sqlite. SQLiteDatabase; / / penambahan nama kota atau area l-okasi
import android. database . sqI ite . SQLiteOpenHelper; public String city;
import android.util. Log; / / tamp:-l-kan data string
public Savedlocation O i
i-mport com. contoh. rss. cuaca. Constanti l
/ Lampilkan data string
/
import java. util.Arraylist; public Savedlocation (final long id, final long
import java. uLil.List; Iastalert, final int. alertenabled, final String 1oc,
final String city. final String region) {
public class RSSDatabases { this. id : id;
t.his.l_astalert : lastalert;
public static final String DEVICE ALERT ENABLED this . alert.enabl-ed : alertenabled,.
LOCATIONS : "DAEL99"i t.his .loc : loc,-
public static final String DB_NAME : "rsscuaca.db"; this. citY : citY;
public static final String DB_TABLE : "rssc_loc" i l
public static fi.naI int DB_VERSION = 3; / / qabungkan data kota dan region
320 Pemrograman Smart Phone Menggrtrr,rk,rrt lil)K Arrtlrorrl rl.trt ll;rr:ktttg Attdrot<l tlAB 9 Aplikast RSS lor,rl 321
Goverride public void onopen (iinal Sol,iteDatabase db) {
public string tostiing0 { super ' onopen (db) ;
returnlhis.loc+""+this.city+", )
TABLE' l
+ RssDatabases. DB_IABLE // baqlan end dari inner cfass
+ ' (_id INTEGER PRIMARY KEY, 1oc TEXT
UNIOUE NOT NUU, city TEXT, Iastalert INTEGER, pDblic RssDatabases (iinaf context context) {
alertenabled INTEGER);"; this. dbopenHelper = new DBoPenHefper. ( cont.xt );
estabIIshDb1);
pubtic DBopenHelper (finat context context) { l
super (context, RssDatabases.DB NAME, nuII,
RssDatabases - DB_YERSIoN) , ",rrwal'4 voj.r e.rairllsrDh0 I
I 1i ithis -db -= r1rlt) I
chis.dlr : rhls - dbopenHelper.
€Override gerhlriLabieDatabase O ;
public void oncreate (final SoliteDatabase db) { l
try { }
i
l
322 Pemrograman Smart Phone Menggunak;rrr lil)X Attrltottl rl,rn ll;rr.krrrli Arrrlroirl llA[] 9 Aphk,r',r l(1,1, I r,r,rl 323
-
pubLc woid inser:t i Savedlocation location) 1
{iina Cursor c : nu]];
Conlentvalues values = neB Contentvalue s ( ) ; Savedlocation location : null;
values.put ("foc", iocaLic-n.Ioci; try {
values.pur ("city/', locaEion.city); c : this.db.query(lrue, RssDaiabases.
values.put ("lastale!t", Ioca tion . lastalert) ; DB-TABLE. RssDatabases. COLUMNS, "loc: t'7 + Ioc + \'2,
rralues.put { "alerterlab].ed", location u11, nu1], nutl, nult,
a].eltenalrled); nu11);
this . db. insert (RssDatabases . DB TABLE, null, if (c.getcounLo > 0) {
values); c.moveToEirsto;
] Iocarion : new Sawedlocation ( ) ,
//funqsi update kolom tabel focation.id = c.qet!onq(0);
public vold update (iina1 save.li,ocairon location) i location.toc: c.getstring(1);
Contenivalues walues: neo Contentvalues0; location.city = c.getstrinq(2);
values.put("1oc", iocaiion.loc); location.lastalert = c.Setlong(3);
vatues . put ( "city", localion.city) ; Iocation. aI€lten l].ed = c.getlnt(4);
values. pu! ("lastatert", locat ion . lastalert) ; )
values. pur r\a1e!tenab1ed", lo.ation.
{ } catch (SeLExceprlon e) {
aLertenabled); Log.v(Constant.I,ocTAc, RssDatabases.
ttris. db. update (assDatabages. DB TABI-E, values, cLAssNA E, e),
*_id:" + location.:id, nuil); ) finally I
I if (c I= nuII && tc.isclosedo ) {
//funssi haPus data pada ID dan 1oc tertentu c.close0;
public woid delete(final long id) { }
this.db.delete(RssDataiases'DB-TABlE,'-id:" + 1
pentrogral)il1 Srpalrt l,llrrrc Mr,rr11l1utt,rk,rtt ',1 )X Atrrlrorrl rl,rrr I l,rr kttlli Atttlrrttrj l3Al3() ApIk,r',r lllili I r.r'rl
324 - 32s
RSSDatabaSeS.COLUMNS/ nuii, riul]. 1 :.1u1,,.i-. I.liriiT irLi-i. ) ; Cursor c : null;
lnt numRows : c"getCcr:n!- () '' Arraylist<Savedlocation) ret : new
c.moveToFirst i ; ( Arrayl-ist(Savedlocarion> ( ) ,.
CLASSNAME, e) i l
) finally { c.moveToNext O ;
if (c !: null ee !c'isClosedO ) { )
publicList<Savedlocation>getAllA]-ertEnabled(){ )
- pemrogramarr Smart Phonc Mrrrrllllrrrr;rk.rrr lil )K Attrltottl rl,rtt ll,rr krrtli Attrlrotrl llAli() Agrhk,r',r lt',', I r,r,rl
326 321
yang didukung diantaranya: CREATtr TABLE, DELETtr TAilLtr,
return ret; INSERT ?ABLE.
) t. Method onOpen ( ) untuk akses :'nembuka database yang secara
default digunakan mode read only sebelum dilakukan proses update
)
dari database.
Untuk akses ke lokasi data spesifik digunakan class Cursor yang merupakan
bagian dari package anciroid.ciatabase berfungsi sebagai penyedia
SQLite interface query ke database. Berikut sejumlah method yang didukung class
pI i ant ACI D (Atom,i city' cons iste
SQLite adalah manai emen database ber-com Cursor:
iune Jia"t"'n untuk sistem entbedded karena hanva
il;;;;ffi;,,au,ioiinvi dan berstar-rdar RDBMS a. Method getCount ( )query untuk memperoleh jumlah baris dari
6"lirp" oril, _'in libraryh:luir", iort*ure srack Android sangat sederhana
(Relationa/ Database i)iiigur"rr Systenr).,librari SQLire suatu tabel.
;;;;;;;;, n".upu lib;; ;il;*ai din database disimpan secara terintegrasi b. Method getColumnlndexOrThrow O untuk memperoleh nama
di dalam direktori ti# ,prlr.iri- sehingga tidak mempengaruhi database indeks dari suatu kolom tabel dari suatu data.
RSSCuaca, tersimpan
aplikasi lainnya. contJhnvu database sqrite aplikasi c. Method qetColumnName ( ) yaitu query untuk memperoleh nama
p!J"-/a"f daLa/ com- contoh ' rsscuaca'/rsscuaca ' db yang indeks dari kolom tabel.
"'/
dapat dilihat menggunlf.i" f,l" Explorer melalui DDMS yang ditunjukkan
i1. Method getstring i ) nrerupakan query yang paling sering
pada Cambar 9.16. cligun.ikan untuk memperoleh peng,embalizrn berup:r isi d.rta string dari
kolom tertentu
lfill.S1-19 17:10 dtw'r'r
r d:!. coifi.(6dtoh.rl5-tscr e. t i nt query untuk memperoleh pengembalian data
2f,11{1.19 17110 dmrs'-t _;er
() nunrerik
, |l drt.b.tll
,j: ,trru.(t.db
5r$ l0fl-01-31 ll5{ -r*-r8---- bertipe data Integer dari suatu kolom
f. geiLong ( )querv untr-rk menrperoieh pengenrbaliarr rlata nutnerik
Long yang diperoleh dari suatu kolom
bertipe data
Gambar 9.16 Database RSSCuaca pada File Explorer
DDMS
g. moveToFirst O untuk query pemindahan cursor ke posisi baris (row)
teratas dari suatu tabel
h. moveToNext O untuk query pemindahan cursor ke posisi baris (row)
Method Akses Database SQLite selanjutnya.
Seiumlahmethoduntukaksesbacatulisdatabaseyangterdapatpadaclass i. moveToPrevious O merupakan query untuk pemindahan cursor ke
R;;;;lJi="t dapat dijelaskan sebagai berikut: baris sebelumnya.
a. Method insert ( ) sebagai penyedia fungsi query untuk penambahan j- moveToPosition O query untuk mengarahkan cursor pada baris
data ke suatu baris (row) dari tabel' tertentu.
b.MethodinsertorThrow()sebagaifungsiqueryuntukpenambahanfungsi throw
k. getPosition O query untuk mengetahui posisi cursor
data ke ,uatu naii it"i aiii tabeT d"ngin diiengkapi Penerapan Cursor dalam class RSSDatabases dapat dilihat pada
memasukkan oala'
exception saat input data kosong atau gagal method giet, getA11, gretAllAf ertEnabled yaitu sebagai berikut:
penghapusan ciata
c. Method delete ( ) merupakan fungsi query untuk
ke suatr't baris (row) da'it'b"l yang
juga dapat meiakukan penghapusan Cursor c : null;
seluruh data Pada tabei. Savedlocation Location : nuff;
( sebagai fungsi query untuk update di suatu
barii;
d. Method update ) trY {
(row) data dari tabel.
c : this-db.query(true, RSSDatabases.DB_
e.MethodexecSQL().Methodmerupakanfungsi-statementperintall
qu.ery ke database)
;;;gg;i un,rl ,dJ ir"et'^g a'tabase (bukan fungsi Beberapa TABLE, RssDatabases. COLUMNS/ "loc : \" + -loc * "'",
perintair
dan tidak *"niulunf multi-statemenr.
"t#tuti
ItAl{rl Aplrk,r'.r ll'," I llrl 329
328 -PemrogramanSntarl[,httttt:Mttntltltttt.lk.tttli|)KAttlIrilrrIrl,rtrll.trkttrllAtttlttltrl
nul1, nuf], nulf, nuIf, Data rsscuaca . db.dari Emulator, dapatdilakukan
nu11); data menggunakan Fire Exprorer din mengkritll". /data/ padadirektori
if (c.getCountO > 0) Perlu diingat,. mengkopi fire database han/a a"p"t irlir,r"itlrnu, s. r al.
{ ,iiit uk;;;;;;;
AVD, s.ed.angkan untuk perangkat Android, secara defaurtriie Emurator
c.moveToFirst ( ); dapat diakses user karena direltori t a"liia"ta
oalauase tiaat
menggun akan permission
]ocation : new Savedlocation O ; root,yang
.h.anya dapat, diatasi dengan cara melakuk;";;;ilg'perangkat
focation.id : c.get.Long (0),' tersebut sehingga saat akses consore"user akan
sebagai root (proses rooting
akan dijelaskan pada bab Hacking nndroid).
location.J.oc : c.getString(1) ;
location.city : c.getString(2) ;
location. J.astalert : c.getLong (3),'
locat-ion. alertenabled : c. getlnt (4 ) ;
)
Pull file Push llle Oolete fie
Dari ketiga method di atas, Arraylist<Savedl,ocation> Gambar 9.18 lcon-icon pada File Explorer
untuk menyimpan data sementara hasil dari query tabel rs sc
foc" Saat boolean alertenabfed suatu lokasi berrrilai true
(kolom afertenabled bernilai 1seperti Cambar 9.18) yang Setelah user berhasil mengkopi file database
ke*omputer host, selanjutnya
tersimpan pada List<Savedl,ocation> akan mengaktifkan alert dapat dibuka aplikasi SQLite Studio pada menu
Databases _, uia Database
RSSWorf dlrlea+-herAlert pada lokasi-lokasi tersebut. (Cambar 9.19).
.,f
!trt.t
ir&
'{- studio Ifl Rarrtrrtcr ir grraroatty
!'ll1rryYj':r'ii*d
i:rc1
a et rr,:e'^*.'i,;.1.!rt Gambar 9.19 MenuAdd database pada Selitestudio
Lk e,_# t rl:..!
Jr*-d i.;i, ,H:.,i.,. ;i:::
r84 r"..r*!.-.;. ;.- ; l,'
H t-Y rr:XrmllJnt_LrJ E .c{r6* d i
aar4,t:,r.- ::.'-
s H{,56-q: Pada sQlitestudio akan tampak isi database
a s 6;ret. -':l,<L *r.ruhtffi
dari rsscuaca.db yang
i.r.-.dr..ti
'r,,5lb-&,
lr*-?&ra
t^*
r:.,i r, :-,i:
J:.n- x: terdapat tabel rss roc dengan r";rrrun k"rom
dianiaianyl
-ii
primary key, kolom loc, koi-om city, f,oll* sebagai
Gambar 9.17 Halanan web unduhan SQLite Studio (Sumber : ftp.//sqlitestudio.one.pl) a I ertenabl_ ed (Cambar 9.20).
ru"r.i.'.1;a* kolom
330 ,Pemrograman Smart Phont: Merrllgrrnak,rtt lil)K Atttlttttrl tl'rtr ll,tr.ktttli Attrlrorrl RAB 9 Aplrk,r,,r llii', Ir'r,rt
33't
rr6cua-& {gnt**la
private st.atic cl-ass DBOpenHelper extends SeliteOprnHr l;rr*
_,.:
-n raHer fl {
adr*l_meladda
private static final_ String
' $!
ilil
lndcrer TABLE *
DB_CREATE = "CilJl?I
S t419an + RssDatabases . DB_TABLE
$, vsrrr
J + .. (_id INTEGER PRIMARY KEy/ loc TEXT UNlUr,F
NOf NULL, city TEXI , l-ast.alert f NTEGER, al-ertorralr
le,l
TNTEGER) ,. ";
public DBOpenHelper(fina1 Context context) |
Gambar 9.20 Tabel rss_l-oc pada aplikasi SQlrtefiudio super (context, RSSDatabases.DB NA!!E, rrrrl l,
RSSDatabases. DB_VERSf ON) ,.
)
GOverride
SQLiteOpenHelper
public void onCreate (final SeLit.eDatabase db)
Class SQLiteOpenHelper merupakan bagian dari package class |
di bawah ini: )
l3A[3
() Aphk,r.,r lllil, I r,r'rl
332 Pemrograman Smart Phone Menggtrnakan lil)K Arrrhorrl rl;rrr llar:krng Android 333
public enum WeatherCondition
Dari class RSSDat-abases tampak method onCreate O digunakan {
untuk menciptakan database dengan perintalr execSQL langsung ke
database, sedangkan method onOpen untuk membuka database dan method MRAINT("hujan intensitas menenglah sesaat,, 2qql
onUpgrade untuk upgrade database dengan menghapus tabel r s s c 1 o c LRAfN (..Hujan ringan,,, 296),
(menggunakan perintah DROP TABLE).
PRAfN (..Hujan ringan sebagian,,
Pada buku ini sebagian class aplikasi RSSCuaca yang bagian dari package , 293) ,
com. contoh. rss. cuaca. data yaitu WeatherCondition, HDRf ZZLE (..ger j-mis intensitas
tinggl bersuhu
WeatherForecast, dan WeatherRecord hanya dicantumkan rendah", 284),
sebagian karena ditujukan untuk efisiensi jumlah halaman buku. FDRfZZLE (..Gerimis bersuhu rendah,,
Secara garis besar fungsi public class WeatherConditi-on sebagai
, 2gl) ,
pendefinisi kode tag (weatherCode> (baris ke-'t1 data XML weather
data . xml) menggunakan method switch dengan keluaran strin[ Class Weat.herRecord. j ava menyediakan variabel
-weather, string
Misalnya jika tag (weatherCode> bernilai 299, maka memberikan nilai ::r"n7r:_untuk kategori.data ya"ng diperoleh dari handler
string keluaran "hu j an intensitas menengah sesaat". Berikut worl-dweatherHandler yang tumu;;rn SAX
akan di akses oreh crass
sebagian kode dari class WeaLherCondition: DisplayDataRSS sebagai liori- ui rincian
.
ditunjukkan sebagian dari cuaca. Berikut
soirce riii pio'tirclass weatherRecord:
publj-c static WeatherCondition qetWeatherCondil-ion (int
public class WeaLherRecord {
code) {
private static List<WeatherCondition>
WeatherCondition cond : V,leatherCondition.NOT
severeCondltions,-
AVAILABLE;
private boolean overrideSevere;
switch (code) i
privat.e boolean severe;
case 305:
privat.e String date;
cond : WeatherCondition. HRjAINT;
private int temp;
break;
private String location,.
case 302:
private String windDlrection;
cond : WeatherCondition.MRAIN;
private int windSpeed;
break;
private int humidity;
case 299:
private int visibility;
cond : WeatherConditron.MRAfNT;
prlvate double pressure,.
break;
private double precipitation,-
case 295:
private Strlng observ_time,.
cond : WeatherConditi-on.LRAIN;
private String link,.
break,'
prlvate Weat_herCondit.ion cond,ition;
setiap MACRO di atas didefinisikan menggunakan tipe string Enum yang
privat.e We;rtherForecast [] forecasts,.
ditunjukkan sebagai berikut:
334 Pcntrograman Smart Phonr. Mr.trl,gllrrtrirkirrr ',1)X Arrrhortl rl,rrr ll.u.krrrg Android ?EA
weatherRecord. severeconditions = new public boolean isoverridesevere ( ) {
ad'I (weathercondition 'BSNow) class weather:Forecast , java ju8a merupakan sebagai interface
weatherRecord. severeconditions
' ' variabel-variabel string yang termas;L dalam'kategori dita forecast
add (weathercondition. IEREEZERAIN) ;
(perkiraan cuaca) dan data tersebut iuga diperoleh dari handle, SAX
. Wor:fdweatherHandler yang akan diakses class DisplayDataRss.
weatherRecord, severeconditions Berikut sebagian sebagai source code class WeatherForecast:
add (w€athercondition . FDRIzzLE) ,
fleatherRecord. sewereconditions . public class lleatholForecaat {
add(neathercondition.l,RAlN-TBuNDER);returnthisdate;
WeatherRecord - severeconditions '
)
'1. Sebagai package terakhir yang akan dibuat dalam project RSSCuaca SavedLocat ion,.
yaitu com. contoh. rss . cuaca . service, digunakan sebagai
fungsi Se rv j- ce dan Broadc a s tRe ce ive r. Berikut ditunj ukkan import j ava . j-o. IOException,-
sejumlah class yang harus dibuat dalam package ini:
java, lmport java.util.List;
a. Public class RSSWorIdWeatherAlert. class ini
lmport java.util_. Timer;
berfungsi sebagai service a/ert seperti yang telah dijelaskan pada
sub-bab Komponen Aplikasi-Service. Berikut adalah source code i-mport j ava. util " Tj-merTask;
class tersebut:
338 -Pemrograman Smart Phone Mottlilittrt,tk.rtr lil )K Arrrlrotrl rl,rrr ll,rr ktttli Attrlrorrl ltAlt() Alrllkl,,r lllili I r,r.rl 339
pubfic void run ( ) { Lastalert : System.. currentTimeM,i. ll is i ) ;
/ / baca lokasi spesifl.k perangkat lbinkac i .
List<Savedlocation> locaLions : dblokasi. upciate ( cievi ceAlertEr-rabledloc ) ;
get-AllAlertEnabIed ( ) ; sendNol, rfica ti on ( RSSWorldWea t-hr:
for (Savedlocation loc : locat.ions) { rA1ert ",.ievr.ceLocation, ;:ecord) ;
WeatherRecord record : l-oadRecord(l-oc. l
loc);
if (record. isSevere O )
1
{
j-f ( (Ioc. lastalert + ]
j
RSSWorl-dWeatherAlert.ALERT_QUIET_PERIOD) < System.
currentTimeMil-1is O ) {
Ioc.lastalert : System. privat-e Ilandier hanciler : new ttandler O {
// kumpulkan data lokasi perangkat / nilai default update lokasi minTime setiap
I 15
Savedlocation deviceAlertEnabledloc : menlt dan mlnDistance seti-ap 500 meter.
dblokasi. get (RSSDaLabases. DEVICE ALERT ENABLED / / variabel update yang terlal-u rendah akan
LOCATIONS); membutuhkan resource besar
if (deviceAlertEnabledloc l: nu]I) {
/ / LihaL dokumentasi pada JavaDoc LocationManager
Weat.herRecord record : GOverride
loadRecord ( RSSWorldWeatherA.l-ert . deviceLocat 1on ) ; public void onCreate O i
if (record. isSevere O ) { this.db],okasi : new RSSDatabases (thj-s),.
if
(deviceAlertEnabl-ed],oc.
( this. timer : new Timer O ;
lastalert + RssWorldWeatherAlert.ALERT QUIET PERIOD) this . timer. schedule (this . task, 5000,
RS SWo r l- dWe a t.he rAl e rt . ALERT_POLL_ I NTERVAL
Sys Lem );
.currentTimeMiltisO ) {
thls.nm : (NotificationManager)
deviceAlertEnabledLoc . getSystemService (Context. NOTIFICATION SERVICE),-
postalCodei" + a.getpostalCode O ) ;
Log.v(Constant.LOGTAG. \\ \ +
* if (a.getpostalCodeO !:
RSSWorldWeatherAlert.CLASSTAG + onStarL"); nu11) i
RS SWorl dWeatherAl-ert .
LocationManager locMgr = (LocationManager) devicelocation : addresses.get (0) .getpostafCode O,"
getSystemse rvice ( Context . LOCATION-SERVI CE ),'
' v (constant ' LoGTAG'
fi"na1 Geocoder geocoder : new Geocoder(this); \\ \\ + RSSWorldrrreatherAf ert. cLASs;og
+ .. updating
Locationlistener loc],istener : new
devicelocatlonZlp to .. + RSSWorl- dWeathe rAlert .
LocationT-istener O { devi-cel,ocation);
break;
public void onlocationChanged (android'
)
locat j-on. Location loc) {
)
Log rr \1 +
Log. v (Constant . LOGTAG,
. v (Constant . LOGTAG, " 't t RS SWorl-dWeatherAle rt. . CLAS STAG
RSSWorldWeatherAIert . CLASSTAG + .. after parslng all
locationProvider geocode addresses devicelocationZfp : .'
LOCATION CHANGED 1atltong - " + loc.getlatitudeo
+ RssworldWeatherAIert.
devicel,ocation) ;
+ l-oc. getlongitude O ) ,'
) eJ-se {
double lati : loc.getlatiLudeO ; Log. v (Constant . LOGTAG, \\ \\ +
double longi : loc.getlongitudeO; RSSWorIdWeatherAIert . CLASSTAG
try { + .. NOT updating
List<Address> addresses : devicelocationzlP/ geocode addresses NULL,,),.
geocoder.getFroml,ocaLion (1ati, longi, 5) ;
)
if (addresses !: nu11) { ) catch (IOExceptlon e) {
for (Address a : addresses) { Log. e (Constant. LOGTAG, \\ \\
Log. w (ConsLant - LOGTAG,
\\ \\ +
RSSWorl-dWeatherAlert . CLASSTAG, e ) ;
342 Pemrograman smart Phone Merrggun;rk,rrr lil)K Arrrlro|(l tl,rrr ll;rr:krn11 Anrlroitl BA[] 9 Aphk;r,r ltliii I r,r,rl
343
RSSWcrldWeal-herAIert.CLASSTAG+" IocationProvider -
" + locProvider);
]
if (locProvider !: nufl) {
locMgr . requestLocationUpdates ( locProvider,
public void onProviderDisabl-ed(String s) {
locationProvider ) else
RSSWorldWeatherAlert'CLASSTAG + "
{
Log. e (Constant . LOGTAG, T
DISABLED _.. + S);
RSSWorl-dWeatherAfert.CLASSTAG + " NO LOCATION
)
RSSWorl-dWeat-herAIert'CLASSTAG
+" l-ocationProvider
.. GOverrlde
STATUS CHANGE -
+ s); public lBinder onBind(Intent intent) {
return nuII;
)
];
privat.e WeatherRecord loadRecord(String
/ nilai default update fokasi minTime setiap
1oc)
/
final WorldWeatherFetcher wwh : new
15 rnenit dan minDisLance setiap 500 meter ' WorldWeatherFetcher (loc, true),'
/ / vartabel update yang terlalu
rendah akan
return wwh.getWeather O ;
membutuhkan resource besar
)
/ / l1hat dokumentasi pada JavaDoc
LocationManager private void sendNotification (String loc,
String locProvj-der : focMgr ' WeatherRecord record) {
TERIA'
getBe stProvide r ( Provide rHe lper' PROVI
DER-CRI
Message message = Message. obtain ( ) ;
true); rr 1\ Bundle bundle : new Bundle ( ) ;
Log . v (Constant ' LOGTAG'
*
346 ['t'tttrolir;tttt;ttt Sittt,rtl l'ltotrl Mlttlilitttr,rk,rtr ,lrlt Atllt,,r,i,l,rrr ll.rr krrrll Arrrirorri
aAl
va1 - l.B,'
vat : 10; i
else if (text. equalslgnoreCase (*j ") )
)
val = 19;
val : 11; )
val = 22;
va1 : 14; l
else if (text. equalslEnoreCase ("n") )
]
else if (text-equalslgnorecase(*f") )
va)- : 23;
val : 15; ]
.l else if (text.equal-slgnorecase ("o") )
vai : 24;
val : 16; )
vaL : 25;
var- : \7; )
)
else if (text.equalslgnorecase('L") )
Class RSSWorl-dWeatherAl_ert merupakan alert service
yang berjalan secara standalone (mandiri) dan akan selalu aktif
val- : 29; setiap user menghidupkan perangkat Android. lntent Service
dapat pula di-shutdown secara -manual seperti yang telah
] dijelaskan pada bab 6, sub-bab Service.
else 1f (text.equalslgnoreCase ("u") )
Service dijalankan method scheduf e O setiap alert yang
dengan nilai alertenabled true tiap periode 5 detik'dai
val : 30; menjalankan method requestLocat.ionUpdateso
untuk meng-.update nama atau koordinat lokasi perangkat yang
) kkan ke L i s t <Addre s s ) dan d itam pi kan padl f ogCai.
d i masu I
else j-f (text-.equalslgnoreCase ("v") ) Setelah user membuka notify alert yang, diirnplementalikan
menggunakan method notifyFromHandf er, melalui URI
_ )1
akan menjalankan intent Activity DisplayDar-aRSS
--^r
vda - J1, .
pada loka-.i loc yang tersimpan dilarn database
RS S Databa s e s (d iiI ustrasikan pada Gamba r 9.21).
)
efse if (text. equalslgnoreCase ("w") )
I&* r,rs pn
)
dl Al€4 kSS fuica
else if (text.equalslgnoreCase ("x") ) !6 r :t &H:ta I 'l i:a 4 -:: loc?E#F' + "-?. ?'l,r,1U -39,'
va1 : 34; Gambar 9.21 Alert Seruice RSSWorl dweatherAf ert yang mengaktifkan intent
Di spialtDataRSS
)
;:;lckage com. coni-oh. rss " c:uaca " service,- time tick sistem
,rirrpcrt- ancjr::-Lo . conr-ent . tsroadcasLReceiver; Adanya perubahan waktu sistem
r nipori ;,rnoroicl . content - Cont-ext; ACTION TIMEZONE CIIAI{GED Perubahan time zone sistem
import androici. content - Intenti roN-eoot_coMFr,ursn Saat sistem selesai boot
irnport android. util . Log; ION PACKAGE ADDED sudah terinstalasi aplikasi
irnport com. contoh . rss . cuaca - Consiant-;
Setelah aplikasi terhapus
ptibl ic class RSSAlertServiceReceiver ext-ends CTION BATTER] CHANGED Adanya perubahan level baterai
tsroadcastReceiver {
Saat charger terhubung
perangkat
private static final String CLASSTAG
Saat sistem melakukan shutdown
llsSAiertserviceReceiver. cf ass . qetsimplelrlame O ;
Penerapan event listenin gdari Broadcast tidak selalu memerlukan permission,
tetapi implementasi Action lntentACTION BOOT COMPLETEDdiperlukan
SOverride permission android. permission. R.gCrtVn eOOf COMPLETED
public void onReceive(Context Context, Int-ent intent) didefinisikan pada Manifest RSSCuaca yang telah ditunjukkan sebelumnya.
{
(intent -getAction
if O -equals (fntent'ACTION- c. Sebagai class terakhir, kita akan membuat public c/ass
BOOT_COMPLEfED) ) { ProviderHelper. java untuk fungsi pemilih provider
Log.v (Constant. LOGTAG, \\
\\ + navigasi (dapat berupa Gps_pRovrDER atau wTRELESS
pRovrDER melalui operator CSM atau hotspot Wi-fi) yang
RSSAlertServi- ceRece ive r . CLASSTAG Criteria.
didefinisikan oleh Berikut adalah source code class
+ " diterj-ma intent via BOOT, mul-ai LocationHelper:
menjalankan service ") ;
context - startservice ( new Intent ( context ' package com. contoh. rss. cuaca. service;
RSSWorldlleatherAlert . class )); import android. l-ocat j-on . Criteria;
)
I Juk!MIark&r€ ht{Bl
lrdqrgE{lbd0.loffiflgl,
setAltitudeRequired ( false) ; lrlrq Llt'nt. Irdffiqt
ProviderHe lper . PROVI DER_CRITERIA . $h!r!?srt4! hilarsd
setBearingRequired ( false ) ; fi: ! I 8.. *.
rrs irlirEr,r.;' '--
er.-,&.
t*
!r i,
r{rtrr}r lrraltr }{'.tr(i*,
.-k*! r.\. rn.y{! 6
ProviderHe lper . PROVf DER_CRITERIA. erdera trDr4f lldqiu
dip4lkts 1 }li,r6;r
setCostAllowed ( false ) ;
ProviderHelper . PROVIDER_CRITERIA.
{,
AEa}rty A4$rry rlatvhy
se tPowerRequirement ( C r 1 t e r i a . NO_REQU I REMENT )
ar.pl.,Stlffi
firtrjLAuEEER'
Dr.pi,!tun!'!{"&rur ot rplryqlF lrlttrr
Provi-de rHe 1pe r . PROVf DER_CRI TERIA .
setSpeedRequired (f af se ) ,'
ry
] -ar F{itflPvHS
ll$l,*r ,*jis
l o.u.r ru
354 Ponrrollr;rrrt;rrr Sttt;rrl l'ltorrr,Mcttlillrttt,tk,trt'il)K Arultotrl rl,rtr ll,tr kttrli Atrrlrrttrl []Al] () A1rhk,r,,r l(',', I r,r,rl
355
f+plikasi RSS-USGS
Ilala RS:i irer,rrl ,lntuk apiik.lsi RSS-USCS ber:i.rnrb,:r'dari rveir s,:r',ic,- Li'i(,1,
rlari lrnk IJRL nt,tp : i / eari.lnqt-i.rke " r1"!qs . r.rr)..r,/c,altrrr:tuai<es,'
cataiogs/ (Gambar 9.241 berupa data kegenrpaan reairi,'ne berforntat
KMI (diakses menggunakan Coogle Earthi rlan X&{i 1.arrg akan cligunaxan
apiikasi RSS-USCS ini. Proses parsing data XML berbt-.da rJengan apiikasi I- i{frqcg fivt 0ebrr.tq t0 sbrtr tD faddi
R.SSCuaca (parser SAX) meiainkan akan diteraokan oleh Darsei' L)CM var:g
implementasinya lebih daripada dari SAX menggunakan pustaka parser dari
package j avax . xml- . parsers dan package orq. w3c . dom.
Aplikasi RSS-USCS ini merupakan hasil modifikasi dari source code buku Untuk dapat membaca data XML gunakan browser Firefox
"Professional Android Application Development, 2nd Edition" ditulis -+Page Source. Berikut adalah sebagian isi
buka Menu \,,ie't,
oleh Meier R, di mana data kegempaan berformat XML diperoleh dari data dari file iJa;-ni . 5 . xml:
hasil me-reguest pada URL: htt-p : / / earLhquake . usqs . qav / <entry>
earthquakes/cataloqs/1day-M2 .5. xml (Cambar 9.24) yang <j-d)ur:n: earthquake-usgs_gov:
menampilkan halaman web informasi gempa di seluruh dunia yang teriadi us : c00012gf </ ad>
dalam satu hari dengan magnitudo terrendalr sebesar 2,5. <title>M 5.3, Loyalty fsl_ands, New Caledonia</
titl-e>
<updated>2 011 - 01 - 1 3T1 7 : 2 6 : O 62< / upd.ated>
<1ink re_I:,,alternate,, type:,,text/html-
href:"http : / / earthguake. usgs . gov /
earthquakes/recenteqsww,/euakes/usc00 Ol2gf .php,,
/>
<summary type:,,html,,)
356 )r.1111111,1
1111,1tt'irtt,trl I'ltottl lVlt'tt1'1itttt,rl,,ttt ,\rrrltrrtrl,l 1;1 ll,sr l,;q11'/\r1,l1,rtrl IlAll (t Atrlrk,r,,r li',', I r.r.rt
"ltfr 357
<I ICDA'IA [<img s ::c:"htt_p : / i' eal:t-nquake . Lr..t.r s {l'rri d.il; xM[- iersebut akan cliekstraksi sebagian crata srrirrli rrr rr.rl,,,rr r,,
j i l.:) {r,pdat_e,l), ( ij.nk>, dan (qec:ss:
gov/im.rgesu/globes,/*20 170 . )pg" .^1-
poirrl ) y.rrrli ilr,r ir,,
,1,1.'i1,?.-iip lor<as,i Bempa <Ji daiam tag <eltry>. Saat aplik.rl,r
I oB.4 3ot # 116; E" ali qn:"1eiL" hspace:"?O" ,'I (i-'-'f hu I :-;irn). ,,u.,,,,,,,, ,
'lata X'vlL dari web service u.s.gs . grov tidak difieriukan A,rrr k.y r.rrr.rr.r , r.rr
January 13, 2017 7'/:26:,06 U'IC<br>Friclay, january !4,
r
.:{,r/L atau KML dapat diperoleh graiis tanpa melalui proses
2077 O4 25;06 AM at epicenter<,/p><p><strong>Depth</ ^.g,rt,.,.,
Seperti proiect-project. sebelumnya, berikut akan ditamprrk.ur l.urpr,rrr
strong> : 72 - 40 km (7 .17 mi) </P>l I > pembuatan oroject apl ikasi RSS-USbS:
( / summary) 1. Buat project baru Android dengan nama RSIUSCS dr..prr,,r i.,r
<georss :point>-20 - 61 26 168 " 4351</ georss :Point> sebagai berikut:
. Nama project : RSS-USCS
<georss : elev)-12 400</ qeorss : elev>
. Application Name : RSS-USGS
<category labe1:"Age" term:"Past day" /> . Package name : com.contoh.rssusgs
</entrY> . Create Activity : RSSUSCS
<entry> . SDK :3
(id)urn: earthquake-usgs-gov: us : c00012 f4</ id> .
Build Target AVD : Minimal Coogle Apt t.f,
<title>M 5.2, Loyalty Islands, New Caledonia<,/ Pada aplikasi ini hanya digunakan AVD Android disebabk.rrr
rrrr.r!
title> mengimplementasikan
.Apr coogre Maps (berupa tamlrir.rrr pr.r.r)
Meskipun demikian, akan digunakan Broadcast It:t.r,rv,.r
<updated>2011-01-13T1 6 : 51 ; 292< /updated>
sebagai penerima broadcasi lokasi user menggunak.rrr r
<link re1:"alLernate" type:"text/ht-m1" LocationManager dan diterapkannya providE NI.:,t,w()l(K
1.r.,.,
href :-htLp: / /ear t.hquake.usgs.qov/ PROVIDER untuk memperoleh koordinat lokaii user.
earthquakes/recenteqsww,/Quakes/usc00 072f4 .php" / > 2. selanjutnya, modifikasikan file manifest Androidlvlani f <.r;r
. xrrr r
()
358 Pemrograman smart Phonr_'Mgnggurr;rk,rrr lil)K Ar1fulrrl rl,rrr ll,rlkrrrliArrtlr6irl 8Al3 Aphh,r,,r l{1,1, I r,r,rl
359
10 <action android:name:"android.intent' "\jrri.,lrr,,_,:trilr air){"irr iil l-?-l ,ir, L*l iJ
action.MAIN" /> ;A,
- : _:.-._,,":. --:
11 <category android:name:"android' ,. .
t2 intent-filter>
</
" "-4" : C''':t-t.:a:f;"'!.:::f iC-ER
13 </activitY> B .fte&ens i3,ctr*iyi
1_4 <activi-ty android: label:"Preferensi RSS USGS" LE .og'nce*E}a (Acfvrry;
15 androi-d: name:" . Preferensi" / > ffi , rra*lUe.Curgo (,orovder)
I €:mm"go*,*'r*s**fiaps (ttesthr.ry)
16 <acLivity android:fabel:"Peta Gempa - USGS"
android: name:" . PetaGemPa" / ) Gambar 9.25 ManifestAplikasi RSS-USGS pada menu disptayApplicalim
PcmrOIir;rrr;rrr !irrrlrl l'lto1o Mot.tyiyltttt,rk,rtt',1)K Atrrltnrrl rl,rll ll,rlkrrlli Attrirtrrrl liAll'l Agrhh,r'.r li',', L,.il ]61
360
t_ring>
Selanjutnya modifikasikan file string resource strings..xml
yang <./ s
4.
i["n diimplementasikan pada Ul aplikasi diantaran.ya, title aplikasi, <strlng name:"menu Peta gemPa")
titte menr, title Map view, uRL feed, berikut ditunjukkan source code Peta Gempa
file strings. xml:
< / string>
<?xml- version="1. 0" encoding:",L5-8"?> </resources>
<resources>
<string name:"app-n36e")RSS-USGS</ string> 5. Tahap berikutnya akan dibuat file XML baru sebagai resource preferensi
<string name:"quake-f eed") UI, untuk membuat file XML tersebut buka menu New Android XML
/ File dan klik button Preference (Cambar 9.26) menggunakan nama
ht.tp : / / earthquake ' usgs'gov'/eqcenter file menupreferensi.xml yang secara otomatis file tersebut
catalogs/ ldaY-M2 . 5 . xm] tersimpan di direktori / res / xm:-.
</string>
NwAtrdroad )CaL Flle & "
<string name:/'quake-host") iureamaadrcid*rlrrrc. *TTil-
U5U5
'fif
tr ing>
<,/ s Pro*rt l!9-USC1
Fri*
<string name:" sou r ce" > runuprcistnlr,rml
#licrrtrr L-cct
</string> EfJ iiet.cr{ Cr,{t
rar $..1
)1;
Waktu Kejadian
3rir{l lhr rmt dtmsi tcr l}!t Xhlt fik;
</ string> Prdqsr:Scm
<string name:"auto-update-prompt">
Otomatis UPdate?
</ string>
<string name:"update-f req-prompt ")
$ i-ilrc.]
Gambar 9.26 Pembuatan layoul preference pada menu NewAndroid XMI I th'
Periode Update
</ string> Berikut adalah kode lengkap dari layout menupref cr('rr:; i ' xtrt I
i,'erbentuk dialog, irox yarng nilai spinnern'a diciefinisii<an pada file arr.ry
update oLomatis" ':irinll .r.t:'.ii/s,- -:iml (akan dijelaskan pada rahap seianiutnya). lr.rrl.r
android : de f aultValue:"true " i.ianlbar !i.27 ciitr;njukkan rnenu preferensi aprrkasi RS5-USCS y.r.1i
herjalan pad:r AVD.
/>
<ListPreference
android: key: "PREF UPDATE FREQ,,
android : title:" Periode Autorefresh" Cl-nmatis Re{re,sh
android : textColor:"# 0 0 0 00 0 "
android:summary:"NiIai besaran waktu untuk Periode Autorefresh
aulorefresh data RSS" ,S&.
values"
android : dialogTitle:"Periode Ref resh"
androi-d: def aultValue:" 60"
l>
<ListPreference
Gambar 9.27 Menu Prefereni aplikas RSS-USGS
android : keY:" PPgF-MIN-MAG"
android: title:"Magni-tudo Minimal"
android: textColor:"#000000" 6. Tahap selanjutnya akan dibuat file string resource array dengan cara
memilih menu radio button Values pada window New Andiid XML
androld:suftftdry://Nilai magnitudo terendah File dengan nama file arrays - xm] secara otomatis fire tersenbut
yang akan dit.ampi-1kan pada dlsplay" akan tersimpan di direktori / res /walues (Cambar 9.2g).
a n d r o i d : en tr i e s :,, a r r a y / rtagni tude_op ti on s "
@
366 Pernrollrailtan Siltarl I)lt0rt0 Mr,rrli;1iltt,tk,rlr Atrrltrrtrl rl,rll I l,l{ klllll /\rl(lrol(l liA[] () Aphk,r',t lili', I lrrl .Jb/
"l)K
11 and::oid:clickable:"Lrue"
72 android:api-Key:"0mlMpt8b4uHprcHlHlfQR2CB7ARHn9N9
GPk%Uw" />
i{ 3 &
5 f+!en 'i.'i.,'r'
13 <,/Linearlayout>
10 l,tertit i..j., : {-.rr
B. Sebagai layout XML yang terakhir dibuat, buatlah file layout XML
baru yang disimpan pada direktori /res/Layout dengan nama
6 file rincian _gempa. xml. File ini berfungsi sebagai resource
Ul untuk dispTay dengan tipe Layout Layoutlnfliter yang
't diimplementasikan pada host class RSSUSGS . j ava, berikut adalah
iiep larrr iS,,'
source code file layout rincian gempa:
1 **.'
L-_--*--" *,J I
<?xml version:"1. 0" encodi_ng:",r11-8"?>
(a) (b) <LinearLayout
xmlns : android:"http : / / schemas . android . com/ apk/ res /
Gambar 9.29 Menu Spinner (a) Periode Refresh (b) Magnttudo
android"
android : layout_width:"fi1 1_parent "
7. Tahap selanjutnya membuat layout XML dengan nama file peta- android : layout_height:"fil l_parent "
gempa . xm1 disimpan di direktori / res / layout untuk
difungsikan sebagai desain layout Ul MapView berupa tiie image android, : padding:" 1 0dp")
peta Google Maps. Seperti yang telah ditunjukkan contoh aplikasi <TextView
CekLokasi, dalam layout ini juga harus didefinisikan class ltlapView a n dr o i d . i d: " G + i d,/ qu a ke De t a.i l_ s T.'e x tVi ew,,
yang ditunjukkan dalam tag baris ke-6 disertai nornor API key (baris
ke-l2) yang diperoleh dari registrasi MD5 fingerprint pada sub-bab android : J-ayout_width:"fil l-_parent "
Registrasl API Map. android : 1ayout_height:"fi1 I_parent "
androld : textSi ze:" L 4 sp"
C1 <?xml version:"7.0u encoding:"ut-f-8"?> android : color:"#FFFFFF"
C2 <Linearlayout androi-d: autol,i.nk: " aII" / >
03 xmins : android:''Iittp: /,/schemas - android . coml apk/ <,/LinearLayout.>
res,/ androi-d"
04 android:layout_width:"wrap-content" Pada Gambar 9.30 ditunjukkan layout bertipe L, ryout
Inflater pada Ul aplikasi RSS-USCS. Nilai string r(,source
05 android:layout_height:"wr:ap-content."> quakeDetail-sTextView akan diperoleh dari c/;rss host
05 <com. google. android.maps .MapView RSSUSGS. j ava.
0"1 androj-d.16:,,@+id7,map_view,,
CB android:layout_wj-dth:"fil-l_parent"
09 android:layout_hej-ght:"fil1-parent"
10 android:enab]ed:"Lrue"
()
368 Ppntr6llratitittt Sttt,ttl l'ltotto Mt,tttilltttt.rh,rtr',1)h Artrltlt'l rl,,tt ll,rr kttrll Atrtltoltl llA13 Agrhk,r',r l{1", I r,r,rl 369
import javax. xml. parsers. DocumentBuilder;
import javax. xml.parsers. DocumentBuilderFactory;
imporr lavax.xml.parsers. ParserConfigurationException;
\11
Penrrogranran Sntart Phort0 Mcn111,irrtr,tk;rrr lll)K Arrrjrorti tl,rtt Il,tr krttli
Atrrltilttl
370
public void onltemclick(Adapterview<?>
public class RSSUSGS extends Activity i _av, view _w. int _index, tong arg3) {
selectedeuake = earrhquakes.
listvie, ear:thquakeListv.ieu; get (-index) ;
ArrayAdapter<Datacenpa> aa; showDiatog (qUAKE DIALOG),
)
A :ayLisL<Datacempa> earthqnakes = new ));
Arraylist<Datacenpa> O;
int layoutID = andxoid.R.tayout.sinple tist
sLaLic finaf piiwate ini oUA(E DIALOG = 1; iten,1;
Datacenpa selectedouake, aa = new ArrayAdapter<Datacenpa> (rhis,
layoutfD, earthquakes) ;
static final private int lilENU UPDATE = Menu. earthquakelistview. selAdapter ( aa ) ; ,
HttpURLConnection httpConnection :
GOverride ( HttpURLConnection
) connectlon,-
372 _ Pemrogramarr Srrrarl l'lrono Mcrrllliurtakan SI)K Andrord dirn ll,rr:krrrli Arrrlrorrl BAt] 9 Atrlrk,r',r l(lii' I r.r'rl 373
inr responsecode = httPconnection. = {Efenent ) entry. getElementsByTagNane ('tit1e ").
gerResponsecode {), itsem(o) t
Elenent g =
if (responsecode == HttpuRlconnection. {Elenrent) entry. getElementsByTagName ( "qeorss: point." ) .
HTTP_oK) { item(o);
Inputstrean in = Element x,hen
httpconnecrion . getlnputstream ( ) ; = (Element)entry.getElemenlsByTagName('updated").
it€El(0);
DocumentBuilderFactory dbf - Element link =
- pemrogranran Srrriul Plurrre Mcrrlillrrrrak;rn Sl)K Anrlrrrid rlan ll;rckrrrl: Arrrlrrtirl BAB 9 Aplikast RSS lnrul 375
374
) catch tambahDatacempa (data) ;
(Exception e) i
)
)
e.printstackTrace O;
]
catch (MaIformeciuRlException e) {
print.StackTrace ( ) ;
e.
String [] catch (IoException e) {
e.print.StackTrace ( ) ;
Iocation = point. split (" ") ;
Location I : catch (ParserConfigurationException e) {
e-printStackTrace O ,'
new Location ("dummYGPS") ;
catch {SAXException e) i
e. printStackTrace O ;
I - setlat j-tude ( Double - parseDouble (locatlon t 0I ) ) ;
finally
I . setlongitude ( Double - parseDouble ( location [1 ])); {
Str j-ng )
ConLenlResolver = getContentResolver O;
rnagnitudeString. length ( ) -1 ; "a
double
String w : ProviderGempa.KEY DATE + r\ : $ +
magnitude : Doub1e -parseDouble (magnitudeString'
); _quake. getDate O . getTime O ;
substring(0, end)
/ I saat data gempa kosong masukkan data baru
details - ke provi-der.
if (cr.query(ProviderGempa.CONTENT_URI, nu1l,
details. sPlit- (", ") [1]'trim O;
w, nul1, null).getCountO==0) {
DataGemPa ContentValues values - nehr
Contentvalues {);
dala : new DataGempa(qdate, details, 1, magnitude'
linkString) ; values.put (ProviderGempa. KEY DATE,
// lakukan quake. getDate O . getTime O ) ;
values.put (ProviderGempa.KEY LOCATION
penambahan Pada list data gemPa
NAME, _quake.getDetaj-ls O ) ;
3S0 - Pemrograman Smart Phone Menggunakan SDK Android dan Hacking Android BAB 9 Atrhkarr llliS l lnrl 381
title")'
ouakeDiaLog. seLView (quakeDetailsVlew) ; int minimumMagnitude : 0,.
return quakeDialog.create O; bool-ean autoUpdate : fafse;
) int updat.eFreq : 0;
return null;
) private void updateDaripreferensi O {
Context context :
// Handle data yang di display pada QUAKE_DIALOG getApplicationContext ( );
GOverride SharedPreferences prefs :
public void onPrepareDialog(int id, Dialog diatroE) PreferenceManager . getDefaultsharedpreferences ( conte
{ xt);
switch (id) {
case (OUAKE DIALOG) :
minimumMagnitude : Integer.
I / svat format tanggal parselnt (prefs. getString (Preferensi_. pREF MIN MAG,
..0r,)
$ impreDar""o.*..i i::)ffi;;;TH:: "1, l** );
updateEreq : Integer.parselnt (prefs.
String dateString : sdf. getString (Preferensl. PREF_UPDATE_FREe, ..0,,) ) ;
format (selectedouake.getDate () ) ; autoUpdats : prefs. getBoolean (preferensi.
/ I Gabunqkan informasi gernPa PREF_AUTO_UPDATE, false) ;
String quake'fext : "Magnitudo Gempa " )
+ selectedQuake-getMagnitudeO + "\no + selectedQuake'
getDetailsO + "\n" + selectedQuake-getlink(); GOverride
public void onActivj_tyResu1t (int requestCod.e,
AlertDialoE guakeDialog : int resul-tCode, Intent data) {
(AlertDiaJ-og) dialog; super . onActivi tyResult ( requestCode,
quakeDialog. setTitle (dateString) ; resultCode, data);
TextView tv = (TextViewlquakeDialog.
findViewByld j-f (reguestCode :: SHOW_PREFERENCES)
(R. id. quakeDetailsTextView) ;
if (resultCode :: Activity.
tv. selText (quakeText) ;
RESULT-OK) {
break;
updateDariPreferensi ( );
refreshDataGempa O;
382 Pemrograman Smart Phone Menggunakan SDK Android dan Hackrng Androtd
IIA[]() ApIk;r,,r lii,li I r,r,rl 383
htLpConnection . getlnputStream ( ) ;
DocumentBuilderFactory dbf :
)
DocumentBui tderFactory. newf nstance (
),.
DocumentBullder db : dbf
Dari source code class RSSUSGS tampak dalam state onCreate ( ) newDocumentBuiLder ( );
akan mengeksekusi method l-oadDataGempaDariProvidero
untuk membaca data dari basis data database_qempa. db dan proses
selanjutnya dilakukan pada request dari web service diawali method urf .
/ / Parsing data feed dari Uli(ill
openConnection O dan parsing data yang diimplementasikan class
org.w3c.dom.Document, or9.w3c.dom.El-ement, dan org. Document. dom : db.parse(in);
w3c.dom.Nodelist sebagai parser DOM (Document Obiect Model), Element docEl_e = dom.
sebagai bagian dari method ref reshDataGempa O . getDocumentElenent ( );
Seperti yang telah dijelaskan dari contoh-contoh sebelumnya, parser SAX
merupakan berbasis event, sedangkan pada parser DOM digunakan Iist
Nodelrst dengan menerapkan method getDocumentElement o / / aapus data gempa sebelumnya
berfungsi agar dapat mengakses ke chi/d node dari suatu e/ement pada earthquakes.clear () ;
dokumen XML. l-oadDataGempaDariprovider ( ) ,.
for(inti:0;i<
URlConnection connection,' nl.getLengthO; i++) {
connection : url.openConnection ( ),. EJ-enent entry
: (E1.peDt) nl.iteu{i),.
HttpURlConnection httpConnect ion : Element title
( IlttpURLConnection ) connection ;
(Element) entry. getElementsBflagName (..title,, ) .
<entry> openconneceion (,
URL i http ; //earthqurke. u!g6. goy
<id>urn : earthquake-usgs-gov: us : c00 0 12gf</ id> /eqcenter./cataloga/1dey-!.t2 . 5 . xmL
</entry> Data string yang telah diperoleh dari proses di atas dimasukkan ke
00.56: 5.5 Banda Sea 10. Proses selanjutnya buatlah public c/ass ProvlderGempa. ; ava
di dalam package com. contoh. rssusgs bertipe class Content
09.02:3.'l Daminican RePublic Provider untuk difungsikan sebagai interfice. Clais ini digunakan
r€gion agar dapat mem-publish data dengan model pengalamatan UF.i
dengan schema content : / /, seperli yang telah jelaskan pada
project RSSCuaca sebelumnya. Class ProviderGempa suatu juga
09.35:3"4 Fox Islands sebagai penyedia fungsi pembuatan, update, dan upgrade tabel yang
tersimpan dalam database database gempa . db. Di bawah ini
adalah saurce code iengkap untuk class ProviclerGempa tersebut:
10.51:3.4 Oklahoma
Atrtlrrtttl
llA[3 9 Apltk,r,,t l{:,1' I r,r',1 3U9
388 Pemrograman smart Phort0 Mcrrlllirrt[tk;rrt l]l)K Arrrlrord rl;ln llitr:kttl11
inport android. database. SQlException i "la!itude";
import android. database. sqlile. SoLiteDatabase; public slatic final String KEY I,OCATTON LNG =
import android. database . sqlite . SQliteopenHelper; "longitude",
import android. database . sql ite . SoliteoueryBuilde4 public static final String KEy MAGNTTuDE =
imporl android. database . sql ile . SoliteDatabase . "magnitudo";
CursorEactoryi Public static Jina-I Stling KEY IINK = "]ink",
import android. net. Uri;
inport android. text . Textutil s; // rndeks kolom
inport android. util .1,o9, public stalic final int DATE_CoLUMN : 1,
public static final int DETATLS_COLUI,IN = 2;
public sratic Jina1 int LONGITUDE-COIUMN = 3;
public class PfovideEc€e{ra e:tends contentProviale! { public static final int IATITUDE_CoIUMN 4, :
public static final int MAGNITUDE_CoIUMN = 5;
public static final Uri CONTENT_URI = Uri. public static final int LINK_CoLUMN = 6,
parse ( "conteat: //com. coatoh. !ssutg3. PlovideE/detabase-
g€qraz); // class helper untuk fungsi perLbuaran. buka, dan
Penqaturan wersi database
// clefinisi Database private static class earthquakeDatrbaseltetpe!
privaLe sQliteDatabase DBgenpai extends sQlit€oPerBelPe! {
Private static finar string DAT]\BASE CREATE
private static {inar strinq TAG = 'providelcq)a"; _
private static finaf string DATABASE_NA.I4E create tabfe n + EARTHQUA(E TABLE +
private slatic final int DATABASE-VERSIoN = 1t + KEY-ID + " integer primaly key
private static 1inal String EARTHQUAKE-?ABLE utoincrenent, "
"tab61_g.rq)e"; + KEY-DATE + " INTEGER, '
+ i<EY LOCATION NAME + ' TEXT, '
// Nana kolom + KEY_IOCATION_IAT + " I'LOAT, '
public static final string KEY_ID = "_id"; + KEY_LOCATIoN_1,NG + " FLoAT, ..
public static Jinat String KEY_DATE : "tangga1"; + KEY_MAGNITUDE + " ELoAT, "
public static Jinal String KEY_IoCATION_NAME = + KEY_IINI( + " TExT)i";
"lokas i",
public static finaf String (EY_LOCATION LAT : Public earthquakeDatabaseHelper {Cont e
390 _ Pemrograman Smart Phone Menggunakan SDK Android rlan llackrng Anrlrotrl lJAtt 9 Altltk,t,;t l(liii I rr.rl 391
xt context, String name, CursorFactory factory, int
version) { prlvate st.atic flnal rnt eUAKES : T.
private static final int eUAKE ID
super ( cont-ext, name, factory, -
f .
version) ;
prlvate sLatic final UriMatcher urj_Matcher;
)
dan dal-am proses upgrade database dari versi.. Context context. : getContext O
+ ,.
GOverride
/ / konstanta digunakan untuk membedakan dari
request UB.I yang berbeda public String getType (Uri url)
i
sw_i tch (uriMatcher.march (uri) ; {
392 Pemrograman Smart Phonr: Mcnllllrrnakan SDK Androitl rlan llar:kirrli Arrrlror<l NI
IJAII() Arrhk,r,,r ltli'i I rlrl t ar" 393
dsn lJc i-1"1,,-I
,, r,rOnr
Pr,....
String orderBY;
CASE QUAKES: return "vnd. android' if (TextUtiIs. isEmPty (sort) ) i
cursor . dir/vnd. contoh ' rssusgs" ; orderBy = KEY_DATE;
CASC QUAKE-ID: return "vnd ' androi:d ' ) else {
cursor. dirlvnd- contoh ' rssusgs"; orcterBy = sort;
throw new
clef ault: )
(*URI tidak dldukung : " * uri);
Il}egalAr:gumentException
/ i aPY'LY query ke da1-abase tsb
l l so:: c = eb " quer y ( DBgempa, pr:o-1 ect ion, sei
Cu
return count;
baris: " + _uri);
)
)
/ / unLuk fungsi updat.e database
GOverride
@Override
public i,nt update(Uri uri, ContentVaiues
public int deJ-ete(Uri uri, String where. String[] String where, String[] whereA::gs)
vaiues,
whereArgs) { {
1nt count;
int count;
switch (uriMatcher.match(uri) ) {
switch (uriMatcher.match (uri1 ; {
case
case OUAKES: count : DBgrempa.
QUAKES:
update (EARTHQUAKE_TABLE, values, where,
count DBgempa whereArgs) ;
delete (EARTHQUAKE TABLE, where, whereArgs); break;
case QUAKE_ID: String segment = uri.
break; getPat_hSegments O .Set (1),.
396 l'crrrrollranurrr lirrr,rrl l'lrorrt ltilcttllllurr,rk,rrt lil)K Arrrlrorrl tl,ut ll;tr:knli Attrlrortl
ItAIJ() ApLk,r',r lliili I llrl
19/
getContext ( ) . getContentResolver ( ) dan link URL) untuk digunakan Main Acrivity
RSSUSGS berupa
notifyChange (uri, nul1) ; ke Arraylist <oat"acemf.r'y"1s
i s t.vi ew dengan cara men!-or"riiJ"" r*in-"a"ait"rfJt"n
af.ai.., paaa
L
return count; i i g, .
Berikut ditunjukkan sourcecode "d"t. "
) tengkap dari class DataGempa:
)
package com. contoh. rssusgrs;
@Overrlde @Override
public void onCreate (Bundle savedlnstanceState) { public void onDestroyO {
400 Pemrograman Smart Phone Mengliunakan SDK Android dan Hackrng Android tlAB 9 Aplkasr RSS I oort
401
super ( ) ,'
earthquakecursor . close ( );
database_gempa : clltrsor,'
super. onDestroY ( ) ;
koordinatGempa :
new Arrayl,ist<GeoPoint> O,.
detailGempa : new Arrayli"sL<String> O ;
)
public static fina] String PREF MIN MAG : 'PREF 11.23: 5.6 Simeutue
(Saal user meogklik
link U R L)
MIN_MAG,,;
publi-c static final String PREF-UPDATE-FREQ
*PREF-UPDATE_FREQ,,;
SharedPreferences Prefs ;
GOverride
public void onCreate (Bundle savedlnstanceState) {
TYPE_ORIENTAT ION
va.Iue[0]: Azimuth
value[1]: Pitch
Azimuth adalah sudut horizontal
searah medan magnet kutub
utara (Utara: 0, Timur: 90,
Selatan : 1 80, Barat-270).
ffimw#ffirusffi f t*,t B!|!€ 1fS{iUtr!
Sudut Pitch, dengan bidang Putat
value [2] : Ro11 sumbu X (Perangkat Pada Posisi ratfar{,$artt 6.N;:Ss. I
|j'-a,(
Lodlll&r.Lrt
| I
utf l^((
uiMlrr
._-ft.,;,4.a*'i
Karena dalam project ini memanfaatkan sensor Accelerometer maka cukup Nilai percepatan yang diperoleh dari sensor Accelerometer tersebut
rriii iiL" Jit"rapkin pada Emulator AVD, disebabkan hingga kini Emulator merupakan dampak dari adanya resultan gaya yang dipengaruhi (lr)
iib' Ai;r^ *"ny"diuk^n emulasi native sensor-sensor tersebut.
ini dapat
Sehingga
berjalan
dari massa benda, yangdidefinisikan dari Hukum Newton-tt(persimaan
tetap diperlukan perangkat Android fisik.agar.aplikasi 1 0.1).
t,,'11',111
llAll l0 Atrlrk,r',, fil1rlt,rrrl 415
4l4PemrogramanSmartPhotteMettlll'itttt.tk.lttlil)KArrrlrrrrrlrl.lrrll.rr:kttlHAndrotd
getSystemSei:vice (SENSOP. SERVICE) ;
import android. graPhics. Canvas;
import android. graphics . BitmapFactory ' Options;
/ / Jalankan instance PowerManager (utk
irnport android. hardware . Sensor;
pengaturan WakeLock)
import android. hardware. SensorEvent,'
mPowerManager = (PowerManager)
lmport android.hardware. SensorEventLisi:ener;
getsystemService (POWER SERVICE) ;
import android. hardware . SensorManager i
import android. os.Bundfe;
/ / Jalaokan j-nstance WindowManager
import android. os . PowerManager;
mWindowManager : (WindowManager)
import android. os . PowerManager'Wakelock;
getSystemService (WINDOW_SERVICE ) :
import androlcl . util . Disp-l-ayMetrlcs;
mDisplay : mWindowManager. getDef aultDj-splay () ,'
rr,pcr:t android - view - DrsPraY;
impor:t- androi-d. view - Su rf ace,'
/ / set layar display ke mode lock brigtrtness
i.mport an,:lroid. view.View;
ful-1
inpcrL andro.id. view. WlndowManager;
mWakelock : mPowerManager.
newWakelock (PowerManager. SCREEN BRIGHT WAKE LOCK,
public class Accei.erometerDemoAct'ivity extends
getClass ( )
ActivitY {
.getNarneO);
private SimulationView msimulationView''
private SensorManager mSensorManager; / insLantiate display simulasi dan set
/
sebagai content activity
private PowerManager mPowerManager;
mSimul-atlonView : new SimulaticnView(this) ;
prj-vate WindowManager mWindowManager;
setContentVi ew (mSimuf ationView ),'
private Display mDisplay; //defini-sikan display
]
C.efauIt Perangkat
private Wakelock mWakelock;
GOverride
protected voi-d onResume O {
super. onResume O ;
GOverride
mWakelock. acquire ( ),'
public voi-d onCreate (Bundfe savedlnstancestate)
supe r . onCreate ( savedl ns tanceState ); // lalankan simufasi
mSimufationView. startSimulation ( ),'
msensorManager : (SensorManager)
posY2 : -ymax;
final-floatl:PosX2 +
satumlnusGayaGesek * dTC
* 1posX2 - posxl) + mAccelx
dTkuadrat,'
)
finalfloatY:PosY2 +
*
satuminusGayaGesek
* d'TC * (posY2 - posYl) + mAccelY
cfass SistemPart.ikel- {
dTkuadrat;
posXl : PosX2; static final int JML_BOLA : 10;
posYl : PosY2; private Particle partikelN[] = new
PosX2 : -xrndxi
awal) * (1.0f / 1000000000 .0t) ;
) dx +: ( (float) Math.
random ( ) - 0.5f) * 0.0001f; / /dx:dx+translasi
Iong
Public vold uPdate (float SX, float sY, dy +: ( (float) Math
timestamP-now) { random () - 0'5f) * 0.0001f;
/ / takukan uPdate di- tiap Posisi-
dd:dx*dx*dy*
partikel 4.. -
uYr
updatePosisi(sx, sY, timestamp*now) ;
/ / t-enLukan koordinat
/ / maks iterasi komputasi tumbukarr trans las i
partikel finaf floatd: (float)
fiNAl iNt NUM-MAX-]TERATTONS
: IO;
)
bolaN -
getMetrics (metrics);
publi-c float getPosX(int i) {
mXDpi : metrics.xdpi,.
return PartikelN I j-]'PosX2;
rnYDpi : metrics.ydpi;
i
mMetersToPixelsX = mXDpi / 0.0254f; //
publi-c float getPosY (int i) {
konversi satuan dpi ke meter
return PartikelN Ii] 'PosY2; mMetersToPlxe]sY = mYDpi / 0.0254f.;
)
// instansiasikan image bol-a dan
)
background
opts-inDither = true,'
case Surface. ROTATION_0 :
opts. inPreferredConfig : BitmaP.Configr.
msensorx : event.values[0]; //
RGB-5 65;
baca nilai percepatan bidang sumbu X
: BitmapFactory.
mWood
mSensory : event.values[1] ; / /
decodeResource(getResources O, R.drawable.wood, opts) ;
baca nilai- percepatan bidang sumbu y
i
break;
/ / saat- perangkat dal_am state posisi ke
GOverride arah timur
prot.ected void onSizeChanged(int w, int h, int
case Surface. ROTATfON_90 :
oldw, int oldh) {
msensorx : -event.vafues[1]; / /
/ / LriLung panjang dan lebar dari layar
baca nl1ai percepatan bidang sumbu X
display utk menentukan pusat
mSensory : event.values lOl ; / / baca
// sb X dan Y nilai percepatan bidang sumbu y
pusatSbX : (w - mBitmap.getWidthO) *
break,.
0.5f ;
pusatSbY: (h - mBj-tmap.getHeightO) * / / saaL perangkat da1am state posisi ke
n trr-
arah se]atan
case Surface. ROTATION_1g0
plgBatasHorizontal- : ((w :
mSensorX : -event . values [0 ]
mMetersToPi-xelsX - diameterBola) *0 .sf),' ,.
426 Pemrograman Sn rut t Plrrrttr' Mlttl ilitttr, tk, rr il)h Arrrlrrrrri rl,rrr I r1'Atrrltrrrd
l0
r I
: )
final SlstemPartikel particleSystem
mParticIeSYStem; Dari class AccelerometerDemoActivity tersebut terlihat
final tong t-imestamP-now : menerapkan sejumlah persamaan fisika diantaranya hukum NeMon,
fungsi lntegrasi Verlet dengan modifikasi fungsi waktu, dan penerapan
sensorNanoTimeStamp + (System'nanoTime
o generator nilai random sebagai nilai faktor koefisien gesek dari tiap
bola pejaltersebut.
cpuNanoTimeStamP) ;
finaf float sx : msensorXi Bagi pembaca yang belum memahami hukum-hukum fisika dapat
membaca referensi buku-buku Fisika di dalam bab Mekanika Klasik.
final float sY : mSensorY;
Disebabkan aplikasi ini mensimulasikan pergerakan suatu benda bola
pe.ial akibat dari gaya luar, yaitu perubahan sudut inklinasi dari bidang
particJ.eSystem.update (sx, sY' timestamp- datar virtual. Caya tersebut didefinisikan dari Hukum ll Newton, yaitu
now) ,' iika lumlah gaya yang bekeria pada suatu benda tidak sama dengan
nol maka iumlah gaya tersebut akan sebanding dengan percepatan
yang dialami benda. Konstanta pembanding antara iumlah gayl lan
final floaL xc : Pusatsbx; periepatan adalah massa benda tersebut. Yang didefinisikan dalam
finaf floaL Yc : PusatSbY; persamaan 10.1 .
final float xs : mMetersToPixelsX;
430
pemrogranran Srnrrl l'ltrrrtl\MItrlllittlt,tkatt Iit)K Arrrlrorrl drrr 1l;rr krtIi Arrrlrrtirl tJAIJ l0 Attllk,t'.r l,r'tt',rt Arrrltlrrl 431
pada sumbu Y
Persamaan 10.2 diimplementasikan pada method komputasiVerlet ( )
untuk menghitung translasi tiap bola menggunakan modifikasi persamaan
verlet waktu terkoreksi (Persamaan 1o.2.1) karena persamaan 10.2 tidak
final float invm: l.Of / m; // I/n meng-handle At secara langsung.
finaf float ax : fx * invm; / / percepatan bola n
n untuk koordinat Y
*Q - nt) didefinisikan sebagai vekror posisi awal bola pada koordinat x, dan
pada implementasi class ini, sejumlah variabel digunakan tipe data primitive
""lf"i '[onttrnt" diberikan parameter. tambahan "f" "i(l) sebagai vektor posisi setelah translasi bola pada titik koordinat xr.
float masing-masing
;;;i"h;y; i"i"r. "irri p"cahan o,s :
o'sf, tipe data float digunakan
karena aplikasi ini n.."n"iup[rn prot"t iterasi komputasi agar memperoleh Besaran Lt,,-u1 dar'rLt,ro,, adalah waktu yarrg dibutuhkan tiap langkah
keakurasian Yang lebih baik. "hinggu
sinrulasi saat menjalankan proses komputasi drawing canvas,
gava f,111 dialami dengan diimplementasikan dalam method updateposisi
Dari bagian kode di atas tampak pada simulasi ini ftl1rg o darivariabel
(yang dianggap sama) sebesar trmestamp_now awal (dTawal) dan akhir (dTakhir).
ffi; ffi;, f,rnvu Altuntukan
tiJrf.
dari percepatan
mengalami gaya normal W :.m'g yang searah
s s clan benda diang*ro
,fi$;';. il;r";iir:?; akan diplroleh dari sensor Accelerometer seperti
yang dituniukkan dari peisamaan berikut: private void updatePosisi (float sXr float sy, long
.'(r,,r,) timestamp_now)
F i.' F-,F. {
GOverride
Translasi bola iQ + N) public void onSensorChanged(SensorEvent evenL) {
if (event . sensor. geLType O l: Sensor. TYPE
OO O{r]rlrlrO ACCELEROMETER,)
return,'
msensorx : event.values[0],' // baca nilai
percepatan bidang sumbu X
,:O U'V msensorY : event.vafuesll.); / / baca nl1ai percepatan
Lt o .ot Lt oor,, bidang sumbu Y
Gambar '10-3 Transtasi bola tiap siklus sinulasi / / set timestamp dari event sensor dan sisLem tiap
event Sensor
sensorNanoT j-meStamp : event. timestamp;
Pada persamaan 10.2.2 ditunjukkan perbandingan antara L.t^"1 -!?\
'A;;,,.-;iJ;finisikan
sebagai A/. seperti
yang diterapkan pada method cpuNanoTimeStamp : System.nanoTimeO ;
up"ciSteposisi O dengan nama variabel dTc: )
;(r + ar)= t(,)* G(,)- ;(r -ar))' Lt, * .La(')t" (10'2'2) Selanjutnya, agar simulasi gerak partikel bola pejal menjadi lebih realistis
diperlukan penambahan gaya gesek setiap translasi bola sebesar fu, gaya
gesek tersebut untuk mensimulasikan permukaan bidang datar tidak licin
seperti yang ditunjukkan pada Cambar 10.4. Sehingga persamaan 10.2.2
Pada method onDraw variabel timestamp-now untuk menyimpan akan berubah menjadi:
iumlah time-stamp sistem dan time-stamp event yang maslng-maslng
;i;;;i"h';"nggunakan method sysrem.nanoTlme o dan dari event
sensor Accelerometer menggunakan method event ' timest.amp' ;(r + ar)= i0)* (t - f o) {t(,)-;(r - lr)}. nt, + d(t)nt2 (0 2 3)
/_ dT,
n... o::: {
436 Pemrograman Srrarl I'ltonl Mrtttl:l:tttr,rk,rrt ',1 lh nnrlrir(lrl.rrr ll,rr krn11 Atrrirrttrl RAR I0 Ayrhk,r,,r l,r,rr,,or Arrrlroirl
437
pjgBatasVertical : ( (h / mMetersToPixelsY - ditunjukkan pada persamaan '10.3.1 dan Cambar 10.4, besaranAx adalah
jarak kedua bola pada sumbu x dan Ay adalah.iarak kedua bola pada sumbu
diameterBofa) * 0.5f) ; Y.
)
super (context);
mAccelerometer mSensorManager '
gr: r- D e f au I t e n s o r
S (Se n s o r' TYPE-ACCELEROMETER ) ;
- pemrograman Smart phonc Mcrrggrrrr.rk,rrr lil)K Atttltottl tl,rtt ll,rr krrrll Artdrord IIAII l0 Atrltk,r',t lit,rt',ot Atttlt.trl 439
438
uPatstePosisi (sx, sy, timestamp_nor); tr:anslasi
// batasan iterasi NUM MAx ITEMTIONS untuk final float d = (float)
komputasi tumlcukan partikel !4ath. sqrt (dd);
final int IUU_UaX_ITERATIO{S : 10; final float c = (0.5f *
tr:ue;
boolean nore = (dianeterBofa - d)) / d;
final int count = parti kelN. t€ngth, //jn] bolaN.posx2 -= & * c;
bola bolaN.posY2 -= dy * c;
for (int k = 0; k < NI,U IAX IIERATIoIIS && bola.posx2 +: dx * c;
inore; k++) t bofa.posY2 += dy * c;
nore = false, more : true;
for (int i=0; i < count; i++) { }
Particle bolar = pertL].€tNlil; ]
for (int i : i + 1; j < count, // kalkulasi tumbukan dengan
j++) { batas bidanq
Particlebola=boIaN
partikelN I j I ; kelkulaaifutlbukanB.tasBidarlg ( ) ;
float dx = bola.posx2 - )
bolaN.posx2; )
float dy = bola.posl2 - )
bo]aN.posY2;
pengukuran jarak
/ / Sedangkan kalkukasi simulasi tumbukan dengan
anrara 2 bota latgs_ bidang diimplementasikan dalam meth-od
kalku.IasiTumbukanBatasBidangOyan8 ditunjukkan
float dd = dx * dx + dy *
sebagai
berikut:
dy, // saat teriadi tun oukan
partikef
{
dia[6tolBoraxuacEat] {
dx += ((float) Math. finar float :(t!!x = p jgBataB[olirontar; //batas
bidang horizontal
ranclom0 - 0.5f) * 0.0001f;
dy += ((float) Math. finar float l'Eex = pjgBatl3ve.tical; //batas bidang
random{) - 0.5f) * 0.0001f; vertikal
dd= dx * dx + dy * ciy; final float x = posx2; //posisi x partikel n
// tentukan koordinat final Jloat y = posy2;//posisi y partiket n
440 - Pemrograman Smart Phone Menggururkarr S[)K Attrlrotrl rl,rn ll;rr:krng Android llAtl l0 Aphk,t',t :rr!r',rr n lrhrrrl 441
// saat bola n pd titlk xmax,definisikan nilai- x
particleSystem.update(sx, Sy, timestamp now) ;
tetap di
if (x > :<rnax) {
final float xc : pusatsbX;
PosX2 : xmax;
final- fl.oat yc : pusatsby;
)
nilai final- float xs : mMetersToPixel-sX;
/ saat partikel n pd titik
/ -xmax, definisi-kan
final- float ys : mMetersToPixelsy;
x tetap di -xmax
final Bitmap bitmap : mBitmap;
else if (x < -:<rnax ) t
posX2 : -xmax;
final int count : particlesystem. getparticleCount. ( ) ;
for (lnt i : 0; i < count; i++) {
]
final float x : xc + particleSystem.getposX (i)
if (y > ynax) { * xs;
posY2 : ynax;
final float y: yc - part.iclesystem.getPosy(i)
) el-se if (y < -ymax) {
* ys;
PosY2 = -frynax;
]
canvas.drarBitmap (bi-tmap, xt y, null) ;
)
1
// lakukan drawj-ng ulang
lrlilai xnax dan ymax diperoleh dari method onSizeChanged O . Fada
lnvalidate O;
saat bola pada posisi kurang dari -xmax atau melebihi xmax maka posisi l
poslt2 dan posY2 dibuat tetap konstan pada xmax, ymax atau -xmax,
-ymax. Variabel Bitmapakandiinstansiasikan kedalam method S i_mulationVj-ew
dengan merubah skala ukuran image bola menggunakan method Bitmap -
Fungsi drawing pada Accef erometerDemoActivity di-
createscaledBitmap, seperti yang ditunjukkan pada potongan kode
implementasikan dalam onDraw O menggunakan method canvas "
berikut ini:
drawBitmap yang ditunjukkan sebagai berikut:
public Simul-ationView(Context context) {
GOverride
,r'r.r"""rrsiasikan image bola dan background
protected vold onDraw(Canvas canvas) {
//uball skala agar berdiameter sekitar 0.5 cm
canvas.drawBitmap(mWood, 0, 0, nufl) ;
particleSystem
Bi-tmap ball BitmapFactory.
final SistemPartikel-
decodeResource (getResources O , R.drawable.ball) ;
mParticleSystem; final i_nt dstWidth : (int) (diameterBola *
final long tlmestamp-now : sensorNanoTimeStamp +
mMetersToPixelsX + 0.5f) ;
(System. nanoTime O - cpuNanoTlmeStamp) ;
final int dstHeight (int) (diameterBoJ-a *
final float sx : mSensorX;
mMetersToPixelsY + 0.5f) ;
finaf float sY : mSensorY,'
Secara garis besar, diagram alir dari simulasi Accelerator Demo dapat
ditunjukkan pada Cambar 10.6. Setelah file class telah dibuat dan di-run Tool SensorSimulator
pada perangkat Android maka simulasi translasi bola akan langsung berjalan
seperti yang telah dijelaskan sebelumnya, kini telah tersedia aplikasi third-
yang tampak pada Cambar 10.7 -
party Sensor Simulator (Cambar 10.8) merupakan bagian dari project
o pe n I ntents
(s u m ber: www. o pe n i ntents. o rg) sebagai fungsi em
u as i'sensor I
444 Pemrograman Smart Phone Mt:ttlilittttak;ttt lll)K Arrrlrorrl rl,tn llirt.ktnli Atrrirrrtrl llAli l0 Agilrk,r.,r i,r,rr,.or Arrrlrrrrrl
445
Openlntefils Senso' Slmulalo'
3. Lakukan modifikasi pada project target, rinciannya dapat dijelaskan
sebagai berikut:
Yr n;;i::;:j:l-
Xrl -- .--* - ' - lmport librari sensorsimulat.or-1ib-x . x. x . j ar ke
ri+
'.T1 M j::--i=::-':.5:-1- dalam direktori lib/ pada project Android target.
s.stt0ls
rary - Deklarasikan import class sensorsimuf ator dalam project
trF6ffir aplikasi menjadi seperti berikut:
tF**r6raailnm_:;s.r}'{*
ss :rt I ro : licre
**:I
r.:,i:6;,i,iltiit- ii ffHe
lt:l.r:i: a::
i,-r*rrlrirr.*1r
;
i I
:
1''tsrffis import org. openi-ntents . sensorsimulator. hardware.
-' tdsr Sensor;
;;;;;;rii',r,;;-*"; *d.*
i:itii;l.i;;1",I,;':l' 1l
:
;;; import- org. openintents . sensorsimulator. hardware .
a
- -.E'!a{9: SensorEvent;
Gambar 10.9 Aplikasi iava SensorSimulator import org. openintent s . sensors imul_ator . hardware .
2. lnstall dan jalankan aplikasi SensorSimulatorSettings- import org. openintents . sensorsi-mulator. hardware .
x . x. x. apk pada emulator target dengan men-set nomor lP dan Sens o rManagerS imul ato r i
nomor port (socket) yang nomor tersebut dapat diperoleh dari aplikasi
server SensorManagerSirnulator (Cambar 10"10). Aplikasi ini pada
dasarnya merupakarr service sehingg,a dapat terhubung ke server - Selanjutnya ubah kode di dalam state onCreate ( ) :
SensorManagerS i m u ator dan apl i kasi proj ect- : SensorManager ) getSystemService
I
mSensorManager ( ( SENSOR
SERVICE) ;
i:,rltlil;lr&T'{:
mSensorManager : SensorManagerSimulator. get.Systemservice ( this,
SENSOR-SERVlCE) ;
mSensorManager. connectSimulator ( ) ;
Gambar 10.10 Konfigurasi (a) lP dan socket (b) SensorS imulatorSettings pada
Untuk kode lainnya tidak diperlukan perubahan signifikan, cukup dengan
Enutal0r AVD (Sumber: hTpthode.googte.com/p/openintents/wikilSensorSinulato) meng-unregrster sensor yang ada dalam state onResume ( ) dan state
onStop ( ) . Contohnya seperti pada bagian berikut ini:
super.onResurE O i )
mSensorManaqer. registerLi stener ( this, mSensorManager .
q e t D e f a L1 I t s e n s o r {sensor ' ttPE ACCELERoUETER)
' - setelah modifikasi seresai, aktifkan aplikasi
sensorManaqer. SENSOR_DELAY_EASTEST) , ."*.r, AVD dan ApK client
msensorManager. reqisEerlistener ( this, nsensorManager. "ensorsimulator "Inrlrto,
Sensorsimulatorsettings yang diikuti prcses running
qetDefaultsensorlsensor.IYPE-MAGNETIC-EIELD), aplikasitarget'
SensorManager. SENSOR-DEI-AY_FASTEST) ;
msensorr4anager. regi sterlisrener ( rhis, msensor:Manaqer . Perlu diketahui fungsi SensorManaqersimulatot pada class Open,ntents
Goverr.icle
protected void onstop O {
nSensorManager - unregisterr,istene! (this ) ;
super.onstop O ;
) SensorEventlistener
i
public void ons€n6orchlnged ( SensorEvent event) {
int sensor = event. ttrpe,
floatJl values = event.values,
448 - Pemrograman Smart Pltonc Mlrrlllirrrr.rk;rrr Sl)X Anrlrorrl rl;rtr ll;u:kttt11 Atrrlrottl ItAll l0 Apltl ,r',t ',,'tr',ot Arrrhorrl 449
Trou bleshoting SD K And roid
U. ntuk tambahan pada bab inidiberikan ringkasan solusi masalah yang sering
-kompilasf
dihadapi saat melakukan developing project Android, proses
proses upload, dan running aplikasi di Emulator AVD atau perangkat android
yang akan mempermudah kita. salah satu permasalahan, diantaranya berikut:
l - Tgrladi kegagalan pengunggahan aplikasi Android hasil kompilasi
dari Eclipse, hal ini disebabkan perangkat Android atau emurator AVD
ada.package aplikasi yang sama dengan aplikasi yang diunggah atau
disebabkan ADB gagal meng-uninstall aplikasi sebelumnya. Sebagai
solusi, kita dapat menghapus aplikasi yang ter-,nsta// pada AVD atau
perangkat android secara manual, menggunakan command:
Hacking Android
Rooting Android
Mekanisme rooting sangat berbeda dengan jailbreak pada iPhone, yaitu
dengan menaikkan /eve/ dari user biasa dapat bertindak sebagai SuperUser
atau Adrninistrator. Contohnya memodifikasi file-file system, yang identik
dengan akses root di sistem operasi Linux. Beberapa manfaat dari rooting
Android dapat dijelaskan sebagai berikut:
'!. Akses kontrol penuh, user dapat mengkustom seluruh file sistem yang Coogle C1 (1.6) Cigabyte CSmart C 1305
terletak di seluruh direktori Android diantaranya modifikasi kernel Coogle Nexus One (2.2)
untuk peningkatan performa dan fitur tambahan seperti voice dialing Lenovo Lephone (1.6)
atau penghapusan aplikasi native.
HTC Hero (2.1) LG CTs40 (1.6)
HTC Magic (1.5) * Samsung Calaxy 5 (CT-i550x)
Z. Backup file system, kita dapat membackup seluruh file system OS
Android identik dengan backup sistem operasi komputer dalam bentuk HTC Tartoo (j.6) Samsung Calaxy Beam
file image. Sehingga sistem dapat di-recovery saat terjadi kegagalan Motorola Charrn Sony Ericsson X10 Mini (t .6)
saat mengkustom kernel atau file system. Contoh tool APK backup Motorola D roid (2.01 I 2.1 / 2.2) Sony Ericsson X10 Mini pro (t .6)
ROM yaitu aplikasi ROM Manager yang dapat diunduh pada lvlarket Motorola ME511
(Coogle Play). Vibo 4688 (1.6)
Motorola Milestone (2..l )
t lnstallaplikasi keSD Card, rooting memungkinkan sistem menggunakan
SD card juga sebagai penyimpan data cache suatu aplikasi yang telah
terinstaiasi sehingga dapat meningkatkan performa dan manajemen Penggunaan Universal Androot- sangat mudah, untuk rooting
sementara
dengan mencentang checkbox soft -Root diikuii co i*i
memoriyang lebih baik, tc;L;,
dan saat Android di-restart kembali ke kondisi awal (unroitl. Urirf.
2.1a)
4. Menjalankan aplikasi, contoh nya apl ikasi tethering Wi-Fi, menjalankan rooting
permanen hilangkan centang tersebut, untuk kembali ke mode
aplikasi yang membutuhkan super usert auto memory manager, staftup ,r.rrt a"ng"i
cara men-tap button Undo Root (Cambar 12.1b). Saat prosesi"riirs
manager, dan overclock CPU. -"'c Uerniiii
akan tampak icon Superuser pada main menu (Cambar 12.1c).
5. lnstalasi ROM Custom, user dapat menginstalasi ROM pada perangkat
menggunakan aplikasi khusus pada PC Host"
Dari berbagai aplikasi rootingAndroid yang ada, diantaranya ada yang berupa
aplikasi APK Android yang dapat melakukan rooting tanpa membutuhkarr
PC host. Juga ada pula aplikasi yang diharuskan menggunakan PC host clan
perangkat Android.
Aplikasi rooting hanya mendukung beberapa tipe perangkat Android dengarr
versi tertentu disebabkan tiap versi menriliki sistem proteksi yang berbeda.
Dalam bab ini. aplikasi rootingyangakan digunakan yaitu Urriversal Androot,
z4Root, dan UnRevoked.
(a) 6) (c)
i. Universal Androot
Universal Androot merupakan aplikasi exploit yang memanfaatkan celah @nbar r2.r (a) Apkasi uttitusdAneN, @) po*s wtdo r*t (c) tcm gwus
sistem keamanan Android versi 1.6 hingga 2.2. Untuk Androot versi terakhir Rooting memungkinkan ak1e1 fir.e system.di rever user diantaranya
(1.6.2 beta 5) dapat diunduh pada URL: http://www.23corner.com/apk/ s ys t em /_xb i n, s.y s t em / b i n / s u yang dibututrtan apritasi. -i:ontot, /
UniversalAndroot-l .6.2-beta5"apk, tool irri merupakan aplikasi rootingyang ny"
aplikasi scs Kerne/ Flasher untuk fungsi 6'a*rp ain i";Jrurt",
mendukung banyak tipe dan versi OS Android, diantaranya: kemel
yang membutuhkan akses root. saat user menjalinkan pro*,
(Gambar 12.2b) maka akan tampak notifika;i *indd
b;;ik;p lemet
(Gambar 12.2a).
s;;";; Reguesr
Motorola XT701 Androot memiliki keterbatasan tidak mendukung akses super
user secara
Motorola XT800 (2.1) remote melalui console emulator ADB di pc HostlUntuk
m;nga;nya. kita
Ericsson X10 (1 .6) dapat men ggunakan apl i kas i ApK conso/ e r m u I a,to r yiig'dip'ai'ilet"kukan
456 Pemrograman Smarl Pltorrr' Mcttlllirttt,rk,rrr lil )X Arrrlrorrl rl,rrr ll,rr.krrrl, Arrrlrorr! BAB I2 ll;rr klrg Arrrlrorrl
457
login Superuser. Melalui console emulator tersebut kita dapat memodifikasi
LC Allv Sony Ericsson X]0 Mini Pro
file system atau database aplikasi yang tersimpan di direktori /data/data
(Cambar 12.1c). LC Optimus T Sonv Xoeria Mini
Motorola Defy
Z4root dapat diunduh melalui Market atau forum XDA Developer dengan
ll.:: : -{.1
U RL: http I I for u m.xda-developers.com I attach ment. php? attach menti d : 44
:
Gambar 12.2 (a) Notifikasi akses Superuser (b) Aplikasi SGS Kernel Flashu (c) database aplkasi
Rooting tidak selalu meningkatkan performa perangkat Android, dan hanya ld!,B* l!.:1,] {2tr'0.I*.05 {} r-ia l.nIr *i
aktif saat dibutuhkan. Untuk itu, sebelum di-root Kita harus mengetahui ar-aril i1r*-,
tct'r$l tar lt!6-;t*3 E.rl h.hr!6 lil a.
ndlrt- *!'!i rll*.*t
aplikasi apa saja yang membutuhkan akses root dan fungsinya untuk !N 6!lFr L:6ral a{ar FLri.
$s ,araa tlr..rhfte ,ry tuil mrrta
menghindari kerusakan atau termodifikasinya file sistem hingga penyusupan ltuF *i:*.' ll8!t*i l."E6rl
virus yang dapat berdampak pada ketidakstabilan sistem operasi. Sebaiknya F aeri* {rqcri1,
Kita hanya meng-insta// aplikasi (yang membutuhkan akses root) dari Market brh I. *l!,..rll hrM, ilut r
*.ila sh
sr ri rt jm urs t ,rqb .*r!t$f,..
yang dibuat oleh pengembang yang terpercaya. Irar Fa!:, trlt {/irrn r
!!rA ro hutttdr .N lxh !!ri:ls tr,,
, dra! aa ute sd Arrri&r
(a) (b) (c)
2.Z4Root
Z4Root (Gambar 12.3a) merupakan aplikasi exp/oit rooting dengan versi Gambar 12.3 (a) z4root (b) rooting yang berhasil (c) busybox pada console emulator
terbaru yaitu 1.3.0 yang dapat me.root sejumlah perangkat Android maksimal
bersistem operasi Froyo, diantaranya:
Keunggulan z4root dibandingkan dari tool rooting lainnya memiliki tingkat
Asus Carmin A50 Motorola Droid 1 keberhasilan rooting yang tinggi, tetapi jika digunakan pada perangkat yang
Cricket Huawei Ascend Motorola Flipside tidak terdapat pada list di atas akan berdampak fungsi rooting gagal.
Dell streak Motorola Milestone 2
HTC Cl Samsuns Galaxv 15700 3. Unrevoked
HTC Hero Samsuns Acclaim Aplikasi Unrevoked dirancang untuk rooting produk HTC agar dapat
Huawei 8120 Samsuns Calaxy 3 15800 meng-custorn default ROM menggunakan ROM upgrade dari HTC, ROM
Motorola Backflip Samsung Calaxy S dan variannya ClockworkMod, atau ROM CyanogenMod. Beberapa handset yang dapat di-
Samsuns Galaxv Tab
root diantaranya Sprint EVO, Wildlife, Desire, Aria, dan lainnya. Penggunaan
Motorola Cliq
aplikasi Unrevoked initerdiri dari beberapa bagian, yaitu:
Motorola Droid 2 Smartq v7 android 2.1
Motorola Droid X Sony Ericsson X10 a. Unduh aplikasi Unrevoked Recovery pada URL http:lldownloads.
un revoked. com I recove ryI j. j 2 I ref I ash gackage.exe, ap I i kasi i n i
458 Pemrograman Smarl Phonc Mcttlllitttt,tk,rtr lil)K Arrrltorrl rl,rrr ll,lt krrtli Atrtlrotrl BAll I 2 ll;rr krttg Attrltottl 459
sebagai tool custom recovery image yang menyediakan fungsi alamat URL firmware yang diinginkan seperti yang terlihat pada
flashing kustom ROM dan full backup data dari perangkat HTC; Cambar 12.4.
U nduh Apl i kasi tool H BOOT, pada U RL: http://www. un revoked. **ils*****ffi
com/recovery/android-usb-driver.zip yang diperlukan untuk alb*
bf,k{arE*hdlk
H !16 dbn ri*. *r q H h; n
-
*.*d
c.
tidak memerlukan aplikasi ini;
Agar dapat melakukan instalasi kustom ROM, dengan catatan
m
Lit.:l
lfd3ara ffiie€ I
perangkat harus terhubung dengan PC Host pada mode "Charge
Only'. 3 !shitr€la.r
lld.rm
ffi
Karena masing-masing produk dari HTC memiliki proses upgrade firmware
yang berbeda-beda dan cukup rumit maka untuk lebih jelasnya dapat mencari
1..*4*,r"r
*rie...-
I *',..J^. iryt,
I* r
iti!*rqr*tG.lt**
!!!,@epir&
ffi
ar&rffi r*
dokumentasinya pada website resmi Apl ikasi Unrevoked http:l I unrevoked.
com atau pada Forurn XDA yaitu merupakan forum pengembang aplikasi
Android, i Phone, Tab let pada U RL http I I fo r u m.xd a-devel opers. corn.
:
treq
'&rn,rild*'
k'**
ilffi
rr ,ea
H
tdd6LK
re
untuk berbagai jenis perangkat Android sehingga siapa pun dapat mudah Gambar 12.4 Firmware sejunlah tipe Samsung Android (hapl/www.samfirmware.coml)
melakukan upgrade tanpa memerlukan keahlian khusus. Upgrade firmware
tersebut secara otomatis akan mencakup upgrade sistem operasi, boot image,
image radio, image CSC, dan image recovery. Pada upgrade ini, penulis menggunakan firmware Android fclair untuk
Meskipun demikian, upgrade firmware sangat beresiko tinggi karena jika regional lndonesia, Malaysia, Singapura, dan Filipina yang ditandai
menggunakan firmware diluar regionalnya dapat berakibat fungsi-fungsi kode DX pada file l5503DXJC5.rar. File firmware tersebut dapit diunduh
hardware tidak berfungsi atau berjalan tidak normal akibat inkompatibilitas pada http:llwww.multiupload.nlls4Qlcz1spo atau http:/ihotfi!e.conn/
pustaka dan kernel dengan hardware perangkat tersebut meskipun dilakukan dl / 1 2 3 20 j9 6 3/ 3 2f 30f 5 / I 5 50 3 DXI c 5. rar.htm l. J i ka menggunakan fi le i mage
factory reset berulang-ulang kali. dari regional lainnya (misalnya Eropa, atau Amerika) berakibat hardwa"re
tidak berfungsi, seperti layar sentuh kapasitif, sinyal radio (CSM, Wi-Fi atau
Untuk mengurangi resiko, disarankan hanya mengunduh firmware atau bluetooth) karena perbedaan hardware.
ROM dari website resmi produsen atau dari komunitas resmi produsen.
Penggunaan ROM tidak resmi sepedi ClockworkMod atau CyanogenMod 1. unduh file pendukung Firmware ops Europe dan aplikasi Frashing
sangat berresiko karena besar kemungkinan ROM tersebut tidak kompatibel too/ untuk Samsung Android ODIN Multi Downloader versi 4.2-g
untuk perangkat milik Anda. Agar lebih jelas mengetahui prosedur upgrade pada URL: http:llwww.lshared.comlfilell-WSC\SXlodin v428 and
ROM akan dibahas lebih spesifik untuk perangkat Android Samsung Galaxy ops_file.html. -
CT-i5503 dengan penjabarannya sebagai berikut: 2. Sebelum meng-upgrade firmware dianjurkan mem-backup data
'1. menggunakan aplikasi Backup Everything (Cambar 12.5) disebabkan
Unduh file Samsung Firmware pada URL: http:llwww.samfirmware. upgrade akan menghapus seluruh data yang tersimpan di memori
com. Website ini bukanlah website firmware resmi milik Samsung, internal. Aplikasi Backup Everything akan mem-backup data
tetapi menyediakan firmware original terlengkap khusus produk phonebook, aplikasi, SMS, dan data lain.
Samsung diantaranya Galaxy S, Calaxy Tab, dan lainnya. Untuk
memperoleh link unduhan, terlebih dahulu melakukan registrasi.
Setelah registrasi selesai dan login, barulah kita dapat memperoleh
460 Pemrograman Smarl [)hottc Mottlllitttt,rk,rrr lil )h Arrrlrorrl tl,rrr ll;tr:ktttli Artrlrottl BAll l,'ll,rr kttrrl Arrrlrrrrrl 461
t---*--
,r
sltH
.l
i;i
r- -i-_- I",
ilr(ile) ,
,.:r
i
'!!
(4, (b)
Gambar 12.5 Aflikasi Backup Everything Gambar 12.6 (a) Aprikasi oDtN (b) uproad RoM firmware ke perangkat Android
462 Pemrograman Smart Phone Melrygttturkirrr lil)K Arrrlrrurl rl;rrr ll;rr:krn11 Arrrlroirl RAII 1,, Il,rr krnpl Arrrlrorrl
463
Daftar Pustaka
Gambar 12J Firnware Samsung Android (a) sebelum dan (b) sesudah Upgrade
oo0oo-
Abelson W., F, Collins, C., Sen, R., 2009, Unlocking Android - A Deveioper's
Guide, Manning Publications Co, USA
Abelson W.F, Collins, C., Sen, R.,20I0, Source code Unlocking Androici
- A Developer's Cuide, Manning Publications Co, USA, http:liwwu,,.
manning.com/ableson/uadcode allchapters.zip, diakses 5 Oktobei
2010
Android Team Developers, 2010, Android Development Documentation -
Google, http://developer.android.comf Diakses 4 September 20'i 0
Anonim, 2010, All Newest Cadgests Reviews, http://viewgadgets.net, diakses
pada 24 September 2010
464 Pemrograman Smart Phone Menggttttakarr Sl)K Arrrlrolrl darr llackrng Andrtltd
Meier R., 2010, Professional Android Application Development, 2nd Edition,
Anonim, 2010, Poftal lnformasi cadget dan Teknologi, www.geeky-gadgets. Wiley Publishing, lnc., lndianapolis, lndiana, USA
com, diakses 15 Oktober 2010
Meier R., 2010, Source code Professional Android Application Development,
Canalys Research, 2011, Research Report - Coogle's. Android becomes 2nd Edition, Wiley Publishing, lnc., lndianapolis, lndiana,
the world,i leading smart phone platform , http://www.canalys. USA, http://www. wrox. comAN i eyC DAAN roxT itl e/prod uctCd-
I
cotm/prl2o1 1 lr2o1 1d13.html, Palo Alto, california, Amerika serikat, A47O565527,descCd-DOWNLOAD.html, diakses pada 20 September
diakses 5 Febuari 201 1- 201 0
Dummer, )., L.,2004, A Simple Time -corrected Verlet lntegration Method, Munir, 2008, Kurikulum Berbasis Teknologi lnformasi dan Komunikasi. CV
ntfp,iltonesock.neyarticle/verlet.html, University of California, Davis, Alfabeta, Bandung
USA
Nazmul, SAX Developer tutorials - ScreamingToaster, 1999, http://
Djuknic, C., M., Richton, R., E', 2010, Ceolocation and Assisted GPS - IEEE developerlife.com/tutorials/?.p:29, Amerika Serikat, Diakses 23
Computer society, Bell Laboratories - Lucent Technologies, http:// Oktober 20'10
cens.ucla.ed ul - *hr I csZl gllocation/dj un kicg 1 pdf, 200 1, d iakses 1 2
.
November 2010" Steele, J., Neelson, f ., 2O11, The Android Developer's Cookbook : Building
Applications With The
European Space Agency, Calileo - Europe's Ctobal Navigation Satellite
' System,, http"y'/www.esa.int/esaNA,/galileo.html, diakses'l 3 Februari Android SDK, Pearson Education, lnc., Boylston Street, Boston, MA, USA.
2011 Oracle lnc., Java J2SE Download www.oracle.com/technetwor[</Java/.iavase/
EZB Systems lnc., 201 1, LJltralso - Handle.CD and DVD lmages with Ease!, downloads/index.html , diakses pada 16 Januari 201 1
http://www.ezbsystems-com/u ltrai so/i ndex' htm I
Ryan, 2., A.,2010, z4root - APK rooting tool, http://forum.xda-deveiopers.
HTC T-Mobile cl, HTC Corporation, 2010, http://www.htc.comlwwwl com/showthread.php?t:833953, Johannesburg - Afrika selatan,
product/g1lspecification'html, diakses pada 24 Oktober 201 0 diakses 10 desember 2010
Huang s, Universal Androot 1.6.2 beta 5, 2O"lO, http://blog.23corner. SamFirmware Team, 2010. Website Firmware dan data manuai servir:e
"
coml2olOlOS/3o/universal-androot-l-6-2-beta-51, Taipei, Taiwan, Samsung Android, http://www.samfirmware.com, Holland, Dial.ses
diakses 10 oktober 20.10 10 Desember 20'10.
IBM Foundation, 20'1 0, lntegrated Development Environment Eclipse, http:// Sun Developer network, 2003, White Paper - The K virtual machine (KVM),
www.eclipse.org, USA http://Java.sun.com/produ cts/clddwp/, Sun Microsystems, lnc., San
Antonio Road, Palo Alto, California, USA
lnternet Download Manager, 2O1 O, http://www. internetdownloadmanager.
com, USA United States Ceologicas Surveys (USCS), 2010, Eathquake Hazards Program,
http://earthquake.usgs.gov, Reston, VA, USA diakses 10 DesemLrer
Kaplan E.D., HegartY, C., ]., 2006, Understanding GPS Principles and
' Applicationi, 2"0 Edition, 2006 ARTECH HouSE, lNC., 685 Canton 2010
Street, Norwood, USA UnRevoked Team, Rooting Tools for HTC Android Phones, 2011, htrp:l/
unrevoked.com, Amerika Serikat, Diakses 15 Januari 201.1
Market Android, 201 1, Portal Aplikasi Android, https://market.android.com/,
diakses Pada 10 Februari 201 1 Weiser, M., 1 99 3, U b i q u ito u s Co m p uti n g, http://n ano. xerox. com/hypertext/
weiser/UbiCompHotTopics.html, diakses pada 23 Oktober 201 0
Murphy, M., L., 2O1O, Beginning Android 2, http:l/commonsware'com/
apress, Apress, New York, USA Wikipedia, 201 O, NM
.14
EA 0 1 B 3, http:l/en.wikipedia.orglwiki/NMEA 0 l B3,
diakses pada November 20'10
Wikipedia, 2011, Verlet Integration, http://en.wikipedia.orglwikiA/erlet
Tutorial Android Forecast, http:// www.anddev'org/advanced-tutorials-f2.1/ integration, Wikipedia Foundation, San Francisco, California, USA
and roid-weather-forecast-google-weather-apidescription-t3 3 7-45. htm I
-oo0oo-
468 Pemrograman Smart Phone Menggunakirtr lil)K Arrrlrorrl ri;rrr llar:kttt51 Androrrl
Performa Waktu Stand-by Maksimal 521 jam (2G) I 375 jam Fitur Software Default Samsung Widget dan Aplikasi,
(3C) Coogle Search,
Waktu bicara Jaringan 2C : Maksimal 9,5 jam, 3G C-Mail, Youtube, Google Talk,
: 6.5 iam Maps,Voice memo, T9, Organizer,
SAR (EU) 0.65Wke lntegrasi Social network (Twitter,
Komunikasi csM 8s0 I 900 I 1800 / 1900. (CPRS Facebook, dll), TouchWiz v3.0,
Class 10, 32-48 kbps, EDGE Class Swvpe
Radio
10.236.8 kbps) Upgrade Upgrade aplikasi via Samsung Apps
3,5G : HSDPA 900 / (online), instalasi aplikasi Market
21OO (7.2 Mbps) dan non-Market via internet, USB,
WLAN Wi-Fi 802.11 b/e, DLNA
: bluetooth, memori microSD
Bluetooth : v2.1 with A2DP Driver dan Tool Phonebook, sms, multimedia
sinkronisasi manager
Akselerator Grafis OoenCL v2.0 ES-CM 1.1
Antarmuka Analog Jack Audio 3.5 mm (headphone + (Aplikasi Kies via USB)
mic) Debuseine too/ ADB, via USB
Dieital Port USB Versi 2.0 lava vendor Android Proiect, versi c/ass 46
Lavar sentuh TFT kapasitif Kernel Linux 2.6.29-perf
Komunikasi Audio Mikrofon + Soeakerohone Sensor CPS Ceo-tagging, Coogle Maps, Photo
lnternet lnternal Web browser Sensor Cesture Accelerometer, Magnetometer
(mendukuns Webkit, HTML 5) (Kompas)
Messaging SMS, MMS, E-mail, Push Mail, lM, (BOCH, MEMSIC), sensor Orientasi
RSS (kombinasi sensor Accelerometer
Multimedia Analog Radio FM densan RDS dan Magnetometer)
Digital AudiolVideo player format MP3/
WAV/eAAC+, Ogg, MP4/
H-2641H.263
Alert Rinstone Audio (Mp3, WAV), Vibrasi
Kamera 2 Mega Pixel (1600x1200 pixel),
Perekam Video QVCA 15 fps
470 _ Pemrograman Smart Phone Menggunakan SDK Android dan Hacking Androtrl I:rtnprt,ur
471
Beberapa tipe handset Android yang telah clipasarkan dari sejumlah
produsen: Produsen Produk Versi OS Display Spesifikasi, jaringan,
Android dan Fitur
Produsen Produk Versi OS Display Spesifikasi, laringan,
dan titur
CDMA 800/1900 MHz
Android EVDO Rev. A,
Acer lnc Liquid Al 1.6 3.5",480x800 CSM, UMTS, CSD,
802.1 1b/gln, Bluetooth
(sl00) (WCA, ponrait CPRS, EDCE, HSDPA, 4.3", 480x854
Motorola DROIDX 2.2 (FWVCA, mode Stereo v2.1 + EDR
mode) HSUPA, Bluetooth 2.0
portrait), 24Oppi ,{2DP AVRCP, jack
+ EDR, Wi-Fi 802.119, 3.5mm, USB 2.0 H5,
CPS with A-CPS
HDMI. Sinkronisasi
CPU 1 CHz OTA, PC, DLNA
SnapDragon, layar
Liquid 2"1 dapat di 3.7 inch A9BO. CSM, HSDPA,
sentuh kapasitif, 5MF Nexian 3.2",320x48Q
AMOLED 2"1 Bluetooth, cPS, Diri lis
Stream update ke kamera, 720p video lourney (HVCA}
sl 10 2.2 WVCA untuk pasar lndonesia
recordinS, output
Prosessor'l GHz, Duai
HDMI
2.1 dengan band CDMA. EV-DO
HSPA, WCDMA, CSM, Touchwiz
3.7", 480x800 EVDO Rev. A, WiMAX
Wi-Fi Bluetooth 2.1, 4.0", 4B0xB00
(WCA, mode Calax'v- 5 3.0, 2.5 to 2.7 CHz, CSM/
Desire 2.1 12.2 USB, Trackpad optik, (WVCA),5uper
portrait) i9000 mendukung GPRS/EDCT, HSDPA,
Ul HTC Sense AMOLED
Samsung update ke HSUPA, Wi-Fi (b/dn);
HTC Hero Wi-Fi (802.1 1b/g), 2.2 Bluetooth 3.0, USB 2.0,
3.2',32Ox4BO Bluetooth 2.0+ EDR, DLNA, FM Radio
HTC HTC Droid
't (HVCA, poftrait ExtUSB, A-CPS Quad 3.2",320x480 Prosessor ARM 800
Corporation Eris, "5,2.1
mode) band GSM CPRSI Spica i5700 1.6,2.1 (HVCA, mode MHz microSD, WiFi b,/
T-Mobile EDCE, UMTS, HSPA portrait), 1 B0ppi g, Bluetooth 2.1, AGPS,
C2 Touch Prosessor Qualcomm
2.8',24Ox32O Smart phone tipe low
MSM 7227 600 MHz,
HTC Taftoo 1.6 (QVCA, poruait end, Ul HTC Sense, 2.55 inchi,
Rachael Ul Timescape,
mode) kamera 3.2MP 240X320
Xperia X10 RAM 256 MB, ROM
WCDMA/HSPA, CSM 1.6/2.1 (QVCA),layar
AMOLED, Sony Mini Pro 256 MB, Slide keypad
sentuh kapasitif
WVCA Ericsson QWERTY, kamera 5
Lenovo LePhone 2.1 Layar sentuh kaPasitif TFT
(80Ox480) 1,7 inchi MP auto fokus, sensor
Kamera 3.2MP, cahaya linekunean.
microSD (maks 32GB), Xperia X'l 0
4.0',48Ox854 ldentik dengan X10
1.6/2.',|
(FWVCA,TFT) Mini Pro
kapabilitas mobile
3.2',32Ox48O hospot,6O0MHz WVCA 3.5" WiFi, Bluetooth, CpRS,
(HVGA, mode Qualcomm MSM7627 480x800, OLED, 3C, HSDPA, Micro
ts670 2-2
ZTE Blade 2.1
LC poruait|,TFT - GPU Adreno 200, layar sentuh USB, CPS, 3.2 MP AF
Optimus S
LCD memori 512M8, kapasitif camera, 2 GB micro SD
WiFi b,/g, Bluetooth
2.1, AGPS, kompas,
accelerometer
I antltrt;rrr
472 Pemrograman Smart Phone Menflgunakirrr Sil)K Arrrlroirl datt ll;tr:kittli Arltltorrl 473
Spesifikasi berbagai produk tablet berbasis OS Android yang tersedia di
pasaran
Mendukung
Drlplay 0nchi),
Versi Spesifikasi, Fitur &
Produsen Produk Resolusi, Aplikasi
Android laringan
Touchscreen Market
lnternet
10,1 ,1024x60O, 1 CHz ARM Cortex AB
Archos tablet 2.2 Tidak
kapasitif CPU
Archos 101
Dell Streak/
Prosessor 1 CHz
Snapdragon. Kamera
Tentang PenuEis
Dell I.6 5 Tidak
Mini5 di depan layar 5MP
denean flash
CPU Hummingbird
Cortex A8 - 1CHz,
ROM 512M8, RAM
512MB, D-RAM
128M8, Memori
user 2CB + memori
intemal 16G8, memori lazi Eko istiyanto memperoleh gelar sariana ilmu fisika (1986) ciari
eksternal maks. 32GB Universitas cadjah lvlada. Kemudian Beliau melanjutkan studinya di lnggris
7,1O24x6OO, (microSD),Wi-Fi da.n nremperoleh gelar Postgraduate Diploma in computer programming inri
Samsung Calaxy Tab 2-2 Ya
Kapasitif 802.11 b/g/n, USB Microprocessor Applications (tahun 1987), juga pada tahun lgOtt dipr:iolclr
2.0. Bluetooth, Sensor gelar M-Sc bidang Computei-Science, dan terakhir diperolei: eelar f)h i)
Cyro (Accelerometer 3 untuk bidang keilmuan Electronic systems Engineering (tahun iiig5),
'i;rnir
sumbu). Ceomagnetik, seluri-rh geiar dari studi Beliau tersebut di peroleh darluniversily r,l' 'f rr,1,,.,
Luminansi, kaPasitas lngg,i-is.
Baterai 400OmAh, 2
!,lat ini [tr:iiau n:l"l,lrbetsl:llaga; Kelii.r jrtrusan ii11u l(r_rn,plriitr,i..,, i . , ., r,
Kamera (belakang:
yang sebr:iumny'a J.,rrnah inen jahal s+,i..a;i;.ri Kc.lria pior:r;lp-1 !,111,r, , ,., .,
3MP, Auto Fokus,
Flash, depan: 1.3MP)
dan ir-,:ti.lrmr-r"i;t.,1 Nr:nld* 7i){l_l-:'()i.}I dai.i i(etu"r jLrrusan i;.i, :,,
Prosessor NVidia
.2{-lUi-:',. I i Bll:,rr, ju1;a rire;t1l.,rjar ;rada Pr,::{i.:;ii \1.t.1:r;1, -'l , .
1,.:i<nii.: i lrtkiro, rj,,rir Pros.rarn A4agiste'r h4;rr.,u*"',,"t, l.;11jr r,;,;;;-,- ;..,"r,-t, ,,.,1, .
internal 16 GB, WiFi
'to,1 , i)engarr biclarrg,, r,t:i d;rl;lrn bidang sisti,rn kear::anafi j.ri-irr!r;rrrrlpi:rr.r, - -:,i:ji-r;,
8O2.11b@n, Bluetooth,
elektrt..nik, darr tirrtenr tert;rnam (eml-retcjded sy.]lerns) Frrrri j;r,i fl,cr l. iyarrir;-
Folio 100 2,2 1024 x 6OO, 3C, card reader (5D Tidak
Toshiba Ph.D" juga sel-ragai saiah satu anggota Him;:unair ijisrk.r !r-,rjrir,l,ia ii.rn
dan MMC), HDMI port
Kapasitif Persatuan lnsinyur lndonesia. Jabatan struktural beliaLr iaiah sebag,ai curu
USB 2.0, web cam 1.3
Besar (1060,24 kLrm) untuk bidang ilmu Elektronika dan lnstrumenia-ci. Dan
MP, beterai 10.8V -
juga menjabat sebagai Wakil Ketua Bidang Fisika Komputasi pada Himpunan
2030 mAh
Fisika lndonesia, dan Depuri
ljgqg, 53 pada Asoiiasi perguruan Tinggi
lnformatika dan Komputer (APT|KOM). Untuk menghubunginetiau aa[It
melalui e-maiIdengan alamat : lazi@ugm.ac.id dan jaziugmdgmaiI.com
-oo0oo-
-oo0oo-
474 Pemrograman Snrarl Phonc Mert111iilrr;rk,rrr SI)K Arrrlr0id riarr llar;krrr11 Androttl