WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing...

44
MOBILE PROGRAMMING 28 BAB 1 Pendahuluan J2ME Persyaratan-persyaratan untuk latihan laboratorium Sistem Operasi yang mendukung NetBeans IDE 5.5 berjalan pada sistem operasi yang mendukung Java VM. Dibawah ini erupakan daftar dari platform-platform yang digunakan: Microsoft Windows XP Professional SP2 atau yang terbaru Mac OS X 10.4.5 atau yang terbaru Red Hat Fedora Core 3 Sistem Operasi Solaris™ 10 Update 1 (SPARC® and x86/x64 Platform Edition) NetBeans Enterprise Pack juga dapat digunakan pada platform- platform berikut ini: Microsoft Windows 2000 Professional SP4 Solaris™ 8 OS (SPARC and x86/x64 Platform Edition) and Solaris 9 OS (SPARC and x86/x64 Platform Edition) Berbagai macam distribusi LINUX Minimum konfigurasi Hardware Catatan: Minimum resolusi layar NetBeans IDE's adalah 1024x768 pixels. Sistem Operasi Microsoft Windows: o Prosesor: 500 MHz Intel Pentium III workstation atau setaranya o Memori: 512 MB o Disk space: 850 MB dari free disk space Sistem operasi Linux: o Prosesor: 500 MHz Intel Pentium III workstation atau setaranya o Memori: 512 MB o Disk space: 450 MB dari free disk space Solaris OS (SPARC): o Prosesor: UltraSPARC II 450 MHz o Memori: 512 MB o Disk space: 450 MB of free disk space Solaris OS (x86/x64 Platform Edition): o Prosesor: AMD Opteron 100 Series 1.8 GHz

Transcript of WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing...

Page 1: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

BAB 1 Pendahuluan J2MEPersyaratan-persyaratan untuk latihan laboratorium Sistem Operasi yang mendukung

NetBeans IDE 5.5 berjalan pada sistem operasi yang mendukung Java VM. Dibawah ini erupakan daftar dari platform-platform yang digunakan:

Microsoft Windows XP Professional SP2 atau yang terbaru Mac OS X 10.4.5 atau yang terbaru Red Hat Fedora Core 3 Sistem Operasi Solaris™ 10 Update 1 (SPARC® and x86/x64 Platform Edition)

NetBeans Enterprise Pack juga dapat digunakan pada platform-platform berikut ini: Microsoft Windows 2000 Professional SP4 Solaris™ 8 OS (SPARC and x86/x64 Platform Edition) and Solaris 9 OS (SPARC

and x86/x64 Platform Edition) Berbagai macam distribusi LINUX

Minimum konfigurasi Hardware Catatan: Minimum resolusi layar NetBeans IDE's adalah 1024x768 pixels.

Sistem Operasi Microsoft Windows:

o Prosesor: 500 MHz Intel Pentium III workstation atau setaranyao Memori: 512 MBo Disk space: 850 MB dari free disk space

Sistem operasi Linux:o Prosesor: 500 MHz Intel Pentium III workstation atau setaranyao Memori: 512 MBo Disk space: 450 MB dari free disk space

Solaris OS (SPARC):o Prosesor: UltraSPARC II 450 MHzo Memori: 512 MBo Disk space: 450 MB of free disk space

Solaris OS (x86/x64 Platform Edition):o Prosesor: AMD Opteron 100 Series 1.8 GHzo Memori: 512 MBo Disk space: 450 MB dari free disk space

Sistem Operasi Macintosh OS X:o Prosesor: PowerPC G4o Memori: 512 MBo Disk space: 450 MB dari free disk space

Konfigurasi Hardware yang direkomendasikan

Sistem Operasi Microsoft Windows:o Prosesor: 1.4 GHz Intel Pentium III workstation atau setaranyao Memori: 1 GB

Page 2: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

o Disk space: 1 GB dari free disk space

Sistem Operasi Linux:o Prosesor: 1.4 GHz Intel Pentium III atau setaranyao Memori: 1 GBo Disk space: 850 MB dari free disk space

Solaris™ OS (SPARC®):o Prosesor: UltraSPARC IIIi 1 GHzo Memori: 1 GBo Disk space: 850 MB dari free disk space

Solaris™ OS (x86/x64 platform edition):o Prosesor: AMD Opteron 100 Series 1.8 GHzo Memori: 1 GBo Disk space: 850 MB dari free disk space

Sistem Operasi Macintosh OS X:o Prosesor: PowerPC G5o Memori: 1 GBo Disk space: 850 MB dari free disk space

Software yang diperlukan NetBeans Enterprise Pack 5.5 dapat diakses pada Java 2 Platform Standard Edition Development Kit 5.0 Update 1 atau diatasnya (JDK 5.0, versi 1.5.0_01 atau diatasnya), dimana berisi Java Runtime Environment plus developer tools untuk meng-compile, men-debug, and menjalankan aplikasi yang ditulis dengan bahasa Java. Sun Java System Application Server Platform Edisi 9 telah diuji dengan JDK 5.0 update 6.

