versi Mei 2012 1
Pengantar Mobile Programming dengan Android Modul ini bebas dicopy, didistribusikan , ditransmit dan diadaptasi/dimodifikasi/diremix dengan syarat t idak untuk komersial,
pembuat asal tetap dicantumkan dan hasil modifikasi dishare dengan lisensi yang sama.
TBD PERBAIKAN MODUL: ............................................................................................ 3
Pengatar Tentang Modul ..................................................................................................... 4 Sekilas Android................................................................................................................... 4
Fitur- fitur............................................................................................................................. 4 Instalasi Lingkungan Pengembangan ................................................................................. 5 Aplikasi Pertama: Hello World........................................................................................... 7
Aplikasi Kedua: Hello xxx................................................................................................ 12 Widget ............................................................................................................................... 16
Text View...................................................................................................................... 17 Button............................................................................................................................ 17 ImageButton dan ImageView ....................................................................................... 18
EditText......................................................................................................................... 20 CheckBox...................................................................................................................... 20
RadioButton .................................................................................................................. 22 ListView........................................................................................................................ 24
List view adalah widget untuk menampilkan data dalam bentuk list. .............................. 24
Dialog................................................................................................................................ 30 Toast.............................................................................................................................. 30
AlertDialog.................................................................................................................... 31 Layout Manager ................................................................................................................ 31
LinearLayout ................................................................................................................. 32
RelativeLayout .............................................................................................................. 32 TableLayout .................................................................................................................. 35
Frame Layout ................................................................................................................ 38 Kombinasi Layout......................................................................................................... 39
Debugging ......................................................................................................................... 40
Sub Activity ...................................................................................................................... 41 Menyimpan Data............................................................................................................... 51
Shared Preferences ........................................................................................................ 51 SQLite ........................................................................................................................... 52 RawQuery dan Cursor................................................................................................... 56
Akses multi record ........................................................................................................ 56 File ................................................................................................................................ 57
Stream ....................................................................................................................... 57 Persiapan ................................................................................................................... 58 File Teks.................................................................................................................... 58
Objek Stream............................................................................................................. 60 Grafik ................................................................................................................................ 63
Menggambar di Canvas ................................................................................................ 63 Menulis Teks di Canvas ................................................................................................ 64 Event Touch .................................................................................................................. 65
Load Image ke Canvas .................................................................................................. 67
versi Mei 2012 2
Animasi di Canvas ........................................................................................................ 67 Koneksi dengan Server ..................................................................................................... 69
Google Map....................................................................................................................... 71 Zoom ............................................................................................................................. 73
Ubah Posisi ................................................................................................................... 73 Menambahkan Layer..................................................................................................... 74
Import External Library .................................................................................................... 76
versi Mei 2012 3
TBD PERBAIKAN MODUL:
Advanced: o SeekBar o ScrollView
o TabHost , TabWidget o ViewFlipper, SlidingDrawer
Menu
Intent
Internet
versi Mei 2012 4
Pengatar Tentang Modul Modul praktikum ini dibuat untuk praktikum matakuliah Mobile Computing di Ilmu Komputer UPI (cs.upi.edu). Diasumsikan pengguna modul ini telah mengenal dasar-dasar bahasa Java dan XML.
Sekilas Android Android adalah software platform yang open source untuk mobile device. Android berisi sistem operasi, middleware dan aplikasi-aplikasi dasar. Basis OS Android adalah kernel linux 2.6 yang telah dimodifikasi untuk mobile device.
Android versi 1.0 dikeluarkan tanggal 23 Sep 08, versi 1.1 pertama kali digunakan di
mobile phone (T1). Versi 1.5 (Cupcake) muncul April 09 yang mendukung soft keyboard, 1.6 (Donut) Sept 09 dan versi terakhir Ice cream sandiwich muncul di pertengahan 2011.
2.0/2.1 (Eclair) memperbaiki user interface, HTML5 dan Exchange ActiveSync 2.5.
2.2 (Froyo), mempercepat kinerja dengan Just In Time compiler dan Chrome V8 JavaScript engine, Wi-Fi hotspot tethering dan suppport Adobe Flash.
2.3 (Gingerbread), memperbaiki user interface, soft keyboard, copy/paste features dan support ke Near Field Communication (NFC).
3.0 (Honeycomb), diperuntukkan untuk tablet yang menggunakan layar lebih besar, multicore processors dan hardware acceleration untuk graphics.
4.0 Ice-cream sandwich, kombinasi 2.3 Gingerbread and 3.0 Honeycomb.
Fitur-fitur Fitur- fitur Android adalah sebagai berikut:
Menulis file di SD card.
Database dengan SQLite.
Application framework berbasis komponen yang memudahkan reuse.
Dalvik virtual machine dioptimisasi untuk menjalankan program Java di mobile devices
Integrated browser berbasis WebKit engine
Optimized graphics tersedia 2D graphics library; dan OpenGL ES 1.0 untuk 3D
graphics
Media support untuk MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF
GSM Telephony fasilitas telepon.
Bluetooth, EDGE, 3G, dan WiFi
Kamera, GPS, compass dan accelerometer
Multitouch
versi Mei 2012 5
Instalasi Lingkungan Pengembangan Untuk membuat app Android, dibutuhkan Android SDK (Software Development Kit) yang diperoleh di http://developer.android.com/ sedangkan untuk IDE (Integrated Development Environment) dapat dipilih Netbeans, Eclipse atau bahkan langsung dengan
command line dan notepad++ (tapi tidak direkomendasikan bagi pemula). Dalam tutorial ini hanya digunakan IDE Eclipse.
Setelah Android SDK didownload dan diinstall, maka secara otomatis Android SDK dan AVD Manager akan dijalankan (atau melalui Start Program Android SDK Tools).
Tersedia beberapa platform SDK dan dibutuhkan koneksi internet untuk mendowloadnya. Dalam modul ini yang digunakan adalah SDK Platform 2.3 API 9.
Setelah platform selesai di- install, selanjutnya perlu dibuat Virtual Devices, yaitu emulator Android yang dijalankan di desktop.
Masih di “SDK And AVD manager”, pilih virtual devices, lalu New
versi Mei 2012 6
Isi nama, target dan ukuran SD card, lalu klik “Create AVD”
Pilih AVD yang baru Anda buat lalu klik Start dan kemudian Launch. Tunggu 1-5 menit (tergantung kemampuan komputer yang Anda miliki).
Emulator ini membutuhkan waktu cukup lama dan memori yang besar. Ambil secangkir kopi dan silahkan tunggu sampai layar berikut muncul (jika yang muncul masih tulisan
Android berkelap-kelip, tunggu). Setelah emulator dijalankan, sebaiknya jangan ditutup lagi untuk menghemat waktu.
versi Mei 2012 7
Terutama bagi yang belum memiliki Android, Anda dapat gunakan emulator ini untuk bereksplorasi.
Dengan asumsi Anda telah memiliki JDK, langkah selanjutnya adalah menginstall Eclipse (http://www.eclipse.org/downloads/). Instalasi Eclipse sangat mudah, extract file
zip ke tempat yang diinginkan dan selesai.
Selanjutnya perlu diinstall plugin ADT (Android Development Tools) untuk Eclipse. Untuk menginstall ADT, masuk ke Eclipse, pilih menu Help Install New Software,
klik ADD lalu isi seperti berikut
Kemudian ikuti petunjuk selanjutnya dan restart Eclipse.
Aplikasi Pertama: Hello World Sesuai tradisi, langkah pertama adalah membuat aplikasi hello world.
Untuk memulai, jalankan Eclipse, pilih File New Other (ctrl–N), pilihlah Android
project.
versi Mei 2012 8
Isi nama project, tekan Next.
Pilih target versi SDK Android. Sebaiknya pilih versi serendah mungkin sehingga semakin banyak device yang dapat menginstall aplikasi kita (pasar semakin luas).
versi Mei 2012 9
Package name harus unik, aturan yang biasa digunakan adalah menggunakan nama website organisasi anda (dalam urutan yang dibalik), ditambah dengan nama applikasi.
Misalkan nama website anda adalah yuliadi.com, maka nama packagenya: com.yuliadi.namapp
Lihat dibagian Package Explorer (panel disebelah kiri Eclipse), ADT telah membuatkan
direktory src, gen, Android, assest, res dan seterusnya (akan dijelaskan kemudian). Expand lalu klik HelloDroidActivity.java
Terlihat ADT telah menyiapkan isi activity ( untuk sekarang, anggap activity itu semacam Form).
versi Mei 2012 10
Kembali ke Package Explorer, lihat res layout, klik main.xml. File xml ini berisi
definisi layout komponen user interface, misalnya tombol, edit box dan seterusnya.
Klik icon zoom (kaca pembesar) di kanan atas.
Secara default telah dibuatkan satu komponen yaitu text view yang menampilkan tulisan. Klik tab main.xml
versi Mei 2012 11
Sekarang kita akan mengubah tulisan “Hello World, … “ menjadi “Halo Dunia”. Pilih tab main.xml (gambar bawah)
Ganti isi android:text menjadi “Halo Dunia”
Jalankan project dengan mengklik icon run atau ctrl-F11 dan pilih Android Application. Jika emulator telah ditutup sebelumnya, maka perlu ditunggu agak lama.
versi Mei 2012 12
Jika di emulator hanya halaman depan yang muncul, drag slide lock ke sebelah kanan
Jangan tutup emulator ini, Eclipse selanjutnya akan menggunakan emulator yang sudah
terbuka ini dan tidak perlu menjalankan yang baru.
Aplikasi Kedua: Hello xxx Selanjutnya kita akan memodifikasi program ini dan menambahkan masukan nama dari
user, lalu setelah user menekan tombol, akan keluar “Hello, [nama]. Terimakasih”
Pertama, melalui project explorer kembali pilih main.xml. Pilih tab “Graphical Layout”
Komponen-komponen yang berada di bagian kiri, sering disebut “widget” atau “view”.
Pertama pilih TextField, pilih yang paling atas (plain text), drag diatas TextView.
versi Mei 2012 13
Lalu drag button di Form Widget, dan letakkan diantara text field dan label
Coba anda run (ctrl-F11) untuk melihat hasil dari program ini. Jangan lupa, jangan tutup
emulatornya, supaya tidak menunggu lama saat run berikutnya. Sekarang kita akan menambahkan aksi yang akan dijalankan saat button diklik.
Kembali ke main.xml, jika terlihat XML yang ditambahkan Eclipse tidak rapi, tekan ctrl-
shift-F untuk merapikannya.
Ganti android:text dan android:id untuk EditText dan Button. Atribut android:text adalah string pada komponen (caption atau label), sedangkan android:id adalah id yang dapat
digunakan program untuk berhubungan dengan widget ini. Beri nama ID etNama untuk edit text dan bSapa untuk button.
Demikian juga id untuk TextView, anda perlu menambahkan atribut “android:id”. Beri
nama tvSalam.
versi Mei 2012 14
Pada main.xml set atribut android.onClik dengan nama method yang akan menangani event tersebut (bSapaClick).
Sekarang kita perlu menambahkan code agar saat tombol diklik app akan mengeluarkan
respon. Melalui package explorer, kembali ke activity utama.
Kemudian buat satu method public dengan satu. Pastikan nama method sama dengan
yang dicantumkan di XML. Nama yang tidak sama akan menyebakan error saat program dijalankan. Method ini memiliki parameter View
versi Mei 2012 15
Tambahkan impor class yang dibutuhkan. Salah satu cara yang paling mudah adalah
dengan mengklik gambar x merah di sebelah kiri, lalu pilih impor (gambar bawah).
Jalankan program (ctrl-F11). Isi teks dan tekan tombol.
Cara ini paling sederhana, tetapi programmer harus memastikan nama method pada XML cocok dengan method di program. Jika nama method tidak sama, tidak akan muncul
kesalahan pada saat program dicompile, tapi akan menyebabkan kesalahan pada saat runtime (saat button diklik). Alternatif lain adalah dengan menggunakan listener seperti
code dibawah.
versi Mei 2012 16
Widget Pada modul sebelumnya kita telah menggunakan input box, button dan label. Komponen
user interface ini disebut widget. Beberapa widget dasar adalah: TextView, Button, Image, EditText, CheckBox, RadioButton, ListView.
Setiap widget memiliki property atau atribut yang mengatur bagaimana widget itu ditampilkan, seperti tinggi dan lebar widget. Property ini dapat diset melalui xml layout
atau melalui program. Beberapa widget memiliki beberapa event yang ter-trigger berdasarkan aksi dari pengguna, misalnya event click pada button.
Detil property dan event untuk setiap widget dapat dilihat di: http://developer.android.com/reference/android/widget/package-summary.html (scroll
sedikit ke bawah, di bagian classes)
Latihan:
Buatlah program untuk menghitung luas sebuah persegi panjang. Input adalah panjang dan lebar. Output adalah luasnya (panjang kali lebar). Gunakan syntax
berikut untuk mengubah tipe string ke double.
versi Mei 2012 17
Text View
TextView digunakan untuk menampilkan label teks. Beberapa contoh property dari
TextView adalah android:textSize, android:textStyle, android:textColor.
Hasilnya:
Tip: pada atribut textSize, direkomendasikan menggunakan ukuran sp. sp singkatan dari scaled-pixel yang memperhitungkan kepadatan resolusi dan juga preferensi ukuran font dari pengguna.
Button
Button merupakan turunan dari TextView sehingga yang berlaku di textView juga berlaku di button. Tambahan property yang penting adalah onClick
Hasilnya (perhatikan penggunan fill_parent untuk atribut layout_width):
versi Mei 2012 18
Catatan: dp yang digunakan sebagai satuan panjang merupakan singkatan dari density-independen pixel. Nilai real pixel untuk 1 dp berubah-ubah sesuai dengan resolusi. 1 dp
pada resolusi 160 pixel berarti 1 pixel. Jika resolusinya 320 pixel, maka 1 dp = 2 pixel demikian seterusnya.
ImageButton dan ImageView
ImageButton adalah turunan dari button, gunakan widget ini jika Anda ingin
menggunakan image sebagai pengganti tulisan pada button. Sedangkan ImageView dapat digunakan untuk menambahkan image.
Image diletakkan di direktori /[projectand]/res/drawable-hdpi, /[projectand]/res/drawable-ldpi dan /[projectand]/res/drawable-mdpi
ldpi untuk low density (resolusi rendah), mdpi untuk medium dan hdpi untuk high
density.
Contoh, jika sebuah file gambar furqon2.jpg diletakkan di direktori drawable (hdpi
sampai dengan ldpi). Maka contoh deklarasi widget imageView dan imageButton adalah
versi Mei 2012 19
dan hasilnya
Untuk menambahkan image bersama-sama dengan button, dapat digunakakan komponen button (bukan ImageButton) lalu set atribut drawableLeft dengan image yang diinginkan.
Contoh deklarasi UML-nya. Gunakan ukuran image yang sesuai.
dan hasilnya
versi Mei 2012 20
Coba ganti drawableLeft dengan drawableRight, drawableTop atau drawableButtom.
EditText
EditText digunakan untuk menerima input dari pengguna. Beberapa atribut yang berguna adalah android:password, android:maxLine, android:maxWidth, android:min Width
android:phoneNumber. Contoh:
CheckBox
User dapat memilih lebih dari satu pilihan dengan checkbox.
Contoh deklarasi checkbox
versi Mei 2012 21
Hasilnya
Sedangkan program untuk mendapatkan nilai suatu checkbox di check atau tidak adalah
sebagai berikut. Tambahkan Button dan TextView di form untuk menampilkan hasil pilihan user.
sehingga hasilnya seperti ini
Tambahkan di activity code sebagai berikut, perhatikan penggunaan isChecked untuk mengambil nilai apakah user meng-check pilihan:
versi Mei 2012 22
RadioButton
Pada radioButton, hanya satu yang boleh aktif (mutual exclusive) di dalam satu group
yang disebut radioGroup. Contoh deklarasinya:
Hasilnya:
versi Mei 2012 23
Catatan: Anda dapat mengeset atribut android:orientation pada RadioGroup menjadi horizontal agar radio button tersusun secara horizontal.
Contoh prorgram untuk mengambil hasilnya adalah sebagai berikut:
Tambahkan button dan textView seperti pada halaman 18 untuk kasus checkBox, sehingga form menjadi (letakkan button dan TextView di dalam RadioGroup):
Tambahkan method klikHasil sebagai berikut. Perhatikan pengunaan
getCheckRadioButtonId yang mengambil idRadio yang dipilih oleh pengguna :
versi Mei 2012 24
ListView
List view adalah widget untuk menampilkan data dalam bentuk list.
Misalnya kita akan membuat list seperti gambar di bawah:
Pertama, tambahkan ListView di main.xml
Ganti id list view dengan “listangka”
versi Mei 2012 25
Di activity utama, tambahkan code sebagai berikut:
Pada code di atas, dibuat adapter berisi string untuk mengisi list.
R.layout.simple_expandable_list_item1 adalah layout standard yang disediakan
Android. Bagaimana mengupdate isi listview saat program sedang berjalan?
Untuk mengupdate data pada contoh diatas, nilai array dapat langsung diubah dan
kemudian method adapter.notifyDataSetChanged() dipanggil untuk merefresh tampilan. Contoh:
Listview juga dapat digunakan untuk menampilkan struktur yang lebih rumit
(composite). Contoh berikut memperlihatkan listview dengan isi yang kita tentukan sendiri.
versi Mei 2012 26
Untuk membuatnya, pertama buat project baru. Tambahkan ListView seperti pada contoh sebelumnya. Kemudian kita akan buat layout untuk setiap baris pada ListView. Pilih
project pada project explorer, lalu klik kanan Android Tools New Resources File (gambar bawah)
Beri nama filenya row.xml
Tambahkan Large text dan TextView.
versi Mei 2012 27
Ganti Id kedua komponen itu.
Sekarang buat class untuk data judul dan keterangan. Pada project explorer, pilih
package, klik kanan new Class
Beri nama DataList
versi Mei 2012 28
Berikut isi dari DataList
Selanjutnya kita akan buat adapter untuk list. Buat class dengan cara yang sama dengan
sebelumnya, beri nama DataAdapter, tapi class ini merupakan turunan dari kelas ArrayAdapter. Klik browse di dialog saat membuat class (gambar bawah)
Ketik Array…, maka akan muncul ArrayAdapter, pilih item tersebut (gambar bawah)
versi Mei 2012 29
Isi class DataAdapter adalah sebagai berikut:
Inti dari class DataAdapter adalah untuk “mengisi” setiap row saat akan ditampilkan.
Perhatikan pengisian tvJudul dan tvKeterangan dengan data. Terakhir, di activity utama tambahkan kode berikut:
versi Mei 2012 30
Dialog Seringkali app perlu menyampaikan pesan sementara kepada pengguna, misalnya jika menampilkan informasi, melaporkan kesalahan atau memperlihatkan proses yang
memakan waktu lama. Beberapa alternatif dialog yang dapat digunakan adalah sebagai berikut:
Toast
Toast digunakan untuk menampilkan pesan yang kemudian akan menghilang dengan
sendirinya tanpa interaksi dengan pengguna. Fokus juga tetap pada aplikasi dan tidak berpindah ke Toast. Kelebihan Toast adalah mudah untuk dibuat, sedangkan
kelemahannya adalah pengguna dapat saja tidak melihat pesan yang dikandung Toast. Untuk mencobanya, buat project baru, tambahkan satu button, beri label “Toast” dan
kode berikut adalah event saat button diklik:
versi Mei 2012 31
AlertDialog
Jika yang diinginkan adalah dialog yang muncul dan harus ditutup secara manual oleh
pengguna maka dapat digunakan AlertDialog. AlertDialog dapat menampilkan tiga button.
Tambahkan button pada program sebelumnya, beri label “AlertDialog”. Tambahkan code berikut untuk event onClick.
Selain setMessage dan setPositiveButton, dapat digunakan method setTitle, setIcon untuk mengeset judul dan icon message dan SetNeutralButton (button tengah) dan
SetNegativeButton (button kanan). Berikut contohnya
Layout Manager Untuk meletakan komponen (view) pada layar, android menggunakan layout manager. Ada empat jenis layout manager. LinearLayout, TableLayout, RelativeLayout dan
versi Mei 2012 32
FrameLayout. Sebelumnya kita telah menggunakan LinearLayout yang meletakan view secara berurutan. Coba lihat main.xml di direktori resource
layout_weight: rasio antara view. Misalnya ada dua widget, widget pertama ukurannya
harus ¾ layar dan sisanya ¼ layar. Maka set layout_weight widget pertama dengan 3 dan widget kedua dengan 1. Height atau widht perlu diset 0px. TBD contohnya
LinearLayout
TBD
RelativeLayout
RelativeLayout mengatur posisi secara relatif berdasarkan posisi widget yang lain atau
parentnya. Contoh dua widget dibawah. EditText posisinya relatif terhadap textView nama.
Deklarasinya adalah sebagai berikut:
versi Mei 2012 33
Perhatikan penggunaan atribut layout_toRightOf yang menyatakan bahwa EditText berada disebelah kanan label. Sedangkan atribut layout_baseLine digunakan agar TextView dan EditText aligned. Jika layout_baseLine dihapus efeknya akan sebagai
berikut (Text View terlalu tinggi posisinya):
Beberapa atribut lain yang mengatur posisi widget dibandingkan dengan widget lain adalah:
android:layout_above
android:layout_below
android:layout_toLeftOf
android:layout_toRightOf.
Untuk mengatur posisi ada tambahan lima atribut: android: layout_alignTop, android:layout_alignBottom, android:layout_alignLeft, android:layout_alignBaseline
Contoh jika kita ingin menambahkan button sehingga posisinya sebagai berikut:
Tanpa tanda plus
versi Mei 2012 34
Maka deklarasi buttonnya adalah sebagai berikut:
Artinya button tersebut dibawah dan disebelah kanan EditText.
Dengan RelativeLayout, widget juga dapat diatur berdasarkan parent.
android:layout_alignParentTop
android:layout_alignParentBottom
android:layout_alignParentLeft
android:layout_alignParentRight
android:layout_centerHorizontal
android:layout_centerVertical
android:layout_centerInParent
Contoh:
versi Mei 2012 35
Hasilnya:
Silahkan bereksperimen dengan berbagai setting atribut layout.
TableLayout
TableLayout meletakan komponen dalam bentuk tabel (baris dan kolom), mirip seperti Table yang digunakan di HTML. Pengguna mendefinisikan baris dengan tag
<TableRow> dan sistem secara otomatis mendefinisikan kolomnya. Contoh deklarasi berikut:
versi Mei 2012 36
Hasilnya adalah sebagai berikut. Bayangkan sebagai sebuah tabel dengan dua kolom dan
dua baris.
Misalnya kita ingin agar EditText sampai ke bagian belakang, maka tambahkan
android:stretchColumns="1" pada TableLayout. Maka kolom 1 akan terisi penuh.
Kolom 0
Kolom 1
versi Mei 2012 37
Hasilnya:
Misalnya kita ingin menambahkan button. Button ini mengisi dua kolom, mulai dari kolom 0 sampai dengan 1, untuk mengekspresikan hal tersebut, gunakan atribut
android:layout_span
Lalu tambahkan TextView di kolom 1 (ingat kolom dimulai dari 0). Ini bisa dilakukan
dengan menggunakan atribut android:layout_column. Tanpa atribut ini, TextView akan muncul di kolom 0
versi Mei 2012 38
Frame Layout
Framelayout digunakan untuk menampilkan satu komponen. Jika ada lebih dari satu
widget, maka akan ditampilkan secara bertumpuk. Kita bisa menambahkan layout lain sebagai child di dalam frame layout.
Contoh untuk deklarasi berikut menampilkan dua ImageView (pastikan file image telah disimpan di direktori [project]/res/drawable-hdpi, [project]/res/drawable-ldpi dan
[project]/res/drawable-mdpi )
Hasilnya gambar akan bertumpuk seperti ini.
versi Mei 2012 39
Kombinasi Layout
Kita bisa mengkombinasikan beberapa layout dalam satu form. Contoh berikut
menggunakan linearlayout yang memiliki dua anak yaitu relativelayout dan tablelayout.
Relative
layout dengan dua
TextView
TableLayout dengan tiga
kolom dan tiga
baris
versi Mei 2012 40
Latihan Layout
Debugging TBD Debug umum Eclpise: Breakpoint, step over dst.
Logcat log.d(….) Filter
versi Mei 2012 41
Sub Activity Dalam materi sebelumnya, selalu digunakan satu activity (satu form). Tentu saja sebuah applikasi sering membutuhkan multi acitivity. Sebagai contoh, misalnya kita akan membuat sebuah aplikasi matematika sederhana. Applikasi ini menyediakan menu yang
berisi pilihan untuk menghitung luas segiempat dan luas segitiga.
Rancangan layarnya sebagai berikut.
Pertama kita akan membuat form utama terlebih dulu yang memiliki dua menu. Berikut
deklarasi XML form main.
Dengan hasil sebagai berikut:
Hitung Luas Segitiga
Hitung Luas Segiempat
Hitung Luas Segitiga Alas:
Tinggi:
Luas: xxxxx
Hitung Luas
Hitung Luas Segiempat Alas:
Tinggi:
Luas: xxxxx
Hitung Luas
versi Mei 2012 42
Selanjutnya kita akan membuat form kedua untuk menghitung luas segitiga. Klik layout
di package Explorer lalu klik kanan New atau File New Other (Ctrln-N). Pilih Android XML File.
Beri nama file segitiga
dengan root TableLayout
Buat form untuk menerima input dari user dan menampilkan keluaran
versi Mei 2012 43
Deklarasi XML-nya adalah sebagai berikut (perhatikan penggunaan atribut
android:numeric=integer|decimal agar teks hanya menerima nilai integer atau desimal) :
Selanjutnya, kita akan membuat program untuk menghitung luas segitiga. Klik package,
lalu klik kanan New Class
versi Mei 2012 44
Beri nama Segitiga, dan merupakan turunan dari android.app.Activity
Set layout yang digunakan (R.layout.segitiga) dan implementasi saat button diklik.
versi Mei 2012 45
Selanjutnya adalah menghubungkan menu utama dengan modul menghitung segitiga ini.
Intent dapat digunakan untuk memanggil activiy lain. Intent adalah request dari satu
activity ke activity atau intent listener lain. Agar dapat dipanggil, kita harus menambahkan intent ke AndroidManifest.xml.
Intent dapat digunakan untuk memanggil activiy lain. Intent adalah request dari satu activity ke activity atau intent listener lain. Intent juga digunakan untuk notifikasi event
misalnya SD card dimasukkan, SMS masuk, activiy dijalankan dst Penting: agar activity hitung luas segitiga dapat dipanggil, kita harus
menambahkan activity ini ke AndroidManifest.xml.
versi Mei 2012 46
Sekarang kembali ke Main.Java, tambahkan pada method segitigaClick intent berisi permintaan untuk menjalankan activity segitiga dan jalankan dengan startActivity.
Latihan:
Lengkap program diatas dengan hitung segiempat. Buat form agar pengguna dapat memasukan panjang dan lebar, tambahkan tombol yang jika diklik menampilkan luas segiempat. Hubungkan menu utama dengan form tersebut dengan intent.
Pada contoh diatas digunakan startActivity untuk memanggil sub activity. Tidak ada notifikasi apakah subactivity sudah selesai atau belum dan terkadang kita juga membutuhkan data dari subactivity. Untuk hal tersebut, dapat digunakan
startActivityForResult.
Perlu penjelasan yang agak panjang untuk mencoba startActivityForResult. Buatlah sebuah project baru. Pada form Main, tambah satu button yang jika diklik akan memanggil sub activity dan mengirimkan data.
versi Mei 2012 47
Kemudian kita buat form sub activity-nya. Klik kanan di layout New Other Android XML File, beri nama sub.xml
Form-nya seperti berikut, TextView akan menampilkan kiriman data dari form utama,
Potongan XML-nya adalah sebagai berikut:
Sekarang kita membuat Sub.java. Klik kanan dibagian package (misal edu.upi.cs)
New Class. Beri nama Sub, dan isi superclass dengan android.app.Activity. Jangan lupa ganti parameter setContentView dengan .sub.
onStart adalah method yang dipanggil setelah onCreate dan activity telah ditampilkan.
Isi method ini dengan menampilkan isi data yang dikirimkan program utama.
versi Mei 2012 48
Sekarang kita kembali ke main.java, gunakan method putExtra untuk menambahkan data ke intent. Pada startActivityForResult terdapat parameter angka 99 (silahkan ganti
dengan angka atau konstanta apapun). Ini karena satu activity bisa mengirimkan banyak intent dan diperlukan cara untuk membedakan antara satu intent dengan intent yang lain.
Method onActivityResult akan dipanggil saat activity yang dipanggil telah selesai.
Jangan lupa mendaftarkan sub activity di AndroidManifest.xml
versi Mei 2012 49
Test program, maka subactivty akan menampilkan data yang dikirim dari form utama.
Catatan: Jika terjadi force close, ada kemungkinan activity belum ditambahkan di
AndroidManifest.xml
Pada program diatas, anda telah berhasil mengirimkan data ke sub activity. Sekarang kita akan membuat sebaliknya, data dari sub activy akan dikirim ke form utama. Kita akan memodifikasi program diatas sbb:
Pada main.xml, tambahkan TextView untuk menampilkan hasil dari sub activity, beri id
tvHasilSub.
Lalu pada main.java, lengkapi method onActivityResult. Pada method ini, diterima dan diproses hasil dari sub activity.
versi Mei 2012 50
Kemudian untuk subactivitynya sendiri, tambahkan Button yang diklik saat pengguna telah selesai dengan subactivity. Edit sub.xml sebagai berikut
Implementasikan method saat Button selesai diklik di sub.java
Jalankan program, setelah subactiviy ditutup, maka di program utama akan muncul kiriman data dari sub activity
versi Mei 2012 51
Menyimpan Data Android menyediakan beberapa cara untuk menyimpan data: file, relasional database dengan SQLlite dan pasangan key/value yang disebut sistem preferences. Untuk sharing antar aplikasi disediakan mekanisme yang disebut ContentProvider.
Shared Preferences
Shared Preferences (SP) adalah mekanisme untuk menyimpan pasangan key-value untuk tipe data primitif (integer, double, string, booelan). SP cocok untuk penggunaan ringan
seperti menyimpan setting aplikasi dan kondisi user interface (misalnya saat activity masuk ke state sleep karena device menerima telepon).
Data dalam shared preferences disimpan dalam device android dalam bentuk XML.
Shared Preference objek untuk activity diperoleh melalui getPreferences().
Ada tiga mode untuk shared preferences (SP) MODE_PRIVATE: hanya aplikasi yang membuat SP yang dapat mengakses data
MODE_WORLD_READABLE: aplikasi yang lain boleh membaca MODE_WORLD_WRITEABLE: aplikasi yang lain boleh membaca sekaligus menulis.
Code berikut memperlihatkan cara penggunaan SP. Jangan lupa memanggil commit!
versi Mei 2012 52
Jalankan. Kemudian coba komentari bagian isi data, dan jalankan kembali aplikasi.
Dapat dilihat data nama dan umur tersimpan walaupun aplikasi sudah ditutup,
Latihan:
Buat applikasi yang menyimpan berapa kali aplikasi telah dijalankan. Tampilkan jumlah tersebut.
SQLite
SQLite menyediakan fasilitas relational DBMS dengan perintah SQL. Referensi lengkap SQL yang digunakan dapat dilihat di http://www.sqlite.org/lang.html
Setiap aplikasi memiliki instance database tersendiri, dan berbeda dengan shared
preference, tidak disediakan fasilitas agar aplikasi dapat membaca database aplikasi lain. Untuk menggunakan SQLite, sangat dianjurkan menggunakan class helper untuk
membuka dan menutup database, menginisiasi tabel dst. Helper juga digunakan saat melakukan upgrade struktur database jika suatu saat aplikasi diupdate. Class helper ini
diturunkan dari class SQLiteOpenHelper. Untuk latihan kita akan membuat aplikasi sederhana yang menyimpan data relasi berupa
nama dan nomor telpon. Pertama kita buat class helper terlebih dulu. Buatlah project Android, tambahkan ke dalam project tersebut satu class (file New class). Beri class ini RelasiOpenHelper.
versi Mei 2012 53
Buatlah code berikut
versi Mei 2012 54
Selanjutnya kita akan membuat class yang melakukan manipulasi terhadap data (insert, ambil data), beri nama DbRelasi.
Source code DbRelasi adalah sebagai berikut:
versi Mei 2012 55
Setelah kita membuat class helper dan class dbRelasi, sekarang kita akan memanfaatkan
dua kelas tersebut. Kembali ke activity utama yaitu class Main. Tambahkan code sebagai berikut:
versi Mei 2012 56
RawQuery dan Cursor
TBD
Akses multi record
TBD
Latihan:
Buat applikasi untuk menyimpan datamahasiswa (NIM, NAMA, ALAMAT). Buatlah menu untuk menambahkan data dan mencari berdasarkan NIM (NIM diinput oleh user).
versi Mei 2012 57
File
File dapat disimpan baik di dalam device maupun di media penyimpanan (SD card).
Secara default, aplikasi tidak dapat mengakses file milik aplikasi lain. Bagi anda yang telah mengenal stream dan file di Java, anda dapat membaca secara cepat bagian ini,
karena tidak ada perbedaan antara Java dan Android. Class yang mensupport operasi file disediakan di package java.io.*
Stream
Pemrosesan file dalam jumlah besar, yang membutuhkan kinerja yang tinggi masih dibutuhkan berbagai bidang. Misalnya aplikasi backend yang mengelola dokumen di
perusahaan, aplikasi pengolahan teks, aplikasi pemroses XML, HTML, aplikasi simulasi-simulasi dan sebagainya. Penguasaan stream dan file akan membantu anda untuk memecahkan berbagai masalah
Stream adalah aliran data. Bayangkan stream sebagai sungai yang mengalirkan air.
Seperti sungai, stream mengalirkan byte-byte data. Pemrosesan input dan output di Java pada prinsipnya menggunakan konsep stream ini.
Gambar 1: Input Stream (diambil dari http://download.oracle.com/javase/tutorial)
Gambar 1: Output Stream (d iambil dari http://download.oracle.com/javase/tutorial)
versi Mei 2012 58
Untuk membantu programmer, tersedia banyak class-class untuk memproses stream, bahkan lebih dari 60 kelas! (lihat gambar 3 dan gambar 4). Tentu saja tidak semua kelas
tersebut harus digunakan, programmer bisa memilih kelas mana yang dibutuhkan untuk menyelesaikan masalahnya.
Persiapan
Sebelum memulai, pastikan emulator sudah memiliki SD-Card (Start All Program Android SDK Tools)
Lalu untuk setiap project yang akan mengakses ke SD Card, tambahkan ijin untuk menulis ke media penyimpanan external di AndroidManifest.xml
File Teks
Sebelum mulai, pastikan virtual device telah diset SD-Card dan AndroidManifest telah ditambahkan ijin untuk menulis (baca bagian persiapan)
versi Mei 2012 59
File teks penting untuk menulis data, XML, HTML dan sebagainya. File teks dianggap
sebagai stream dari karakter. Untuk menulis ke file teks, cara yang paling mudah adalah dengan menggunakan class PrintWriter. Berikut adalah contoh program yang menulis
dua baris ke file teks.
Sedangkan untuk membaca, dapat digunakan class Scanner yang dapat membaca baris demi baris. Berikut contoh codenya, letakkan di bawah code atas.
versi Mei 2012 60
Objek Stream
Java telah menyediakan fasilitas agar objek dapat disimpan ke dalam stream secara otomatis dengan mudah. Class yang digunakan adalah ObjectOutputStream dan
ObjectInputStream.
Setelah membuat project baru (pastikan AndroidManifest.xml-nya telah ditambahkan ijin
menulis ke external!) Sekarang coba kita buat class Mahasiswa sebagai berikut.
Tambah class baru (Filenewclass). Perhatikan penggunaan interface java.io.Serializable yang menandakan bahwa class ini dalam disimpan ke dalam stream
Codenya sebagai berikut. Perhatikan variabel serialVersionUID untuk menyatakan versi class. Jangan lupa class Mahasiswa ini mengimplementas interface Serializable.
Latihan: buat file teks berisi
<html> <body> Halo </body>
</html>
versi Mei 2012 61
Selanjutnya, buat program untuk menulis dua objek mahasiswa ke dalam class. Penulisan
objek ke stream sangat mudah, hanya dengan class ObjectOutputStream dan method writeObject. Buatlah code ini di activity Main.
versi Mei 2012 62
Sekarang kita lanjutkan ke pembacaan objek yang telah dituliskan. Untuk membaca file berisi objek digunakan class FileInputStream dan ObjectInputStream;
Latihan: Buatlah class User dengan atribut username dan password. Simpan data objek user (minimal 3 user) ke dalam Android menggunakan file teks dan file objek.
Catatan:
Perhatikan penggunaan code ObjectOutputStream out =
new ObjectOutputStream (new FileOutputStream(namaFileOutput));
Pada code diatas Objek FileOuputStream „dibungkus‟ dengan ObjekOutputStream. Ini yang disebut dengan stream layering, yaitu penggunaan kombinasi beberapa class
yang memproses stream. Contoh yang lain: pbin = new PushbackInputStream(
new BufferedInputStream(new FileInputStream("pegawai.dat")))); Walaupun pada awalnya teknik layering stream ini terlihat sulit, tapi teknik ini sangat
powerfull untuk mengkombinasikan berbagai fitur yang dibutuhkan.
versi Mei 2012 63
Grafik
Menggambar di Canvas
Dalam contoh pertama kita akan menggunakan Canvas, Paint, Path dan Color untuk
menggambar kotak. Perlu diingat koordinat Canvas adalah 0,0 berada di kiri atas. Makin ke kanan nilai x semakin besar dan makin kebawah nilai y semakin besar.
Buatlah class yang bernama GraphicsView yang mengextend kelas View.
Lalu di-activity utama, tambahkan kode berikut yang men-set contentview dengan class
GraphicView.
Canvas, sesuai namanya adalah tempat untuk menggambar bentuk 2D. Dengan canvas, kita dapat menggambar bentuk (lingkaran, kotak, garis, titik), menggambar text, translate,
scale, rotate. Paint digunakan untuk menyimpan style, warna dan informasi lainnya yang dibutuhkan
untuk menggambar.
versi Mei 2012 64
Class Color digunakan untuk merepresentasikan warna. Android menggunakan 4 angka untuk alpha, red, green dan blue (RGB) dengan masing-masing rentang nilai 0 sd 255.
Alpha digunakan menyatakan transparansi, alpha 0 artinya transparan 100% . Pada code diatas, kita menggunakan color constant (Color.GREEN). Coba ganti baris tersebut
menjadi, silahkan berkesperimen dengan alpha yang lebih kecil.
Sekarang kita coba fungsi- fungsi lain pada canvas, tambahkan code berikut dalam class
Graphicsview
Menulis Teks di Canvas
Method drawText dapat digunakan untuk menambahkan teks di canvas, sedangkan Path dan drawTextOnPath dapat digunakan untuk menggambar teks yang mengikuti jalur tertentu. Untuk jelasnya, silahkan coba code dibawah.
versi Mei 2012 65
Catatan penting: Perhatikan bahwa layar Android memiliki resolusi berbeda-beda. Sebagai contoh, 100 point di layar dengan resolusi tinggi akan memiliki panjang berbeda dengan layar resolusi rendah. Gunakan Canvas.getWidth() dan Canvas.getHeight untuk
menghitung panjang objek yang diinginkan. Misalnya jika kita ingin membuat garis sepanjang setengah layar, gunakan ukuran getWidth() / 2 sehingga pada resolusi apapun,
garis akan selalu sepanjang setengah layar.
Event Touch
Selenjutnya kita akan membuat program yang akan menggambarkan kotak ditempat pengguna menyentuh layar. Berikut adalah isi dari class Graphics view yang
membersihkan layar dan menggambar kotak pada koordinat sentuhan jari.
Latihan: Buatlah gambar rumah seperti ini, tambahkan warna dan modifikasi sesuai yang anda inginkan
versi Mei 2012 66
Sedangkan code untuk Activity adalah sebagai berikut:
versi Mei 2012 67
Load Image ke Canvas
TBD
Animasi di Canvas
Animasi di Canvas cocok digunakan untuk game sederhana seperti game berjenis puzzle yang melibatkan sedikit objek dan tidak memperlukan animasi berat. Canvas juga lebih
sederhana dibandingkan dengan OpenGL Animasi dapat dilakukan dengan membersihkan layar dan menggambar objek di tempat
yang baru. Class Asyntask digunakan untuk mengatur posisi objek dan jeda antar frame.
Berikut adalah contoh codenya. Buat project baru, tambahkan class GraphicsView yang merupakan turunan View seperti pada contoh sebelumnya. Class ini akan membersihkan layar dan menggambar bola sesuai posisi (satu frame).
Selanjutnya buat class AnimasiTask yang merupakan turunan dari Asynctask. Kelas ini berperan untuk mengatur posisi bola dan memerintahkan agar canvas didraw ulang setiap
posisi berubah.
versi Mei 2012 68
Terakhir, di-activity utama tambahkan code berikut:
Latihan: Buatlah game sederhana memukul serangga di layar. Program menampilkan kotak di layar, jika pengguna „memukulnya‟ dengan jari, maka pengguna
mendapat skor. Tampilkan animasi jika kotak terkena pukulan (misal kotak berubah warna).
versi Mei 2012 69
Koneksi dengan Server Ada beberapa alasan diperlukan koneksi dengan server diantaranya:
1. Device memiliki beberapa keterbatasan (komputasi, space). Server dapat digunakan untuk memproses data dan hasilnya saja yang akan digunakan di
device. 2. Sinkronisasi data. Pengguna dapat mengambil data terkini atau mengupload data
tambahan. Sebelum memulai, pastikan emulator telah terhubung dengan internet, jalankan browser
dan coba buka salah satu website.
Jika tidak terhubung dengan internet, dapat digunakan server local seperti Apache atau
PhpMyAdmin.
PENTING: Tambahkan di AndroidManifest permission untuk koneksi internet.
Tanpa menambahkan ini, program anda tidak akan berjalan!
Letakkan permission ini di atas application (gambar bawah)
Buat project baru dan tulis code berikut:
versi Mei 2012 70
Tambahkan class GetDataTask yang merupakan turunan dari Asynctask sebagai berikut. Ganti isi variabel url jika Anda menggunakan localhost:
versi Mei 2012 71
Google Map Google Map adalah fitur yang disedikan oleh Google, dan bukan standard Android. Sebelum memulai, pastikan Google API sudah terinstall untuk platform target dan AVD untuk Google API juga sudah ada. Jika belum, silahkan update terlebih dulu.
Diperlukan key yang didapat dari Google untuk menggunakan fasilitas ini.
Baca terlebih dulu https://developers.google.com/maps/documentation/android/mapkey
Kita akan membuat mapkey sementara yang dapat digunakan selama pengembangan. Pertama-tama cari lokasi keystore untuk debug.
Dalam Eclipse, pilih Window Preferences klik Android, klik Build. Catat nilai “default debug keystore”.
Sebagai contoh, dari gambar diatas lokasi keystore adalah di c:\Users\user\.android\debug.keystore
Kemudian cari posisi keytool di JDK Java. Biasanya terdapat di: c:\Program Files\Java\jdk1.7.0\bin
Lalu gunakan Start cmd, jalankan keytool dengan sintaks sebagai berikut. Sesuaikan
lokasi debug.keystore dengan yang ada di komputer anda. Ingat, saat ditanya password ketikkan „android‟ (tanpa tandapetik). keytool -v -list -keystore C:\Users\user\.android\debug.keystore
Enter keystore password: [ketik android]
Hasilnya akan seperti berikut, ambil hanya nilai MD5 saja.
versi Mei 2012 72
Dengan nilai certificate fingerprint MD5, kita dapat memperoleh mapkey melalui: (anda harus memiliki account Google terlebih dulu)
https://developers.google.com/android/maps-api-signup Masukan fingerprint, klik generate API Key, maka didapatlah API key untuk mengakses
peta.
Selanjutnya buat project baru Android. Saat menentukan target, pilih Google API.
Artinya selain splatform standard, ditambahkan Google API
Langkah pertama adalah merubah manifest.xml, tambahkan ijin untuk mengakses internet dan lokasi dan menggunakan library google maps. Pastikan <uses-library ..> ada di
dalam <application> .
Selanjutnya isi main.xml dengan code sebagai berikut, ganti isi apiKey dengan key yang
telah diperoleh dari google sebelumnya:
versi Mei 2012 73
Di activity utama, tambahkan kode berikut, perhatikan bahwa activity diturunkan dari MapActivity.
Saat program dijalankan, seharusnya akan tampil peta dunia.
Zoom
Menambahkan zoom sangat mudah, tambahkan dua baris berikut ke dalam onCreate.
Ubah Posisi
Untuk mengganti posisi peta, dapat digunakan method setCenter() dengan parameter GeoPoint. GeoPoint menyimpan posisi latitude dan longitude dalam integer untuk menghemat memori dan mempercepat proses. Oleh karena itu koordinat perlu dikali 1E6
terlebih dulu. Sedangkan untuk mengatur zoom, dapat digunakan method setZoom. Tambahkan code berikut pada onCreate:
versi Mei 2012 74
Menambahkan Layer
Untuk menambahkan layer berupa point di peta, dapat digunakan class ItemizedOverlay. Class ini berisi informasi objek yang akan ditambahkan dipeta dan aksi jika objek
tersebut ditap. Tambahkan class baru di project peta kita, beri nama PointsOverlay yang merupakan
turunan dari ItemizedOverlay.
Tambahkan kode berikut
versi Mei 2012 75
Kemudian di oncreate activity utama, tambahkan kode berikut, set zoom level ke 16.
versi Mei 2012 76
Import External Library TBD