Untuk Solaris, Windows, dan Linux, Anda dapat mendownload JDK untuk platform Anda pada http://java.sun.com/j2se/1.5.0/download.html

Untuk Mac OS X, memerlukan Java 2 Platform Standard Edition (J2SE) 5.0 Release 4. Anda dapat mendownload JDK dari Apple's Developer Connection site. Pada: http://developer.apple.com/java (untuk mendownload JDK Anda harus melakukan registrasi terlebih dahulu).

Pembagian Paket Java

Tidak perlu panjang lebar untuk memaparkan pada itu Java. Java adalah teknologi dan bahasa pemrograman yang berjalan pada multiflatform sesuai dengan semboyannya yaitu “Write Once, Run Anywhere”. Pada site official Java dari Sun yaitu http://java.sun.com bisa ditemui tiga pembagian paket Java yaitu :• Java 2 Enterprise Edition (J2EE).• Java 2 Standart Editon (J2SE).• Java 2 Micro Edition (J2ME).

Penjelasan paling simple atas pembagian tersebut berdasarkan atas perangkat keras yangdigunakan.a. Paket J2EE digunakan pada perangkat keras yang mempunyai spesifikasi dan memory

yang besar seperti pada komputer server. b. Paket J2SE digunakan pada perangkat keras seperti komputer desktop.c. Paket J2ME digunakan pada perangkat yang memiliki memory kecil seperti ponsel, pager

atau PDA.

Page 3: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Paparan singkat di atas adalah penjelasan singkat mengenai Java dan sedikit gambaran dimana paket J2ME digunakan. Sebenarnya masih panjang penjelasan tentang Java dan paket J2ME, tapi tidak dibahas pada tulisan ini, mungkin bisa menjadi pekerjaan rumah buat para pembaca yang tertarik akan Java atau J2ME.

Midlet : Aplikasi J2MEMungkin sebagain kita telah menganal Applet sebagai aplikasi Java yang berjalan pada internet yang bersifat client side atau Servlet yang bersifat server side. Sedangkan untuk aplikasi pada paket J2ME diberi nama Midlet.

Perangkat untuk MidletUntuk penjalankan Midlet tentunya diperlukan perangkat keras (device) yang mendukung Java artinya perangkat tersebut harus memiliki Java Virtual Machine untuk menjalankan Midlet. Sekarang tidak susah lagi untuk menemui perangkat yang bisa menjalankan Midlet terutama untuk jenis ponsel. Hampir setiap ponsel keluaran terbaru telah menyertakan dukungan akan teknologi Java.

Emulator Ponsel JavaUntuk menjalankan Midlet, programmer tidak perlu memiliki dan mencobanya pada ponsel. Cukup dengan emulator dari ponsel yang dapat dijalan pada PC. Berikut adalah contoh emulator :

Siemens M55http://www.my-siemens.com

Nokia 7210http://forum.nokia.com

J2ME WTKhttp://java.sun.com/j2me

Page 4: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Bab 2 Memulai Pemrograman Mobile

TujuanPada bagian ini, kita akan menggali tentang menulis, membangun, menggunakan emulator dan melakukan packaging aplikasi J2ME. Integrated Programming Environment yang akan kita gunakan adalah NetBeans 4.1 (www.netbeans.org) dan NetBeans Mobility Pack.

Setelah menyelesaikan bagian ini, diharapkan mampu:Membuat MIDlet sederhanaMembuat sebuah project di NetBeansMembuat sebuah MIDlet menggunakan NetBeans Mobility PackMenjalankan MIDlet di emulator

PengenalanIDE (Integrated Development Environment) adalah sebuah lingkungan pemrograman(programming environment) yang memiliki GUI builder, text atau code editor, compiler dan/atau interpreter dan debugger. Dalam hal ini, NetBeans Mobility Pack juga memiliki device emulator. Fasilitas ini bisa membuat kita melihat program kita pada device yang sesungguhnya.

Menggunakan NetBeans Mobility PackSeperti yang telah dijelaskan pada awal bab ini tentang hal yang diperlukan, NetBeans 4.1 dan NetBeans Mobility Pack harus sudah terinstall di komputer Anda.

Langkah 1: Membuat project baru

Page 5: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Langkah 2: Memilih kategori "Mobile"

Langkah 3: Memilih "Mobile Application"

Page 6: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Langkah 4: Beri nama project dan tentukan lokasinya(Hilangkan tanda pada "Create Hello MIDlet", kita akan membuat MIDlet kita sendirinantinya)

Step 5: Memilih Platform (optional)

Page 7: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Langkah 6: Membuat sebuah MIDlet baru

Page 8: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Langkah 7: Memilih MIDP "Category" dan MIDlet "File Type"

Langkah 8: Memberi nama MIDlet

Page 9: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Langkah 9

Langkah 10: Mengganti code yang dibuat secara otomatis dengan code programkita.

Page 10: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Langkah 11: Mengcompile dan Menjalankan (Run) MIDlet di Emulator

Langkah 12: Menjalankan MIDlet kita di Emulator

Page 11: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

LatihanMultiple MIDlets dalam satu MIDlet suiteTambahkan satu MIDlet baru pada project "ProjectHello". Perlu anda catat bahwaNetBeans Mobility Pack secara otomatis menambahkan MIDlet baru pada aplikasi fileJAD ketika anda menggunakan "New File..." Wizard.

Page 12: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

BAB 3 List dan Interaksi UserPada saat kita membuat aplikasi maka diperlukan link, tombol atau item lain yang bisa digunakan user untuk berinteraksi dengan aplikasi. Gunanya tentu saja untuk mengantarkan user ke bagian lain dari aplikasi sesuai yang ditunjuk oleh link, tombol atau link tersebut. API MIDP mempunyai komponen yang dapat digunakan untuk membangun user interface seperti list, radio button, selection box dan lain-lain. Tip dan Trik ini akan memberikan langkahlangkah untuk membuat menu dengan menggunakan class List pada aplikasi ponsel.

Membuat Menu dengan ListBerikut adalah contoh kode program yang memuat penggunaan List untuk membuat menu.

Berikut adalah tampilan aplikasi dari beberapa emulator yang biasa digunakan.

Interaksi dengan MenuAplikasi di atas masih belum memproses aksi yang diberikan oleh user pada saat memilih menu.

Page 13: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Selanjutnya aplikasi di atas akan dimodifikasi agar bisa memproses aksi sesuai dengan item dariList yang dipilih. Dan berikut adalah kode programnya.

Berikut adalah tampilan pada emulator Nokia Seri 60 ketika Link1 atau Link2 dipilih.

Page 14: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Page 15: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

BAB 4 Command, List dan Interaksi UserPada tulisan ini akan dibahas tentang penggunaan class Command dan tip-trik penggunaan classini dalam sebuah aplikasi.

Menambahkan CommandObjek yang dibentuk dari class Command dapat ditambahkan pada banyak objek, misalnya objek yang dibuat dari class Form, class TextBox, class Canvas dan lain-lain. Berikut ini objekobjek yang dibentuk dari class Command akan ditambahkan ke dalam objek yang dibentuk dariclass Form.CommandMidlet01.javaimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class CommandMidlet01 extends MIDlet implements CommandListener {

private Command cmdKeluar;private Command cmdAlert;private Display display;private Form form;private Alert alert;

public CommandMidlet01() { form = new Form("Aplikasi 01"); cmdKeluar = new Command("Keluar", Command.EXIT, 1); cmdAlert = new Command("Alert", Command.SCREEN, 2); form.addCommand(cmdAlert); form.addCommand(cmdKeluar); form.setCommandListener(this);}

public void startApp() { display = Display.getDisplay(this); display.setCurrent(form);}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void commandAction(Command c, Displayable d) { if (d == form) { if (c == cmdKeluar) { destroyApp(false); notifyDestroyed(); } else { alert = new Alert("Alert..!!!"); alert.setString("Tombol Alert ditekan..."); display.setCurrent(alert); } }}

}

Berikut adalah keluaran dari contoh aplikasi di atas.

Page 16: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Di bawah ini adalah tampilan pertama ketika aplikasi dijalankan.

Sedangkan apabila tombol untuk Alert ditekan maka bisa dilihatan tampilan seperti berikut :

Command dan ListTahap selanjutnya akan dibuat aplikasi yang didalamnya terdapat perintah (command) untuk keluar aplikasi dan untuk memanggil menu yang merupakan objek dari List. Pada menu terdapat item-item yang akan memberikan aksi berupa alert yang merupakan objek yang dibentuk dari class Alert. Selain itu juga terdapat aksi yang mengembalikan ke tampilan awal aplikasi.Berikut adalah kode dari aplikasi yang telah dideskripsikan di atas.CommandMidlet02.javaimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class CommandMidlet02 extends MIDlet implements CommandListener {private Display display;private Command cmdMenu;private Command cmdKeluar;private TextBox textBox;private List mainMenu;

public CommandMidlet02() { textBox = new TextBox("Aplikasi 02", "Ini Command Midlet 02", 256, 0);

cmdMenu = new Command("Menu", Command.SCREEN, 1); cmdKeluar = new Command("Keluar", Command.SCREEN, 1); textBox.addCommand(cmdMenu); textBox.addCommand(cmdKeluar); textBox.setCommandListener(this);}

public void startApp() { display = Display.getDisplay(this); display.setCurrent(textBox);}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void commandAction (Command c, Displayable d) { if (d == textBox) { if (c == cmdKeluar) { destroyApp(false); notifyDestroyed(); } else if (c == cmdMenu) { mainMenu = new List("Menu Aplikasi 02", List.IMPLICIT); mainMenu.append("Link 1", null);

Page 17: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

mainMenu.append("Link 2", null); mainMenu.append("Kembali", null); mainMenu.setCommandListener(this); display.setCurrent(mainMenu); } } else if (d == mainMenu) { if (mainMenu.isSelected(0)) { // Ketik operasi yang diinginkan // ketika tombol untuk Link1 ditekan } else if (mainMenu.isSelected(1)) { // Ketik operasi yang diinginkan // ketika tombol untuk Link2 ditekan } else if (mainMenu.isSelected(2)) { display.setCurrent(textBox); } } }}

Berikut adalah tampilan pertama dari aplikasi dan ketika tombol untuk Menu ditekan.

Page 18: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

BAB 5 Form dan TextfieldPada saat membuat aplikasi kadang kita memerlukan suatu masukan yang diisi oleh pengguna untuk diproses. Untuk maksud tersebut diperlukan form yang didalamnya terdapat kolom isian.

Membuat Form dan Kolom IsianUntuk membuat form diperlukan class Form sedangkan untuk membuat kolom isian diperlukan class TextField. Berikut adalah contoh kodenya.FormUIMidlet01.javaimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class FormUIMidlet01 extends MIDlet implements CommandListener{private Form form;private TextField textField;private Display display;private Command cmdKeluar;private Command cmdAksi;private Alert alert;public String strNama;

public FormUIMidlet01() { form = new Form("Form UI"); textField = new TextField("Nama :", "", 10, 0); cmdKeluar = new Command("Keluar", Command.EXIT, 1); cmdAksi = new Command("Aksi", Command.SCREEN, 2); form.addCommand(cmdKeluar); form.addCommand(cmdAksi); form.append(textField); form.setCommandListener(this);}

public void startApp() { display = Display.getDisplay(this); display.setCurrent(form);}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void commandAction(Command c, Displayable d) { if (d == form) { if (c == cmdKeluar) { destroyApp(false); notifyDestroyed(); } else if (c == cmdAksi) { strNama = textField.getString(); alert = new Alert("Pesan"); alert.setString("Hallo "+strNama); display.setCurrent(alert); } } }}

Pada aplikasi di atas user akan memasukkan nama dan setelah menekan tombol Aksi maka akan

Page 19: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

ditampilkan alert yang akan menyapa user tersebut seperti yang ditampilkan oleh emulator Nokia seri 60 di bawah ini.

Transaksi Nilai Antar Kolom IsianContoh berikutnya akan memberikan contoh bagaimana mengirimkan nilai yang kita isikan untuk ditampilkan pada kolom isian yang lain. Sebagai contoh user memasukkan nilai pada kolom isian pertama dan setelah mengklik tombol Aksi maka nilai tersebut akan ditampilkan pada kolom isian yang kedua. Kode program dari kasus ini adalah sebagai berikut :FormUIMidlet02.javaimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class FormUIMidlet02 extends MIDlet implements CommandListener{private Form form;private TextField textField1;private TextField textField2;private Display display;private Command cmdKeluar;private Command cmdAksi;public String strText;

public FormUIMidlet02() { form = new Form("Form UI 2"); textField1 = new TextField("Input 1 :", "", 10, 0); textField2 = new TextField("Input 2 :", "", 10, 0); cmdKeluar = new Command("Keluar", Command.EXIT, 1); cmdAksi = new Command("Aksi", Command.SCREEN, 2); form.addCommand(cmdKeluar); form.addCommand(cmdAksi); form.append(textField1); form.append(textField2); form.setCommandListener(this);}

public void startApp() { display = Display.getDisplay(this); display.setCurrent(form);}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void commandAction(Command c, Displayable d) { if (d == form) { if (c == cmdKeluar) {

Page 20: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

destroyApp(false); notifyDestroyed(); } else if (c == cmdAksi) { strText = textField1.getString(); textField2.setString(strText); } } }}

Berikut adalah tampilan dari program ini :

Page 21: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

BAB 6 Menggambar di CanvasCanvas, sesuai namanya guna objek ini untuk mengambar. Selain itu sifanya hampir sama dengan objek lain yang bisa ditambahkan objek-objek lain kedalamnya seperti penambahan objek command. Objek canvas sering digunakan untuk membuat aplikasi game. Pada bagian ini akan diberikan contoh bagaimana menggambar di canvas.

Membuat dan Menambahkan CanvasYang dilakukan terlebih dahulu adalah membuat class Canvas yang nantinya akan dipanggil sebagai objek. Berikut adalah contoh kodenya.GUIMidlet01.javaimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class GUIMidlet01 extends MIDlet implements CommandListener {private Display display;private Canvas canvas;private Command cmdKeluar;

public GUIMidlet01() { cmdKeluar = new Command("Keluar", Command.SCREEN, 1); canvas = new CanvasGUIMidlet01(); canvas.addCommand(cmdKeluar);}

public void startApp() { display = Display.getDisplay(this); display.setCurrent(canvas); canvas.setCommandListener(this);}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void commandAction(Command c, Displayable d) { if (d == canvas) { if (c == cmdKeluar) { destroyApp(false); notifyDestroyed(); } } }}

class CanvasGUIMidlet01 extends Canvas { public void paint(Graphics g) { }}

Hasil dari GUIMidlet01 hanya menampilan layar kosong dengan perintah Keluar.

Setting FontBerikut adalah contoh menggambar tulisan pada canvas.GUIMidlet02.javaimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;

Page 22: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

public class GUIMidlet02 extends MIDlet implements CommandListener {private Display display;private Canvas canvas;private Command cmdKeluar;

public GUIMidlet02() { cmdKeluar = new Command("Keluar", Command.SCREEN, 1); canvas = new CanvasGUIMidlet01(); canvas.addCommand(cmdKeluar);}

public void startApp() { display = Display.getDisplay(this); display.setCurrent(canvas); canvas.setCommandListener(this);}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void commandAction(Command c, Displayable d) { if (d == canvas) { if (c == cmdKeluar) { destroyApp(false); notifyDestroyed(); } }}

}

class CanvasGUIMidlet02 extends Canvas { public void paint(Graphics g) { g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD, Font.SIZE_LARGE)); g.drawString("Chocolove!", 0, 0, g.TOP|g.LEFT); g.setFont(Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_UNDERLINED, Font.SIZE_LARGE)); g.drawString("Chocolove!", getWidth()/2, getHeight()/2, g.TOP|g.HCENTER); g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_ITALIC, Font.SIZE_MEDIUM)); g.drawString("Chocolove!", getWidth(), getHeight(), g.BOTTOM|g.RIGHT);}

}

Hasil dari contoh di atas adalah sebagai berikut :

Pada kode di atas terdapat baris sebagai berikut :g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_ITALIC, Font.SIZE_MEDIUM));

Page 23: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

setFont adalah method yang dimiliki oleh objek g yang berguna untuk melakukan setting font. Untuk jenis font, style font dan ukuran font digunakan objek Font dan method getFont. Method ini berguna untuk mengambil nilai jenis, style dan ukuran font. Untuk masing-masing nilai telah disediakan oleh objek Font dalam fieldnya. Berikut adalah nilai-nilai dari field-field tersebut. Kelompok jenis (face) font :• FACE_MONOSPACE.• FACE_PROPOTIONAL.• FACE_SYSTEM.

Kelompok style font :• STYLE_BOLD.• STYLE_ITALIC.• STYLE_PLAIN.• STYLE_UNDERLINED.

Kelompok ukuran font :• SIZE_LARGE.• SIZE_MEDIUM.• SIZE_SMALL.

Menggambar di CanvasYang terakhir pada tulisan ini akan diberikan contoh bagaimana menggambar objek seperti kotak, lingkaran dan mewarnai objek tersebut.GUIMidlet03.javaimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class GUIMidlet03 extends MIDlet implements CommandListener{ private Command cmdKeluar; private Canvas canvas; private Display display; public GUIMidlet03() { cmdKeluar = new Command("Keluar", Command.SCREEN, 0); canvas = new CanvasGUIMidlet03(); canvas.addCommand(cmdKeluar);}

public void startApp() { display = Display.getDisplay(this); display.setCurrent(canvas); canvas.setCommandListener(this);}public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void commandAction(Command c, Displayable d) { if (d == canvas) { if (c == cmdKeluar) { destroyApp(false); notifyDestroyed(); } } }}

class CanvasGUIMidlet03 extends Canvas {

Page 24: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

public void paint(Graphics g) { /* background color luar - COKLAT */ g.setColor(210, 135, 28); g.fillRect(0, 0, getWidth(), getHeight()); /* background color dalam - PUTIH */ g.setColor(255, 255, 255); g.fillRect(3, 20, getWidth()-7, getHeight()-27); /* warna border - HITAM */ g.setColor(0, 0, 0); /* border luar */ g.drawRect(0, 1, getWidth()-1, getHeight()-3); /* border dalam */ g.setStrokeStyle(g.DOTTED); g.drawRect(3, 20, getWidth()-8, getHeight()-27); g.drawRect(4, 21, getWidth()-10, getHeight()-29); /* judul */ g.setColor(255, 255, 255); g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD, Font.SIZE_LARGE)); g.drawString("e-ChocO", getWidth()/2, 1, g.TOP|g.HCENTER); /* layar dan tombol */ g.setStrokeStyle(g.SOLID); g.setColor(0, 0, 0); g.drawRoundRect(8, 25, getWidth()-40, getHeight()-37, 3, 3); g.drawRoundRect(getWidth()-28, 25, 19, getHeight()-57, 3, 3); g.drawArc(getWidth()-26, getHeight()-28, 16, 16, 0, 360); }}

Berikut adalah tampilan dari aplikasi di atas yang dijalankan pada emulator Nokia seri 60.

Page 25: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

BAB 7 Tipe Masukan pada TextFieldPada bagian sebelumnya telah banyak digunakan class TextField untuk menangani masukan dari user. Pada bagian ini akan dibahas lebih lanjut tentang class TextField terutama tentang pengaturan tipe masukkan. Dengan pengaturan ini aplikasi dapat membatasi user untuk memasukkan karakter ke dalam kolom input.

Nilai Properti Constrains pada TextFieldConstrains adalah properti yang dimiliki oleh class TextField. Nilai yang dimiliki oleh properti ini adalah :

Untuk melihat nilai dari properti di atas dapat digunakan dengan program di bawah ini :TipeTextfieldMidlet01.javaimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class TipeTextfieldMidlet01 extends MIDlet implements CommandListener {private Form form;private Command cmdKeluar;private Display display;private TextField nilaiANY;private TextField nilaiEMAIL;private TextField nilaiNUMERIC;private TextField nilaiPHONE;private TextField nilaiURL;private TextField nilaiPASSWD;private String nilaiTipe;

public TipeTextfieldMidlet01() {cmdKeluar = new Command("Keluar", Command.EXIT, 1);nilaiANY = new TextField("ANY", "", 50, TextField.ANY);nilaiTipe = String.valueOf(TextField.ANY);nilaiANY.setString(nilaiTipe);nilaiEMAIL = new TextField("EMAIL", "", 50, TextField.ANY);nilaiTipe = String.valueOf(TextField.EMAILADDR);nilaiEMAIL.setString(nilaiTipe);nilaiNUMERIC = new TextField("NUMERIC", "", 50, TextField.ANY);nilaiTipe = String.valueOf(TextField.NUMERIC);nilaiNUMERIC.setString(nilaiTipe);nilaiPHONE = new TextField("PHONE", "", 50, TextField.ANY);nilaiTipe = String.valueOf(TextField.PHONENUMBER);nilaiPHONE.setString(nilaiTipe);nilaiURL = new TextField("URL", "", 50, TextField.ANY);nilaiTipe = String.valueOf(TextField.URL);nilaiURL.setString(nilaiTipe);nilaiPASSWD = new TextField("PASSWORD", "", 50, TextField.ANY);nilaiTipe = String.valueOf(TextField.PASSWORD);nilaiPASSWD.setString(nilaiTipe);

Page 26: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

form = new Form("Tipe TextField");form.append(nilaiANY);form.append(nilaiEMAIL);form.append(nilaiNUMERIC);form.append(nilaiPHONE);form.append(nilaiURL);form.append(nilaiPASSWD);form.addCommand(cmdKeluar);form.setCommandListener(this);}

public void startApp() {display = Display.getDisplay(this);display.setCurrent(form);}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void commandAction(Command c, Displayable d) {if (c == cmdKeluar) {destroyApp(false);notifyDestroyed();}}}

Berikut adalah hasilnya :

Bisa dilihat nilai-nilai dari properti-properti yang telah dituliskan pada tabel di atas adalah benar. Dengan begitu untuk menentukan tipe masukan dari textfield dapat digantikan dengan menuliskan nilai dari properti tersebut. Yaitu seperti di bawah ini :nilaiANY = new TextField("ANY", "", 50, TextField.ANY);

Menjadi :nilaiANY = new TextField("ANY", "", 50, 0);

Contoh lain :nilaiEMAIL = new TextField("EMAIL", "", 150, TextField.EMAIL);

Menjadi :

Page 27: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

nilaiEMAIL = new TextField("EMAIL", "", 150, 1);

Penggunaan Properti ConstrainPada bahasan di atas, contoh program yang diberikan hanya untuk menampilkan nilai dari properti contrain pada TextField. Pada bagian ini akan diberikan contoh penggunaanya. :TipeTextfieldMidlet02.javaimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class TipeTextfieldMidlet02 extends MIDlet implements CommandListener {private Form form;private Command cmdKeluar;private Display display;private TextField nilaiANY;private TextField nilaiEMAIL;private TextField nilaiNUMERIC;private TextField nilaiPHONE;private TextField nilaiURL;private TextField nilaiPASSWD;private String nilaiTipe;

public TipeTextfieldMidlet02() {cmdKeluar = new Command("Keluar", Command.EXIT, 1);nilaiANY = new TextField("ANY", "", 50, TextField.ANY);nilaiEMAIL = new TextField("EMAIL", "", 50, TextField.EMAILADDR);nilaiNUMERIC = new TextField("NUMERIC", "", 50, TextField.NUMERIC);nilaiPHONE = new TextField("PHONE", "", 50, TextField.PHONENUMBER);nilaiURL = new TextField("URL", "", 50, TextField.URL);nilaiPASSWD = new TextField("PASSWORD", "", 50, TextField.PASSWORD|0);form = new Form("Tipe TextField");form.append(nilaiANY);form.append(nilaiEMAIL);form.append(nilaiNUMERIC);form.append(nilaiPHONE);form.append(nilaiURL);form.append(nilaiPASSWD);form.addCommand(cmdKeluar);form.setCommandListener(this);}

public void startApp() {display = Display.getDisplay(this);display.setCurrent(form);}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void commandAction(Command c, Displayable d) {if (c == cmdKeluar) {destroyApp(false);notifyDestroyed();}}}

Efek dari pendeklarasian tipe input ini, salah satunya adalah untuk tipe input yang menggunakan properti contrain TextField.NUMERIC dan TextField.PHONENUMBER hanya bisa diisikan dengan angka. Sedangkan untuk yang menggunakan TextField.ANY dapat diisikan apa saja. Untuk input yang digunakan untuk mengisikan password ada perbedaan dibandingkan tipe input yang lain yaitu sebagai berikut : nilaiPASSWD = new TextField("PASSWORD", "", 50, TextField.PASSWORD|0);

Page 28: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Tipe input ini digunakan properti constrain yang merupakan gabungan TextField.PASSWORD dan TextField.ANY. Artinya input ini digunakan untuk password dan password tersebut terdiri abjad, angka atau karakter lain. Penulisannya untuk menggunakan aturan ini adalah seperti contoh di atas atau sebagai berikut : TextField.PASSWORD|TextField.ANYApabila password yang diinginkan hanya berisi atas angka saja maka deklarasi yang digunakanadalah sebagai berikut :TextField.PASSWORD|TextField.NUMBER

Catatan :Properti TextField.EMAIL dan TextField.URL tidak dapat memeriksa ke-valid-an suatualamat email atau URL yang dimasukkan pada kolom input secara otomatis.

Page 29: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

BAB 8 Date FieldDateField adalah objek yang dapat digunakan untuk menampilkan atau mengedit objek yang bertipe Date.

Mode pada DateFieldUntuk membuat objek DateField dapat digunakan dengan menggunakan dua macam konstruktor, yaitu :• DateField(String label, int mode).• DateField(String label, int mode, TimeZone timeZone).

Keterangan :Label Label dari objek yang akan ditampilkan ke layar.Mode Untuk isi nilai variable mode ini digunakan properti dari objek

DateField yangbertipe integer :• DateField.DATE, nilai ini akan membuat objek hanya dapat mensetinformasi tanggal saja.• DateField.TIME, nilai ini akan membuat objek hanya dapat mensetinformasi waktu (jam, menit dan detik) saja.• DateField.DATE_TIME, adalah gabungan antara informasi tanggal danwaktu.

timeZone Menentukan zone waktu yang diinginkan.

Berikut adalah contoh sederhana penggunaan objek DateField.DatefieldMidlet01.java

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class DatefieldMidlet01 extends MIDlet implements CommandListener {private Display display;private Command cmdKeluar;private Form form;private DateField tanggal;private DateField jam;private DateField tanggal_jam;

public DatefieldMidlet01() {cmdKeluar = new Command("Keluar", Command.EXIT, 1);tanggal = new DateField("Tanggal", DateField.DATE);jam = new DateField("Jam", DateField.TIME);tanggal_jam = new DateField("Tanggal-Jam", DateField.DATE_TIME);form = new Form("Date Field");form.append(tanggal);form.append(jam);form.append(tanggal_jam);form.addCommand(cmdKeluar);form.setCommandListener(this);}

public void startApp() {display = Display.getDisplay(this);display.setCurrent(form);}

Page 30: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void commandAction(Command c, Displayable d) {if (c == cmdKeluar) {destroyApp(false);notifyDestroyed();}}}

Dari gambar di atas dapat diketahui terdapat perbedaan tampilan dari keluaran aplikasi pada masing-masing emulator. Untuk emulator Nokia dan Siemens, untuk menset tanggal atau waktu cukup denganmengetikan angka yang diinginkan pada keypad. Sedangkan untuk emulator J2ME WTK untuk men-set waktu atau tanggal hal yang dilakukan adalah dengan menekan tombol SELECT. Untuk objek yang menggunakan mode DateField.DATE maka setelah menekan tombol SELECT maka akan ditampilkan seperti pada gambar berikut :

Setelah menemui tampilan berikut ini user tinggal memilih tahun, bulan dan tanggal dengan menggunakan panah ke atas, bawa, kiri atau kanan. Untuk objek yang menggunakan mode DateField.TIME maka akan menemui tampilan seperti berikut :

Page 31: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Setting Nilai DateFieldPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia Seri 60). Pada bagian ini isi dari masing-masing objek tersebut akan diisi dengan tanggal dan waktu sekarang (current time). Berikut adalah contoh kode untuk tujuan di atas :DatefieldMidlet02.java

import java.util.*;import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class DatefieldMidlet02 extends MIDlet implements CommandListener {private Display display;private Command cmdKeluar;private Form form;private DateField tanggal;private DateField jam;private DateField tanggal_jam;

public DatefieldMidlet02() {cmdKeluar = new Command("Keluar", Command.EXIT, 1);tanggal = new DateField("Tanggal", DateField.DATE);jam = new DateField("Jam", DateField.TIME);tanggal_jam = new DateField("Tanggal Jam", DateField.DATE_TIME);form = new Form("Date Field");tanggal.setDate(new Date());jam.setDate(new Date());tanggal_jam.setDate(new Date());form.append(tanggal);form.append(jam);form.append(tanggal_jam);form.addCommand(cmdKeluar);form.setCommandListener(this);}

public void startApp() {display = Display.getDisplay(this);display.setCurrent(form);}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void commandAction(Command c, Displayable d) {if (c == cmdKeluar) {destroyApp(false);notifyDestroyed();}}}

Untuk mengambil nilai tanggal dan waktu sekarang digunakan baris berikut :tanggal.setDate(new Date());jam.setDate(new Date());tanggal_jam.setDate(new Date());

Page 32: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Dari percobaan penulis dengan tiga macam emulator, maka kode di atas hanya berjalan normal (memberikan hasil tanggal dan waktu yang benar) pada emulator Siemens.

Berikut adalah tampilan dari aplikasi di atas pada tiga macam emulator :

Page 33: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

BAB 9 Java ME : Kalkulator Berbasis Java MIDP Untuk HandphoneDalam latihan ini, kita akan membuat aplikasi kalkulator sederhana untuk digunakan pada perangkat mobile seperti handphone. Dalam pengembangan untuk perangkat mobile, kita akan menggunakan API yang ditawarkan oleh Mobile Information Device Profile (MIDP).Latihan ini terdiri dari tiga bagian: 1. Membuat Proyek NetBeans MIDP, 2. Merancang antarmuka kalkulator, dan 3. Memberi listing untuk fungsi dari Kalkulator, dengan berbagai operasi aritmatika.

Langkah Praktikum Pembuatan Kalkulator berbasis MIDP.1. Klik Menu File Kemudian New Project.2. Pilih kategori Mobility, lalu pilih MIDP Applications. Klik Next.

3. Isi nama Project Kalkulator, dan untuk lokasi penyimpanan, simpan difolder anda masing-masing. Klik Next.

Page 34: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

4. Kemudian, pilih CLDC 1.1 dan MIDP 2.0.

5. Klik Finish dan project baru otomatis dibuat. Project ini akan berisi paket standar bernama hello. Dan file Sumber HelloMiDlet.java.

Design antar muka kalkulator

6. Pilih file HelloMIDlet.java, pilih tab Screen, sehingga muncul tampilan seperti gambar. Kemudian kita ubah file MIDlet menjadi sebua kalkulator.

Page 35: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Pertama, hapus teks Hello, World dengan cara klik kanan kemudian Delete.Mengubah judul dalam bentuk sebagai berikut: klik kanan pada tulisan Welcome, pilih Properties, dan ubah titlenya menjadi Kalkulator. Klik Ok.Klik kanan pada form yang ditampilkan pada layar perangkat lalu pilih New / Add -> Text FieldPada Text Field, klik-kanan dan pilih Properties, ubah labelnya dan ketikan pada Label Ekspresi dan Instance Name sama ketikan Ekspresi.Masih pada form tambah spacer dengan cara Klik kanan -> New / Add -> Spacer.Kemudian tambahkan kembali pada form Text Field, dengan cara Klik kanan pilih New / Add -> Text Field, kemudian klik kanan pada text field dan pilih properties lalu ketikan pada Label Hasil dan Instance Name sama ketikan Hasil.Kemudian klik kanan pada form pilih New/Add -> Ok Command.

7. Tampilan hasil desain adalah seperti berikut:

Page 36: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

Listing Kode Program

Kalkulator yang kita buat sederhana dengan ekspresi dalam bentuk: integer integer operator. Adapun Operator yang digunakan adalah + - * dan /.

Klik pada tab source dan klik tanda plus pada bagian Generated Method :commandAction for Displayables. Lihat listing, kemudian anda tambahkan listing kode yang diberi huruf tebal dibawah ini dan sesuaikan posisi penempatannya

public void commandAction(Command command, Displayable displayable) { // write pre-action user code here if (displayable == form) { if (command == exitCommand) {

// write pre-action user code hereexitMIDlet();// write post-action user code here

} else if (command == okCommand) {// write pre-action user code hereString input;char operator;int operand1, operand2, start, end, res;//pengambilan ekspresi yang dimasukaninput = Ekspresi.getString();try{//memecah operand ke 2end = input.indexOf(' ',0);operand1 = Integer.parseInt(input.substring(0, end));//memecah operatorstart = end + 1;operator = input.charAt(start);//memecah operand ke 2

Page 37: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28

start = start + 2;operand2 = Integer.parseInt(input.substring(start));

//proses aritmatikaswitch (operator){case '+':res = operand1 + operand2;break;case '-':res = operand1 - operand2;break;case '*':res = operand1 * operand2;break;case '/':res = operand1 / operand2;break;default:throw new Exception("Salah ekspresi.");}//Menampilkan Hasil perhitungan dilayarHasil.setString(Integer.toString(res));}catch(Exception ex){Hasil.setString("Hasil Error ");}// write post-action user code here}}// write post-action user code here

}

Silahkan jalankan/Runing dengan menekan tombol F6, setelah berhasil, silahkan coba kopi file jar kedalam handphone anda yang mendukung java MIDP 2.0, melalui Bluetooth atau kabel data.

Page 38: WordPress.com · Web viewPada bagian sebelumnya begitu aplikasi dijalankan nilai dari masing-masing objek DateField masih kosong atau diisi dengan nilai inisial (pada emulator Nokia

MOBILE PROGRAMMING 28