Mobile Application

Published on May 2016 | Categories: Documents | Downloads: 52 | Comments: 0 | Views: 708
of 247
Download PDF   Embed   Report

Comments

Content

MOBILE APPLICATION

POLITEKNIK TELKOM BANDUNG 2009

Politeknik Telkom

Mobile Application

Tim Penulis: Budi Laksono Putro Dedy Rahman Wijaya

Dilarang menerbitkan kembali, menyebarluaskan, atau menyimpan baik sebagian maupun seluruh isi buku dalam bentuk dan dengan cara apapun tanpa izin tertulis dari Politeknik Telkom Hak cipta dilindungi undang-undang @ Politeknik Telkom 2009 No part of this document may be copied, reproduced, printed, distributed, modified, removed and amended in any form by any means without prior written authorization of Telkom Polytechnic. Copyright @ 2009 Telkom Polytechnic. All rights reserved
ii

Politeknik Telkom

Mobile Application

KATA PENGANTAR
Assalamu’alaikum Wr. Wb Segala puji bagi Allah SWT karena dengan karunia-Nya courseware ini dapat diselesaikan. Atas nama Politeknik Telkom, kami sangat menghargai dan ingin menyampaikan terima kasih kepada penulis, penerjemah dan penyunting yang telah memberikan tenaga, pikiran, dan waktu sehingga courseware ini dapat tersusun. Tak ada gading yang tak retak, di dunia ini tidak ada yang sempurna, oleh karena itu kami harapkan para pengguna buku ini dapat memberikan masukan perbaikan demi pengembangan selanjutnya. Semoga courseware ini dapat memberikan manfaat dan membantu seluruh Sivitas Akademika Politeknik Telkom dalam memahami dan mengikuti materi perkuliahan di Politeknik Telkom. Amin. Wassalamu’alaikum Wr. Wb. Bandung, Oktober 2009

Christanto Triwibisono Wakil Direktur I

iii

Politeknik Telkom

Mobile Application

DAFTAR ISI

KATA PENGANTAR ...................................................... iii DAFTAR ISI .............................................................................. iv 1 INTRODUCTION J2ME.......................................... 1 1.1 Keluarga JAVA .................................................................. 2 1.2 Gambaran J2ME ................................................................ 7 1.3 Configuration ................................................................... 8 1.4 Profile ............................................................................... 8 1.5 Perangkat Mobile .............................................................. 9 1.6 Sistem Operasi untuk Alat Mobile ................................. 11 2 J2ME, J2EE DAN J2SE............................................ 21 2.1 J2ME, J2SE dan J2EE ........................................................ 22 2.2 Java 2 Micro Edition ....................................................... 23 2.3 J2ME Configuration ........................................................ 24 2.3.1 CLDC ............................................................................. 25 2.3.2 CDC 27 2.4 Java Technology for the Wireless Industry (JTWI) ...... 27 2.5 Generic Connection Framework ................................... 28 2.6 J2ME Profile .................................................................... 29 2.7 Java Community Process (JCP) ...................................... 30 2.8 MIDP............................................................................... 31 2.9 MIDlet............................................................................. 32 2.10 Siklus MIDlet .................................................................. 33 3 CLCD ....................................................................... 41 3.1 CLDC ............................................................................. 42 3.1.1 Karakteristik perangkat CLDC ...................................... 43 3.1.2 Fitur yang hilang.............................................................. 44 3.1.3 CLDC market................................................................. 45 3.1.4 Java TM Language Spesification (JLS) .............................. 46 3.1.5 Preverification dan Application Representation ............ 46 3.2 CLDC Libraries .............................................................. 47
iv

Politeknik Telkom

Mobile Application

3.2.1 3.2.2 3.3 3.4 3.5 4 4.1 4.2 4.2.1 4.2.2 4.2.3 4.2.4 4.3 4.3.1 4.3.2 4.3.3 5 5.1 5.2 5.3 5.4 5.5 5.6 6 6.1 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7

CLDC Libraries pewarisan dari J2SE ............................. 47 CLDC Libraries J2ME ..................................................... 51 CLDC System Properties............................................... 54 CLDC Networking......................................................... 54 Verifikasi Class oleh KVM .............................................. 55 MIDP ........................................................................ 62 Mobile Information Device Profile (MIDP) .................... 63 J2ME Security.................................................................. 65 Protection Domains ....................................................... 65 Permissions..................................................................... 65 Mode Interaksi User....................................................... 66 Anatomi dari Aplikasi MIDP ........................................... 69 MIDlet............................................................................. 70 Arsitektur Aplikasi MIDlet ............................................. 71 Siklus MIDlet .................................................................. 73 MIDlet suites .................................................................. 75 Integrated Programming Environment .................... 82 Pengenalan ...................................................................... 83 "Hello, world!" MIDlet ................................................... 83 Compilation dan Packaging MIDlets............................... 87 Menggunakan Sun Wireless Toolkit ............................... 89 Menggunakan NetBeans Mobility Pack .......................... 92 Bekerja dengan Form ................................................... 103 High Level User Interface I .................................... 112 MIDP User Interface .................................................... 113 Display .......................................................................... 114 Displayable.................................................................... 114 Title 115 Command ..................................................................... 116 CommandListener ........................................................ 119 Ticker ........................................................................... 120 Screen ........................................................................... 120 Item 121
v

Politeknik Telkom

Mobile Application

6.3 6.4 6.5 6.6 6.7 6.8 7 7.1 7.2 7.3 7.4 7.5 8 8.1 8.2 8.2.1 8.2.2 8.2.3 8.3 8.3.1 8.3.2 8.3.3 8.3.4 8.3.5 8.3.6 8.3.7 9 9.1 9.2 9.3 9.4 9.5
vi

Text Box....................................................................... 122 Form ............................................................................. 124 Date Field ..................................................................... 125 Image Item .................................................................... 126 Text Field ..................................................................... 128 Gauge............................................................................ 130 High Level User Interface II ................................... 138 ChoiceGroup ............................................................... 139 List ................................................................................ 140 Alert ............................................................................. 142 String Item .................................................................... 144 Jenis Fungsi-Fungsi API pada MIDP untuk GUI ............ 145 Low Level User Interface I ..................................... 151 Pengenalan .................................................................... 152 Canvas .......................................................................... 152 Sistem Koordinat.......................................................... 153 ”Hello,World!” ............................................................. 154 Perintah ........................................................................ 156 Grafik ............................................................................ 157 Warna........................................................................... 157 Huruf ............................................................................ 159 Style Coretan ............................................................... 160 Menggambar garis ......................................................... 160 Menggambar kotak ....................................................... 162 Menggambar Sudut ....................................................... 164 Melukis gambar............................................................. 166 Low Level User Interface II .................................... 173 Event key ...................................................................... 174 Aksi Permainan ............................................................. 174 Event Pointer ................................................................ 175 Clipping ......................................................................... 176 Anchor Points .............................................................. 176

Politeknik Telkom

Mobile Application

9.6 Menggambar Teks ........................................................ 177 9.7 Game API ..................................................................... 179 9.7.1 Game API ..................................................................... 179 9.7.2 Layers ........................................................................... 182 9.7.3 Sprites ........................................................................... 183 9.7.4 LayerManager ............................................................... 186 9.8 Scalable 2D Graphics ................................................... 186 10 Networking (Socket/TCP) ...................................... 192 10.1 Generic Connection Framework ................................. 193 10.1.1 Hirarki dari GCF Interface .................................. 193 10.1.2 GCF Connection URL ......................................... 194 10.2 TCP Sockets ................................................................. 195 10.3 Server Sockets.............................................................. 196 10.4 Datagrams .................................................................... 197 11 Networking (HTTP) ............................................... 206 11.1 Koneksi HTTP .............................................................. 207 11.1.1 Protokol HTTP.................................................... 207 11.1.2 Menciptakan sebuah koneksi HTTP .................... 208 11.1.3 Handling HTTP Redirects ................................... 209 11.2 Koneksi HTTPS ............................................................ 210 11.3 Servlet........................................................................... 213 11.4 HTTP Servlet ................................................................ 213 12 Persistent Storage .................................................. 221 12.1 Record Store ................................................................ 222 12.2 Record Enumeration .................................................... 229 12.3 Record Comparator..................................................... 230 12.4 Record Filter ................................................................ 231 12.5 Record Listener ............................................................ 232 Daftar Pustaka ................................................... 239

vii

Politeknik Telkom

Mobile Application

1 INTRODUCTION J2ME

Overview

Java merupakan bahasa pemrograman “general purpose”, Java bisa digunakan untuk pembuatan aplikasi web, database, grafis dan berbagai aplikasi lainnya seperti bahasa pemrograman lainnya. Mengapa Java menjadi andalan bagi para programmer ? Selain dukungan API yang begitu lengkap, hasil program Java akan bisa dijalankan di semua platform selama disitu terdapat JVM (Java Virtual Machine). Kalau seorang programmer memilih Java sebagai bahasa untuk pengembangan aplikasinya, maka dia tidak perlu pusing memikirkan apakah sistem operasi usernya mendukung atau tidak sehingga Java mempunyai slogan “write once, run every where”.

Tujuan

Pada akhir bab ini, siswa diharapkan dapat menguasai : 1. Mengidentifikasi karakteristik dari perangkat mobile 2. Menjelaskan arsitektur J2ME 3. Mengetahui peran atau aturan configuration dan profile.

Intro J2ME

1

Politeknik Telkom

Mobile Application

1.1

Keluarga JAVA
Sun Microsystem sebagai pengembang bahasa Java telah mengembangkan beberapa versi Java, seperti: J2EE (Java 2 Enterprise Edition), J2SE (Java 2 Standar Edition), J2ME (Java 2 Micro Edition), Java Card. J2EE dan J2SE dikembangkan untuk platform Server dan PC, J2ME dikembangkan untuk platform mobile device sedangkan Java Card untuk platform simcard. Pada dasarnya versi-versi tersebut sama, hanya penggunaan API yang berbeda sesuai dengan target platform yang akan digunakan dan kompatibilitas platform tersebut.

Gambar 1.1 Java Platform

2

Intro J2ME

Politeknik Telkom

Mobile Application

Gambar 1.2 Berbagai versi Java dilihat dari target platformnya  Java 2 Pada perkembangan selanjutnya, Sun Microsystem memperkenalkan Java versi 1.2 atau lebih dikenal dengan nama Java 2 yang terdiri atas JDK dan JRE versi 1.2. Aplikasiaplikasi java yang kompatibel dengan Java 2 ini dikenal dengan Java 2 Compliant. Pada Java 2 ini, java dibagi menjadi 3 kategori:  Java 2 Standart Edition (J2SE) Kategori ini digunakan untuk menjalankan dan mengembangkan aplikasi-aplikasi Java pada level PC (Personal Computer)  Java 2 Enterprise Edition (J2EE) Kategori ini digunakan untuk menjalankan dan mengembangkan aplikasi-aplikasi Java pada lingkungan entriprise dengan menambahkan fungsionalitasfungsionalitas Java semacam EJB (Enterprise Java Bean), Java CORBA, Servlet dan JSP serta Java XML (Extensible Markup Language)  Java 2 Micro Edition (J2ME) Kategori ini digunakan untuk menjalankan dan mengembangkan aplikasi-aplikasi Java pada handled devices atau perangkatperangkat semacam handphone, Palm, PDA, dan Pocket PC.
Intro J2ME 3

Politeknik Telkom

Mobile Application



Java 2 Micro Edition J2ME dirancang untuk dapat menjalankan program Java pada perangkat-perangkat semacam handphone dan PDA, yang memiliki karakteristik yang berbeda dengan sebuah komputer biasa, misalnya kecilnya jumlah memori pada handphone dan PDA. J2ME terdiri atas komponen-komponen sebagai berikut :  Java Virtual Machine (JVM) Komponen ini untuk menjalankan program program Java pada emulator atau handled devices.  Java API (Application Programming Interface) Komponen ini merupakan kumpulan librari untuk menjalankan dan mengembangkan program Java pada handled devices.  Tools lain untuk pengembangan aplikasi Java semacam emulator Java Phone, emulator Motorolla. Java Application Programming Interface (Java API)



Gambar 1.3 Java API
4 Intro J2ME

Politeknik Telkom

Mobile Application

Java API merupakan komponen-komponen dan kelas Java yang sudah jadi, yang memiliki berbagai kemampuan. Kemampuan untuk menangani objek, string, angka dan sebagainya  Applet Java Applet merupakan program Java yang berjalan di atas browser. Penggunaan applet ini akan membuat halaman HTML lebih dinamis dan menarik.  Java Networking Sekumpulan API (Application Programming Interface) yang menyediakan fungsi – fungsi untuk aplikasi – aplikasi jaringan, seperti penyediaan akses untuk TCP, UDP, IP Adrress dan URL. Tetapi Java Networking tidak menyediakan akses untuk ICMP dikarenakan alasan sekuriti dan pada kondidi umum hanya administrator ( root ) yang bisa memanfaatkan protokol ICMP.  Java Database Connectivity (JDBC) JDBC API terdiri atas class dan interface yang ditulis dalam bahasa Java untuk sebagai alat bantu bagi pembuat program (developer) dan menyediakan sekumpulan API untuk mengatur keamanan mengakses database seperti Oracle, MySQL, PostgreSQL, Microsoft SQL Server. Jadi keunggulan API JDBC dapat mengakses sumber data dan berjalan pada semua Platform yang mempunyai Java Viortual Machine (JVM).  Java Security Java Security menyediakan sekumpulan API untuk mengatur security dari aplikasi Java baik secara high level atau low level, seperti public/private key management dan certificates.  Java Swing Java Swing menyediakan sekumpulan API untuk membangun aplikasi – aplikasi GUI (Graphical User Interface) dan model GUI yang diinginkan bisa bermacam – macam, bisa model Java, model Motif/CDE atau model yang dependent terhadap platform yang digunakan.

Intro J2ME

5

Politeknik Telkom

Mobile Application

 Java RMI Java RMI menyediakan sekumpulan API untuk membangun aplikasi – aplikasi Java yang mirip dengan model RPC (Remote 4 Procedure Call) jadi object - object Java bisa di call secara remote pada jaringan komputer.  Java 2D/3D Java 2D/3D menyediakan sekumpulan API untuk membangun grafik – grafik 2D/3D yang menarik dan juga akses ke printer.  Java Server Pages (JSP) JSP adalah suatu teknologi web berbasis bahasa pemrograman Java dan berjalan pada platform Java. JSP merupakan pengembangan dari Servlet serta merupakan bagian dari teknologi Java 2 Platform, Enterprise Edition (J2EE).  JNI (Java Native Interface) JNI menyediakan sekumpulan API yang digunakan untuk mengakses fungsi – fungsi pada library (*.dll atau *.so) yang dibuat dengan bahasa pemrograman yang lain seperti C,C++, dan Basic.  Java Sound Java Sound menyediakan sekumpulan API untuk manipulasi sound. k. Java IDL + CORBA Java IDL (Interface Definition Language) menyediakan dukungan Java untuk implementasi CORBA (Common Object Request Broker) yang merupakan model distributed-Object untuk solusi aplikasi besar di dunia networking.  Java Card Java Card utamanya digunakan untuk aplikasi – aplikasi pada smart card, yang sederhana wujudnya seperti SIM Card pada handphone.  JTAPI (Java Telephony API) Java Telepony API menyediakan sekumpulan API untuk memanfaatkan devices – devices telepony, sehingga akan cocok untuk aplikasi – aplikasi CTI (Computer Telephony Integration)
6 Intro J2ME

Politeknik Telkom

Mobile Application

yang dibutuhkan seperti ACD (Automatic Call Distribution), PCPBX dan lainnya.

1.2

Gambaran J2ME
J2ME adalah satu set spesifikasi dan teknologi yang fokus kepada perangkat konsumen. Perangkat ini memiliki jumlah memori yang terbatas, menghabiskan sedikit daya dari baterei, layar yang kecil dan bandwith jaringan yang rendah. Dengan perkembangbiakan perangkat mobile konsumer dari telepon, PDA, kotak permainan ke peralatan-peralatan rumah, Java menyediakan suatu lingkungan yang portable untuk mengembangkan dan menjalankan aplikasi pada perangkat ini. Program J2ME, seperti semua program JAVA adalah diterjemahkan oleh VM. Program-program tersebut dikompile ke dalam bytecode dan diterjemahkan denga Java Virtual Machine(JVM). Ini berarti bahwa program-program tersebut tidak berhubungan langsung dengan perangkat. J2ME menyediakan suatu interface yang sesuai dengan perangkat. Aplikasi-aplikasi tersebut tidak harus dikompile ulang supaya mampu dijalankan pada mesin yang berbeda. Inti dari J2ME terletak pada configuration dan profile-profile. Suatu configuration menggambarkan lingkungan runtime dasar dari suatu sistem J2ME. Ia menggambarkan core library, virtual machine, fitur keamanan dan jaringan.

Gambar 1.3 Arsitektur J2ME
Intro J2ME 7

Politeknik Telkom

Mobile Application

Sebuah profile memberikan library tambahan untuk suatu kelas tertentu pada sebuah perangkat. Profile-profile menyediakan user interface(UI) API,persistence, messaging library, dan sebagainya. Satu set library tambahan atau package tambahan menyediakan kemampuan program tambahan. Pemasukan package ini ke dalam perangkat J2ME dapat berubah-ubah karena tergantung pada kemampuan sebuah perangkat. Sebagai contoh, beberapa perangkat MIDP tidak memiliki Bluetooth built-in, sehingga Bluetooth API tidak disediakan dalam perangkat ini.

1.3

Configuration
Suatu configuration menggambarkan fitur minimal dari lingkungan lengkap Java runtime. Untuk menjamin kemampuan portabilitas dan interoperabilitas optimal diantara berbagai macam perangkat yang dibatasi sumber dayanya(memory, prosesor, koneksi yang dibatasi), configuration tidak menggambarkan fitur tambahan. Suatu configuration J2ME menggambarkan suatu komplemen yang minimum dari teknologi JAVA. Adalah merupakan tugas profile-profile untuk menggambarkan tambahan library untuk suatu kategori perangkat tertentu. configuration menggambarkan:  Subset bahasa pemrograman JAVA  Kemampuan Java Virtual Machine(JVM)  Core platform libraries  Fitur sekuriti dan jaringan

1.4

Profile
Suatu profile menggambarkan set-set tambahan dari API dan fitur untuk pasar tertentu, kategori perangkat atau industri. Sementara configuration menggambarkan library dasar, profile-profile menggambarkan library yang penting untuk membuat aplikasi-aplikasi efektif. Library ini memasukkan user interface, jaringan dan penyimpanan API.

8

Intro J2ME

Politeknik Telkom

Mobile Application

1.5

Perangkat Mobile
Perangkat mobile memiliki banyak jenis dalam hal ukuran, desain dan layout, tetapi mereka memiliki kesamaan karakteristik yang sangat berbeda dari sistem desktop. Adapun karakteristik dari perangkat mobile adalah sebagai berikut : a. Ukuran yang kecil Perangkat mobile memiliki ukuran yang kecil. Konsumen menginginkan perangkat yang terkecil untuk kenyamanan dan mobilitas mereka. Memory yang terbatas Perangkat mobile juga memiliki memory yang kecil, yaitu primary (RAM) dan secondary (disk). Pembatasan ini adalah salah satu faktor yang mempengaruhi penulisan program untuk berbagai jenis dari perangkat ini. Dengan pembatasan jumlah dari memory, pertimbangan-pertimbangan khusus harus diambil untuk memelihara pemakaian dari sumber daya yang mahal ini. Daya proses yang terbatas Sistem mobile tidaklah setangguh rekan mereka yaitu desktop. Ukuran, teknologi dan biaya adalah beberapa faktor yang mempengaruhi status dari sumber daya ini. Seperti harddisk dan RAM, Anda dapat menemukan mereka dalam ukuran yang pas dengan sebuah kemasan kecil. Mengkonsumsi daya yang rendah Perangkat mobile menghabiskan sedikit daya dibandingkan dengan mesin desktop. Perangkat ini harus menghemat daya karena mereka berjalan pada keadaan dimana daya yang disediakan dibatasi oleh baterai-baterai. Kuat dan dapat diandalkan Karena perangkat mobile selalu dibawa kemana saja, mereka harus cukup kuat untuk menghadapi benturan-benturan, gerakan, dan sesekali tetesan-tetesan air.

b.

c.

d.

e.

Intro J2ME

9

Politeknik Telkom

Mobile Application

f.

Konektivitas yang terbatas Perangkat mobile memiliki bandwith rendah, beberapa dari mereka bahkan tidak tersambung. Kebanyakan dari mereka menggunakan koneksi wireless. Masa hidup yang pendek Perangkat-perangkat konsumen ini menyala dalam hitungan detik kebanyakan dari mereka selalu menyala. Coba ambil kasus sebuah handphone, mereka booting dalam hitungan detik dan kebanyakan orang tidak mematikan handphone mereka bahkan ketika malam hari. PDA akan menyala jika anda menekan tombol power mereka.

g.

Gambar 1.3 : Peralatan Mobile.

Pada gambar 1.3 peralatan mobile meliputi :  pagers  cellular telephones  personal digital assistants atau organizers  point of sale systems  pocket communicators  Internet screen telephones  automobile navigation dan entertainment systems  Internet television sets
10 Intro J2ME

Politeknik Telkom

Mobile Application

1.6

Sistem Operasi untuk Alat Mobile
Terdapat tiga nama OS untuk mobile devices yang popular yaitu Palm dengan PalmOS-nya, Symbian dengan EPOC-nya, dan Microsoft dengan Pocket PC/ Windows CE-nya. Dalam hubungan OS mobile device dengan teknologi J2ME (yang selama ini menjadi perhatian) adalah tampak pada gambar 1.4 dibawah ini:

Gambar 1.4 Layer Configuration dan Profile dengan OS pada teknologi J2ME Meskipun demikian gerakan open source telah pula merambah dunia OS mobile devices yaitu dengan hadirnya PDA (personal digital assistant) dengan brand Sharp Zaurus yang menggunakan OS berbasiskan Linux dan Java dengan berbagai keuntungan khas dunia open source yaitu dikenal diseluruh dunia dan free community development. Saya duga kedepan akan cerah prospeknya.
Tabel 1. Berbagai vendor mobile device dengan variasi OS-nya. Symbian (EPOC) Sony Ericsson Motorola Nokia Psion Matsushita Philips Sony Sanyo Palm (PalmOS) Palm IBM Sony Dell Handspring Symbol Qualcomm TRG Microsoft (Pocket PC) Compaq HP Casio Symbol Siemens/ Fujitsu Toshiba

Intro J2ME

11

Politeknik Telkom

Mobile Application



Symbian (EPOC) Symbian didirikan pada tahun 1998 oleh Psion, Motorola, Nokia, dan Ericsson dan Matsushita bergabung pada tahun berikutnya. Pasar yang dikuasai oleh OS ini adalah dominan yaitu sekitar 60% (http://www.symbian.com). Pada bulan Agustus 2000, Sony dan Sanyo bergabung pula sebagai kelompok vendor pengguna EPOC. Mobile devices yang saat ini menggunakan EPOC diantaranya adalah Psion hand-held PC, Sony Ericsson P800, Nokia 7650, dan Nokia 9210 Communicator. OS EPOC dibagi dalam tiga versi yaitu : Smartphones (voice centric with data functionality), Communicator (e.g. : Nokia Communicator), dan PDA. EPOC telah dilengkapi dengan banyak fungsi-fungsi dasar yang sepatutnya dimiliki oleh sebuah OS mobile devices yaitu PIM (Personal Information Manager), integrated email, web browser, dan kemampuan untuk synchronization. EPOC terus meningkatkan kemampuannya dengan dilengkapi WAP browser, Bluetooth support, peningkatan kapabilitas security, email, dan messaging. Dan kini Symbian menikmati masa “bulan madu”-nya bermitra dengan perusahaan terkemuka dunia NTT DoCoMo (10 Juli 2003 yang lalu, Symbian mengumumkan bahwa Fujitsu, salah satu vendor mobile device jaringan 3G, meluncurkan mobile videophone F2102V untuk layanan NTT DoCoMo FOMA yang berbasiskan Symbian OS), Sun, Oracle, dan Sybase. Symbian mengklaim bahwa ada sekitar 31.000 software developer yang menggunakan EPOC sebagai basis pengembangan aplikasinya. Saat tulisan ini dibuat, versi terbaru dari Symbian adalah Symbian OS v7.0s yang menyediakan berbagai layanan yang sangat sesuai dengan berbagai functionality platform 3G market. Fitur utama dari versi ini adalah : – Lightweight multi-threaded multimedia framework. – Support for W-CDMA. – Java MIDP 2.0 enabled. – Support for multiple primary/ secondly PDP contents. – Support bi-directional text (Thai, Arabic, and Hebrew)

12

Intro J2ME

Politeknik Telkom

Mobile Application



Palm (PalmOS) Produksi pertama dari Palm dijual tahun 1996. Setelah itu PalmOS menjadi OS open licensed yang dibuat oleh berbagai manufaktur mobile devices. IBM dan Dell juga menjual original PalmPilot devices. Selain dari itu Handspring juga menjadi perusahaan terbesar yang menyediakan mobile devices berbasiskan PalmOS. Sebagaimana Symbian, PalmOS juga menyediakan basic feature yaitu PIM, email, dan messaging. Salah satu keuntungan dari Palm adalah bahwa hardware manufacture dapat menambahkan beberapa tool untuk digabungkan dengan hardware yang berbasis PalmOS tadi, misalnya dengan menambahkan CompactFlash, Springboard, dan Palm clip-on. Untuk produk masa depan, PalmOS dikonsentrasikan pada wireless connectivity, bluetooth support, dan multi-language support. PalmOS pula berkerjasama dengan beberapa berusahaan software terkemuka seperti Computer Associates, IBM, Oracle, Peoplesoft, SAP, AOL, Sun, Siebel, dan Tivoli. Palm mengklaim ada 50.000 software developer yang bekerja dengan platform ini.



Microsoft (Pocket PC) Hand-held PC yang pertama berbasiskan Windows pertama kali tersedia pada tahun 1997. Pada mulanya versi awal dari OS mobile device ini sangatlah terbatas performansi dan fungsionalitasnya sehingga berakibat pada angka penjualannya yang mengecewakan. Namun kini Pocket PC menjelma menjadi salah satu OS mobile device yang paling banyak menyediakan software pendukungnya dan “mengawaki” PDA terkemuka saat ini dari Compaq yaitu iPAQ. Menurut David Coursey, Executive Editor Anchor Desk, bahwa handheld yang berbasiskan Pocket PC secara umum memerlukan beaya dua kali lebih besar daripada PalmOS devices tetapi sebaliknya Pocket PC menyediakan software pendukung lebih banyak daripada PalmOS. Anda dapat mendengarkan musik atau mendownload buku dari

Intro J2ME

13

Politeknik Telkom

Mobile Application

www.audible.com, memiliki software GPS navigation dari TrayRoute, atau topographic maps dari Map Tech. Jika Anda bingung berjalan-jalan di Amerika bisa pula menggunakan Microsoft Pocket Streets atau Topo! Software dari National Geographic. Pendek kata dan sudah jelas ☺ software-software Microsoft dapat berjalan dengan baik di Pocket PC seperti Microsoft Money, Word, Excel (tentu saja untuk versi Pocket PC-nya).

14

Intro J2ME

Politeknik Telkom

Mobile Application

Rangkuman

1. 2.

3.

4.

5.

6.

Java merupakan bahasa pemrograman “general purpose”, Java bisa digunakan untuk pembuatan aplikasi web, database, grafis dan berbagai aplikasi lainnya seperti bahasa pemrograman lainnya. Dengan semboyan “write once run everywhere”, teknologi Java dengan portabilitas yang tinggi, memungkinkan untuk jalan di segala sistem operasi selama disitu ada JVM (Java Virtual Machine) termasuk perangkat wireless dengan ukuran memori yang relatif kecil. Sun Microsystem sebagai pengembang bahasa Java telah mengembangkan beberapa versi Java, seperti: J2EE (Java 2 Enterprise Edition), J2SE (Java 2 Standar Edition), J2ME (Java 2 Micro Edition), Java Card. J2ME dirancang untuk dapat menjalankan program Java pada perangkat-perangkat semacam handphone dan PDA, yang memiliki karakteristik yang berbeda dengan sebuah komputer biasa, misalnya kecilnya jumlah memori pada handphone dan PDA. Perangkat mobile memiliki banyak jenis dalam hal ukuran, desain dan layout, tetapi mereka memiliki kesamaan karakteristik yang sangat berbeda dari sistem desktop. Adapun karakteristik dari perangkat mobile adalah sebagai berikut :  Ukuran yang kecil  Memory yang terbatas  Daya proses yang terbatas  Mengkonsumsi daya yang rendah  Kuat dan dapat diandalkan  Konektivitas yang terbatas  Masa hidup yang pendek Terdapat tiga nama OS untuk mobile devices yang popular yaitu Palm dengan PalmOS-nya, Symbian dengan EPOC-nya, dan Microsoft dengan Pocket PC/ Windows CE-nya.

Intro J2ME

15

Politeknik Telkom

Mobile Application

Kuis Benar Salah

1.

2.

3.

4.

5.

6.

7.

8.

Sun Microsystem sebagai pengembang bahasa Java telah mengembangkan beberapa versi Java, seperti: J2EE (Java 2 Enterprise Edition), J2SE (Java 2 Standar Edition), J2ME (Java 2 Micro Edition), Java Card. J2EE dan J2SE dikembangkan untuk platform Server dan PC, J2ME dikembangkan untuk platform mobile device sedangkan Java Card untuk platform simcard. Pada dasarnya versi-versi tersebut sama untuk penggunaan API sesuai dengan target platform yang akan digunakan dan kompatibilitas platform tersebut. J2ME dirancang untuk dapat menjalankan program Java pada perangkat-perangkat semacam handphone dan PDA, yang memiliki karakteristik yang berbeda dengan sebuah komputer biasa, misalnya kecilnya jumlah memori pada handphone dan PDA. J2ME terdiri atas komponen-komponen terdiri dari Java Virtual Machine (JVM), Java API (Application Programming Interface), dan Tools lain untuk pengembangan aplikasi Java semacam emulator Java Phone, emulator Motorolla. J2ME adalah satu set spesifikasi dan teknologi yang fokus kepada perangkat konsumen. Perangkat ini memiliki jumlah memori yang terbatas, menghabiskan sedikit daya dari baterei, layar yang kecil dan bandwith jaringan yang rendah. J2ME menyediakan suatu interface yang sesuai dengan perangkat. Aplikasi-aplikasi tersebut tidak harus dikompile ulang supaya mampu dijalankan pada mesin yang berbeda. Inti dari J2ME terletak pada configuration dan profile-profile. Suatu configuration menggambarkan lingkungan runtime dasar dari suatu sistem J2ME. Ia menggambarkan core library, virtual machine, fitur keamanan dan jaringan.
Intro J2ME

16

Politeknik Telkom

Mobile Application

9.

Sebuah profile memberikan library tambahan untuk suatu kelas tertentu pada sebuah perangkat. Profile-profile menyediakan user interface(UI) API,persistence, messaging library, dan sebagainya. 10. Terdapat tiga nama OS untuk mobile devices yang popular yaitu Palm dengan PalmOS-nya, Symbian dengan EPOC-nya, dan Microsoft dengan Pocket PC/ Windows CE-nya.

Intro J2ME

17

Politeknik Telkom

Mobile Application

Pilihan Ganda

1.

Pengembangan versi Java oleh Sun Microsystem terdiri dari : 1. J2EE (Java 2 Enterprise Edition) 2. J2SE (Java 2 Standar Edition) 3. J2ME (Java 2 Micro Edition) 4. Java Card. a. b. 1,2,3,4 1,2,3 c. d. 1,2 1

2.

Kategori ini digunakan untuk menjalankan dan mengembangkan aplikasi-aplikasi Java pada level PC (Personal Computer) a. J2SE c. J2ME b. J2EE d. Java Card Kategori ini digunakan untuk menjalankan dan mengembangkan aplikasi-aplikasi Java pada lingkungan entriprise dengan menambahkan fungsionalitasfungsionalitas Java semacam EJB (Enterprise Java Bean), Java CORBA, Servlet dan JSP serta Java XML (Extensible Markup Language) a. J2SE c. J2ME b. J2EE d. Java Card

3.

18

Intro J2ME

Politeknik Telkom

Mobile Application

4.

Kategori ini digunakan untuk menjalankan dan mengembangkan aplikasi-aplikasi Java pada lingkungan entriprise dengan menambahkan fungsionalitasfungsionalitas Java semacam EJB (Enterprise Java Bean), Java CORBA, Servlet dan JSP serta Java XML (Extensible Markup Language) c. J2SE c. J2ME d. J2EE d. Java Card

Intro J2ME

19

Politeknik Telkom

Mobile Application

Latihan
1. 2. 3. 4. 5. 6. Sebutkan perbedaan antara J2SE, J2EE, J2ME dan Java Card ? Apa keuntungan menggunakan java sebagai pengembangan dan platform runtime untuk perangkat mobile? Sebutkan komponen-komponen dari J2ME ? Sebutkan kemampuan-kemampuan yang dimiliki Java API merupakan komponen-komponen dan kelas Java yang sudah jadi ? Sebutkan karakteristik perangkat mobile ? Sebutkan tiga nama OS untuk mobile devices yang popular dan masing-masing OS berikan minimal 3 contoh perangkat mobilenya ?

20

Intro J2ME

Politeknik Telkom

Mobile Application

2

J2ME, J2EE DAN J2SE

Overview

Anda jangan berharap dapat memprogram dengan platform J2SE dan dapat me-load-nya pada mobile devices, tentu saja berbeda terutama pada hal prosesor computing dan memory-nya. Jika pada J2SE anda menggunakan interpreter JVM, pada platform J2ME anda mempergunakan Kilo Virtual Machine (KVM) yang “ditanam” dalam handheld devices. Sebagai informasi bahwa J2EE merupakan superset dari J2SE, sebaliknya J2SE merupakan superset bagi J2ME. Apa artinya? API yang ada pada J2ME sebagian mengadopsi yang ada pada API J2SE, selain juga mengimplementasikan API spesifik untuk teknologi J2ME itu (javax.microedition.*).

Tujuan

Pada akhir bab ini, siswa diharapkan dapat menguasai : 1. Menjelaskan tentang perbedaan J2ME dengan J2SE, dan J2EE 2. Pengenalan tentang macam dan ragam dari profil-profil J2ME . seperti: Mobile Information Defice Profile (MIDP), PDA Profile (PDAP), Foundation Profile, Personal Basis and Personal Profiles, RMI Profile, dan Game Profile 3. Pengenalan tentang jenis konfigurasi-konfigurasi J2ME ,. seperti: CDC and CLCD.s 4. Pertimbangan-pertimbangan design untuk membangun aplikasi pada peralatan kecil dan peralatan mobile. 5. Pertimbangan-pertimbangan kinerja sistem 6. Pertimbangan-pertimbangan kompilasi 7. Pertimbangan-pertimbangan paket pembangunan sistem 8. CLCD Java Virtual Machine
J2ME, J2EE, J2SE 21

Politeknik Telkom

Mobile Application

2.1

J2ME, J2SE dan J2EE
Pada perkembangan selanjutnya, Sun Microsystem memperkenalkan Java versi 1.2 atau lebih dikenal dengan nama Java 2 yang terdiri atas JDK dan JRE versi 1.2. Aplikasiaplikasi java yang kompatibel dengan Java 2 ini dikenal dengan Java 2 Compliant. Pada Java 2 ini, java dibagi menjadi 3 kategori:  Java 2 Standart Edition (J2SE) Kategori ini digunakan untuk menjalankan dan mengembangkan aplikasi-aplikasi Java pada level PC (Personal Computer)  Java 2 Enterprise Edition (J2EE) Kategori ini digunakan untuk menjalankan dan mengembangkan aplikasi-aplikasi Java pada lingkungan entriprise dengan menambahkan fungsionalitasfungsionalitas Java semacam EJB (Enterprise Java Bean), Java CORBA, Servlet dan JSP serta Java XML (Extensible Markup Language)  Java 2 Micro Edition (J2ME) Kategori ini digunakan untuk menjalankan dan mengembangkan aplikasi-aplikasi Java pada handled devices atau perangkatperangkat semacam handphone, Palm, PDA, dan Pocket PC.

Gambar 2.1 Java Platform

22

J2ME, J2EE, J2SE

Politeknik Telkom

Mobile Application

Gambar 2.2 Berbagai versi Java dilihat dari target platformnya

2.2

Java 2 Micro Edition
J2ME dirancang untuk dapat menjalankan program Java pada perangkat-perangkat semacam handphone dan PDA, yang memiliki karakteristik yang berbeda dengan sebuah komputer biasa, misalnya kecilnya jumlah memori pada handphone dan PDA. J2ME terdiri atas komponen-komponen sebagai berikut :  Java Virtual Machine (JVM), dikenal dengan nama KVirtualMachine (KVM) Komponen ini untuk menjalankan program program Java pada emulator atau handled devices.  Java API (Application Programming Interface) Komponen ini merupakan kumpulan librari untuk menjalankan dan mengembangkan program Java pada handled devices.  Tools lain untuk pengembangan aplikasi Java semacam emulator Java Phone, emulator Motorolla. Dalam J2ME dibagi menjadi dua bagian yang dikenal dengan istilah configuration dan profile.

J2ME, J2EE, J2SE

23

Politeknik Telkom

Mobile Application

2.3

J2ME Configuration
J2ME Configuration mendefinisikan lingkungan kerja J2ME runtime. Oleh karena setiap handled devices memiliki fitur-fitur yang berbeda-beda, J2ME Configuration ini dirancang yakni menyediakan librari standar yang mengimplementasikan fitur standar dari sebuah handled devices. Mengapa perlu J2ME Configuration bisa dikatakan merupakan JRE pada handled devices. Lingkungan kerja yang dimaksud meliputi Java Virtual Machine yang digunakan untuk menjalankan program Java.

Gambar 2.3. J2ME components. Ada dua kategori J2ME Configuration saat ini, yaitu :  CLDC (Connected Limited Device Configuration) Kategori ini umumnya digunakan untuk aplikasi Java pada handphone semacam Nokia, Samsung Java Phone, Motorola i85s,
J2ME, J2EE, J2SE

24

Politeknik Telkom

Mobile Application

PDA (Personal Digital Assistant) semacam PALM, Pocket PC. Umumnya perangkat-perangkat tersebut hanya memiliki memori berukuran 160-512 KiloBytes.  CDC (Connected Device Configuration) Kategori ini umumnya digunakan untuk aplikasi Java pada perangkat-perangkat handled devices dengan ukuran memori paling tidak 2 Megabytes. Contohnya adalah internet TV, Nokia Communicator dan car television atau TV pada mobil.

Perbedaan antara CDC dan CLDC adalah sebagai berikut : Tabel 2.1 Perbandingan antara CDC dan CLDC CLDC CDC Mengimplementasikan subset Mengimplementasikan seluruh dari J2SE fitur pada J2SE JVM yang digunakan dikenal JVM yang digunakan dikenal dengan nama KVM dengan nama CVM Digunakan pada perangkat Digunakan pada perangkat handled dengan ukuran memori handled dengan ukuran memori terbatas (160-512 KiloBytes) minimal 2 Mbytes Processor 16 bit atau 32 bit Processor : 32 bit 2.3.1 CLDC

Gambar 2.3. API pada J2ME CLDC
J2ME, J2EE, J2SE 25

Politeknik Telkom

Mobile Application

The Connected Limited Device Configuration (CLDC) menggambarkan dan menunjuk pada area berikut ini:  Fitur Bahasa Java dan Virtual Machine(VM) dikenal dengan nama KVirtualMachine (KVM)  Library dasar(java.lang.*,java.util.*)  Input/Output(java.io.*)  Kemanan  Jaringan  Internationalization Fitur yang hilang Fitur tertentu dari J2SE yang dipindahkan dari CLDC adalah :  Finalization of class instances  Asynchronous exceptions  Beberapa error classes  User-defined class loaders  Reflection  Java Native Interface (JNI)  Thread groups dan daemon threads Reflection, Java Native Interface (JNI) dan user-defined class loaders potensial menjadi lubang keamanan. JNI juga membutuhkan memory yang intensif sehingga dimungkinkan untuk tidak mendapat dukungan dari memory rendah sebuah perangkat mobile. Karakteristik perangkat CLDC Perangkat yang diincar oleh CLDC mempunyai karateristik sebagai berikut:  Memory minimal 192kb untuk platform Java.  Prosesor dengan 16 atau 32 bit.  Mengkonsumsi sedikit daya.  Terbatas, koneksi jaringan yang sementara dengan pembatasan bandwith(biasanya wireless). CLDC tidak menggambarkan instalasi dan daur hidup sebuah aplikasi, antarmuka(UI) dan penanganan peristiwa(event handling). Adalah merupakan tugas profile yang berada di bawah CLDC untuk menggambarkan area ini. Secara khusus, spesifikasi MIDP

26

J2ME, J2EE, J2SE

Politeknik Telkom

Mobile Application

menggambarkan daur hidup aplikasi MIDP (MIDlet), library UI dan event handling(javax.microedition.lcdui.*). 2.3.2 CDC Connected Device Configuration (CDC) adalah super set dari CLDC. CDC menyediakan lingkungan Java runtime yang lebih luas dibandingkan CLDC dan lebih dekat kepada lingkungan J2SE. CDC Java Virtual Machine (CVM) mendukung penuh Java Virtual Machine (JVM). CDC berisi semua API dari CLDC. CDC menyediakan suatu subset yang lebih besar dari semua class J2SE. Seperti CLDC, CDC tidak menggambarkan setiap class UI. Library UI digambarkan oleh profileprofile di bawah configuration ini. Semua class yang terdapat dalam CDC datang dari package ini: ● java.io ● java.lang ● java.lang.ref ● java.lang.math ● java.net ● java.security ● java.security.cert ● java.text ● java.util ● java.util.jar ● java.util.zip CDC juga memasukkan di dalamnya GCF. CDC memerlukan jenis koneksi tambahan seperti file dan dukungan datagram.

2.4

Java Technology for the Wireless Industry (JTWI)
Java Technology for the Wireless Industry (JTWI) menetapkan satu set jasa dan spesifikasi standar. Berdasar spesifikasi JTWI, kata kuncinya adalah “untuk memperkecil fragmentasi API di dalam pasar telepon mobile, dan untuk mengirim spesifikasi yang dapat diprediksi,spesifikasi yang jelas untuk perangkat pabrik, operator, dan pengembang aplikasi”.

J2ME, J2EE, J2SE

27

Politeknik Telkom

Mobile Application

Dengan penyesuaian kepada JTWI, banyak aplikasi akan berjalan di suatu set yang lebih luas pada perangkat. Perangkat pabrik juga akan beruntung karena sebuah aplikasi yang besar akan tersedia untuk perangkat mereka.

Gambar 2.4: Komponen JTWI

2.5

Generic Connection Framework
The Generic Connection Framework menyediakan API dasar untuk koneksi dalam CLDC. Framework ini menyediakan suatu pondasi umum untuk koneksi seperti HTTP, Socket, dan Datagrams. GCF menyediakan suatu set API yang umum dan biasa yang memisahkan semua jenis koneksi. Perlu dicatat bahwa tidak semua jenis koneksi dibutuhkan untuk diterapkan oleh perangkat MIDP. Hirarki interface yang dapat diperluas dari GFC membuat proses penyamarataan menjadi mungkin. Jenis koneksi baru mungkin bisa ditambahkan ke dalam framework ini dengan memperluas hirarki ini.

28

J2ME, J2EE, J2SE

Politeknik Telkom

Mobile Application

Gambar 2.6: Hirarki koneksi GCF

2.6

J2ME Profile
Jika J2ME Configuration menyediakan librari-librari Java untuk implementasi fitur-fitur standar dari sebuah handled devices, J2ME Profile menyediakan implementasi implementasi tambahan yang sangat spesifik dari sebuah handled devices. Kemampuan standart itulah yang diimplementasikan oleh J2ME Configuration, sedangkan kemampuan fitur lain sangat bergantung pada jenis perangkat handled yang digunakan akan diimplementasikan oleh J2ME Profile. Ada lima kategori J2ME Profile saat ini, yaitu :  Mobile Information Device Profile (MIDP)  Foundation Profile (FP)  Personal Profile  RMI Profile  Personal Digital Assitance Profile

J2ME, J2EE, J2SE

29

Politeknik Telkom

Mobile Application

MIDP menyediakan librari-librari Java untuk implementasi dasar antarmuka (GUI), implementasi jaringan, database dan timer. MIDP dirancang khususnya untuk wireless phone dan pager. Buku ini hanya akan membahas pengembangan aplikasi wireless dengan MIDP saja yang bekerja pada CLDC.

2.7

Java Community Process (JCP)
Spesifikasi untuk J2SE, J2EE dan J2ME dikembangkan dibawah pengawasan Java Community Process (JCP). Spesifikasi yang dihasilkan adalah Java Specification Request (JSR). JCP terdiri dari para ahli dari berbagai perusahaan yang tergabung untuk membentuk Spesification. JSR ini melalui beberapa tahap pada JCP sebelum selesai. Setiap JSR diberi nomor. Tabel 1 Configurasi, Profile dan Optional API pada J2ME. Configuration JSR Name 30 Connected Limited Device Configuration (CLDC) 1.0 139 Connected Limited Device Configuration (CLDC) 1.1 36 Connected Device Configuration (CLDC) 1.0.1 218 Connected Device Configuration (CLDC) 1.1 URL http://jcp.org/jsr/detail/30.jsp http://jcp.org/jsr/detail/139.jsp http://jcp.org/jsr/detail/36.jsp http://jcp.org/jsr/detail/218.jsp

Profile
JSR 37

118 75 46 129
30

Name Mobile Information Device Profile 1.0 Mobile Information Device Profile 2.0 PDA Profile 1.0 Foundation Profile 1.0 Personal Basis Profile 1.0

URL http://jcp.org/jsr/detail/37.jsp http://jcp.org/jsr/detail/118.jsp http://jcp.org/jsr/detail/75.jsp http://jcp.org/jsr/detail/46.jsp http://jcp.org/jsr/detail/129.jsp
J2ME, J2EE, J2SE

Politeknik Telkom

Mobile Application

62 219 217

Personal Profile 1.0 Foundation Profile 1.1 Personal Basis Profile 1.1

http://jcp.org/jsr/detail/62.jsp http://jcp.org/jsr/detail/219.jsp http://jcp.org/jsr/detail/217.jsp

Optional API JSR Name 75 PDA Optional Packages for J2ME 82 Java APIs for Bluetooth 135 Mobile Media API 1.1 184 Mobile 3D Graphics 179 Location API for J2ME 120 Wireless Messaging API 1.0 205 Wireless Messaging API 2.0 172 J2ME Web Services APIs 66 RMI Optional Package

URL http://jcp.org/jsr/detail/75.jsp http://jcp.org/jsr/detail/82.jsp http://jcp.org/jsr/detail/135.jsp http://jcp.org/jsr/detail/184.jsp http://jcp.org/jsr/detail/179.jsp http://jcp.org/jsr/detail/120.jsp http://jcp.org/jsr/detail/205.jsp http://jcp.org/jsr/detail/172.jsp http://jcp.org/jsr/detail/66.jsp

2.8

MIDP
Mobile Information Device Profile (MIDP) berada di atas dari CLDC. Anda tidak bisa menulis aplikasi mobile hanya dengan menggunakan CLDC API. Anda harus tetap memanfaatkan MIDP yang mendefinisikan UI. Spesifikasi MIDP, kebanyakan seperti CLDC dan API lainnya sudah digambarkan melalui Java Community Process (JCP). JCP melibatkan sebuah kelompok ahli berasal dari lebih dari 50 perusahaan, yang terdiri atas pabrik perangkat mobile, pengembang software. MIDP terus berkembang, dengan versi-versi masa depan yang telah lulus dari proses ketat JCP. Spesifikasi MIDP menggambarkan suatu perangkat MIDP yang memiliki karakteristik-karateristik ini sebagai batas minimum:  Tampilan:  Ukuran Layar: 96x54  kedalaman tampilan: 1-bit  Ketajaman pixel: sekitar 1:1

J2ME, J2EE, J2SE

31

Politeknik Telkom

Mobile Application

 Masukan: Satu atau lebih mekanisme user-input: satu keybboard, dua keyboard, atau touch screen  Memory:  256 kilobytes of non-volatile memory untuk implementasi MIDP.  8 kilobytes of non-volatile memory for application-created persistent data  128 kilobytes of volatile memory for the Java runtime (e.g., the Java heap)  Jaringan: dua jalur, wireless, bandwidth terbatas  Sound: Kemampuan untuk memainkan nada-nada MIDP menggambarkan model aplikasi, UI API, penyimpanan dan jaringan yang kuat, permainan dan media API, kebijakan keamanan, penyebaran aplikasi dan ketetapan over-theair.

2.9

MIDlet
Suatu aplikasi MIDP disebut MIDlet. Perangkat application management software (AMS) berinteraksi langsung dengan MIDlet dengan method MIDlet create, start, pause, dan destroy. MIDlet adalah bagian dari package javax.microedition.midlet. Sebuah MIDlet harus di-extend dengan class MIDlet. Dan dapat meminta parameter dari AMS seperti dirumuskan dalam application descriptor (JAD). Suatu MIDlet tidak harus memiliki (dan memang harus tidak mempunyai) sebuah method public static void main(String[] argv).Method tersebut tidak akan dikenal lagi oleh AMS sebagai titik awal sebuah program.

32

J2ME, J2EE, J2SE

Politeknik Telkom

Mobile Application

2.10 Siklus MIDlet
kehidupan MIDlet dimulai ketika di-instantiate oleh AMS. MIDlet pada awalnya masuk status “Pause” setelah perintah baru dibuat. AMS memanggil constructor public tanpa argumen dari MIDlet. Jika sebuah exception terjadi dalam constructor, MIDlet memasuki status “Destroyed” dan membuangnya segera. MIDlet masuk ke dalam status “Active” atas pemanggilan method startUp() oleh AMS. MIDlet masuk ke dalam status “Destroyed” ketika AMS memanggil method destroyApp(). Status ini juga kembali diakses ketika method notifyDestroyed() kembali dengan sukses kepada aplikasi. Dengan catatan bahwa MIDlet hanya bisa memasuki status “Destroyed” sekali dalam masa hidupnya.

Gambar 2.7: Daur hidup MIDlet
J2ME, J2EE, J2SE 33

Politeknik Telkom

Mobile Application

Rangkuman
1. 2. Menjelaskan tentang perbedaan J2ME dengan J2SE, dan J2EE J2ME dirancang untuk dapat menjalankan program Java pada perangkat-perangkat semacam handphone dan PDA, yang memiliki karakteristik yang berbeda dengan sebuah komputer biasa, misalnya kecilnya jumlah memori pada handphone dan PDA. J2ME terdiri atas komponen-komponen sebagai berikut :  Java Virtual Machine (JVM), dikenal dengan nama KVirtualMachine (KVM) Komponen ini untuk menjalankan program program Java pada emulator atau handled devices.  Java API (Application Programming Interface) Komponen ini merupakan kumpulan librari untuk menjalankan dan mengembangkan program Java pada handled devices.  Tools lain untuk pengembangan aplikasi Java semacam emulator Java Phone, emulator Motorolla. Dalam J2ME dibagi menjadi dua bagian yang dikenal dengan istilah configuration dan profile. J2ME Configuration mendefinisikan lingkungan kerja J2ME runtime. Oleh karena setiap handled devices memiliki fitur-fitur yang berbeda-beda, J2ME Configuration ini dirancang yakni menyediakan librari standar yang mengimplementasikan fitur standar dari sebuah handled devices. Ada dua kategori J2ME Configuration saat ini, yaitu :  CLDC (Connected Limited Device Configuration) Kategori ini umumnya digunakan untuk aplikasi Java pada handphone semacam Nokia, Samsung Java Phone, Motorola i85s, PDA (Personal Digital Assistant) semacam PALM, Pocket PC. Umumnya perangkat-perangkat tersebut hanya memiliki memori berukuran 160-512 KiloBytes.

3.

4. 5.

6.

34

J2ME, J2EE, J2SE

Politeknik Telkom

Mobile Application

CDC (Connected Device Configuration) Kategori ini umumnya digunakan untuk aplikasi Java pada perangkat-perangkat handled devices dengan ukuran memori paling tidak 2 Megabytes. Contohnya adalah internet TV, Nokia Communicator dan car television atau TV pada mobil. 7. The Connected Limited Device Configuration (CLDC) menggambarkan dan menunjuk pada area berikut ini: • Fitur Bahasa Java dan Virtual Machine(VM) dikenal dengan nama KVirtualMachine (KVM) • Library dasar(java.lang.*,java.util.*) • Input/Output(java.io.*) • Kemanan • Jaringan • Internationalization 8. Connected Device Configuration (CDC) adalah super set dari CLDC. CDC menyediakan lingkungan Java runtime yang lebih luas dibandingkan CLDC dan lebih dekat kepada lingkungan J2SE. 9. Java Technology for the Wireless Industry (JTWI) menetapkan satu set jasa dan spesifikasi standar. Berdasar spesifikasi JTWI, kata kuncinya adalah “untuk memperkecil fragmentasi API di dalam pasar telepon mobile, dan untuk mengirim spesifikasi yang dapat diprediksi,spesifikasi yang jelas untuk perangkat pabrik, operator, dan pengembang aplikasi”. 10. J2ME Configuration menyediakan librari-librari Java untuk implementasi fitur-fitur standar dari sebuah handled devices, J2ME Profile menyediakan implementasi implementasi tambahan yang sangat spesifik dari sebuah handled devices. Ada lima kategori J2ME Profile saat ini, yaitu :  Mobile Information Device Profile (MIDP)  Foundation Profile (FP)  Personal Profile  RMI Profile  Personal Digital Assitance Profile



J2ME, J2EE, J2SE

35

Politeknik Telkom

Mobile Application

11. Spesifikasi untuk J2SE, J2EE dan J2ME dikembangkan dibawah pengawasan Java Community Process (JCP). Spesifikasi yang dihasilkan adalah Java Specification Request (JSR). JCP terdiri dari para ahli dari berbagai perusahaan yang tergabung untuk membentuk Spesification. JSR ini melalui beberapa tahap pada JCP sebelum selesai. Setiap JSR diberi nomor. 12. Spesifikasi MIDP, kebanyakan seperti CLDC dan API lainnya sudah digambarkan melalui Java Community Process (JCP). JCP melibatkan sebuah kelompok ahli berasal dari lebih dari 50 perusahaan, yang terdiri atas pabrik perangkat mobile, pengembang software. MIDP terus berkembang, dengan versi-versi masa depan yang telah lulus dari proses ketat JCP. 13. Suatu aplikasi MIDP disebut MIDlet. Perangkat application management software (AMS) berinteraksi langsung dengan MIDlet dengan method MIDlet create, start, pause, dan destroy. 14. MIDlet adalah bagian dari package javax.microedition.midlet. Sebuah MIDlet harus di-extend dengan class MIDlet. Dan dapat meminta parameter dari AMS seperti dirumuskan dalam application descriptor (JAD). 15. Kehidupan MIDlet dimulai ketika di-instantiate oleh AMS. Jika Anda mengenal Java Applet, Anda akan menemukan bahwa Applet dapat berada dalam status init(), start(), stop() dan run().

36

J2ME, J2EE, J2SE

Politeknik Telkom

Mobile Application

Kuis Benar Salah

1.

2.

3.

4.

5.

6.

J2ME Configuration mendefinisikan lingkungan kerja J2ME runtime. Oleh karena setiap handled devices memiliki fitur-fitur yang berbeda-beda, J2ME Configuration ini dirancang yakni menyediakan librari standar yang mengimplementasikan fitur standar dari sebuah handled devices. J2ME Configuration bisa dikatakan merupakan JRE pada handled devices. Lingkungan kerja yang dimaksud meliputi Java Virtual Machine yang digunakan untuk menjalankan program Java. Ada dua kategori J2ME Configuration saat ini, yaitu CLDC (Connected Limited Device Configuration) dan CDC (Connected Device Configuration) CLDC (Connected Limited Device Configuration) umumnya digunakan untuk aplikasi Java pada handphone semacam Nokia, Samsung Java Phone, Motorola i85s, PDA (Personal Digital Assistant) semacam PALM, Pocket PC. Umumnya perangkatperangkat tersebut hanya memiliki memori berukuran 160-512 KiloBytes. CDC (Connected Device Configuration) umumnya digunakan untuk aplikasi Java pada perangkat-perangkat handled devices dengan ukuran memori paling tidak 2 Megabytes. Contohnya adalah internet TV, Nokia Communicator dan car television atau TV pada mobil. CLDC tidak menggambarkan instalasi dan daur hidup sebuah aplikasi, antarmuka(UI) dan penanganan peristiwa(event handling). Adalah merupakan tugas profile yang berada di bawah CLDC untuk menggambarkan area ini. Secara khusus, spesifikasi MIDP menggambarkan daur hidup aplikasi MIDP (MIDlet), library UI dan event handling(javax.microedition.lcdui.*).

J2ME, J2EE, J2SE

37

Politeknik Telkom

Mobile Application

7.

Connected Device Configuration (CDC) adalah super set dari CLDC. CDC menyediakan lingkungan Java runtime yang lebih luas dibandingkan CLDC dan lebih dekat kepada lingkungan J2SE. 8. Java Technology for the Wireless Industry (JTWI) menetapkan satu set jasa dan spesifikasi standar. Berdasar spesifikasi JTWI, kata kuncinya adalah “untuk memperkecil fragmentasi API di dalam pasar telepon mobile, dan untuk mengirim spesifikasi yang dapat diprediksi,spesifikasi yang jelas untuk perangkat pabrik, operator, dan pengembang aplikasi”. 9. The Generic Connection Framework menyediakan API dasar untuk koneksi dalam CLDC. Framework ini menyediakan suatu pondasi umum untuk koneksi seperti HTTP, Socket, dan Datagrams. GCF menyediakan suatu set API yang umum dan biasa yang memisahkan semua jenis koneksi. 10. Spesifikasi untuk J2SE, J2EE dan J2ME dikembangkan dibawah pengawasan Java Community Process (JCP).

38

J2ME, J2EE, J2SE

Politeknik Telkom

Mobile Application

Pilihan Ganda
1. Yang bukan merupakan karakteristeristik dari CLDC adalah : a. Mengimplementasikan subset dari J2SE b. JVM yang digunakan dikenal dengan nama CVM c. Digunakan pada perangkat handled dengan ukuran memori terbatas (160-512 KiloBytes) d. Processor 16 bit atau 32 bit Yang bukan merupakan karakteristeristik dari CDC adalah : a. Mengimplementasikan seluruh fitur pada J2SE b. JVM yang digunakan dikenal dengan nama CVM c. Digunakan pada perangkat handled dengan ukuran memori terbatas (160-512 KiloBytes) d. Processor : 32 bit J2ME Profile saat ini terdiri dari : 1. Mobile Information Device Profile (MIDP) 2. Foundation Profile (FP) 3. Personal Profile 4. RMI Profile 5. Personal Digital Assitance Profile a. b. 4. 1, 2, 3, 4, 5 1, 2, 3, 4 c. d. 1, 2, 3 1, 2

2.

3.

Spesifikasi MIDP menggambarkan suatu perangkat MIDP yang memiliki karakteristik-karateristik ini sebagai batas minimum pada aspek-aspek : 1. Tampilan 2. Masukan 3. Memory 4. Jaringan 5. Sound a. b. 1, 2, 3, 4, 5 1, 2, 3, 4 c. d. 1, 2, 3 1, 2
39

J2ME, J2EE, J2SE

Politeknik Telkom

Mobile Application

Latihan

1. 2. 3. 4. 5.

Sebutkan perbedaan antara CLDC dan CDC ? Sebutkan Fitur tertentu dari J2SE yang dipindahkan dari CLDC? Sebutkan karakteristik dari perangkat CLDC ? Sebutkan lima kategori J2ME Profile saat ini ? Sebutkan spesifikasi MIDP menggambarkan suatu perangkat MIDP yang memiliki karakteristik-karateristik ini sebagai batas minimum?

40

J2ME, J2EE, J2SE

Politeknik Telkom

Mobile Application

3 CLCD

Overview

Pada J2SE anda menggunakan interpreter JVM, pada platform J2ME anda mempergunakan Kilo Virtual Machine (KVM) yang “ditanam” dalam handheld devices. Sebagai informasi bahwa J2EE merupakan superset dari J2SE, sebaliknya J2SE merupakan superset bagi J2ME. Apa artinya? API yang ada pada J2ME sebagian mengadopsi yang ada pada API J2SE, selain juga mengimplementasikan API spesifik untuk teknologi J2ME itu (javax.microedition.*).

Tujuan

Pada bab ini, pelajar diharapkan dapat menguasai :
1. 2. Connected Limited Device Configuration (CLCD) Kilobyte Virtual Machine (KVM)

CLDC

41

Politeknik Telkom

Mobile Application

J2ME CLDC dan KVM telah digunakan oleh banyak platform dan devices, termasuk oleh Motorola phones dan two-way pagers, Research in Motion (RIM) wireless handhelds, dan Palm PDA. Jutaan J2ME CLDS digunakan sehari-hari oleh berbagai mobile phone di Jepang dan Korea. Banyak pula consumer yang menggunakan J2ME dengan Motorola handsets pada jaringan Nextel di USA, dan dalam tahap test dan commercial deployment di Vodaphone Airtouch, Sprint PCS, Telefonica, dan operator lainnya di USA. Symbian terus men-support Java Technology untuk di-release-nya Nokia Communicator 9210 yang berbasiskan Java Technology pada akhir 2001.

Gambar 3.1 : Arsitektur Java 2 Micro Edition

3.1

CLDC

Gambar 3.2 : CLDC Scope
42 CLDC

Politeknik Telkom

Mobile Application

Seperti dijelaskan pada gambar 3.1 dibagian I, J2ME terbagi menjadi 2: CDC dan CLDC. Pada CLDC(Connected Limited Device Configuration) umumnya untuk aplikasi java pada handphone seperti produk-produk Siemens, Nokia, Motorola dll. Sedangkan CDC(Connected Device Configuration) umumnya digunakan pada perangkat dengan memori setidaknya 2 Mb. Subset API pada CLDC dijelaskan pada gambar di bawah ini.

Gambar 3.3. API pada J2ME CLDC Salah satu kelemahan CLDC yang merisaukan programmer adalah tidak adanya dukungan floating point sehingga kreatifitas programmer sangat diperlukan. Pembahasan buku ini mengacu pada J2ME configuration CLDC. 3.1.1 Karakteristik perangkat CLDC Perangkat yang diincar oleh CLDC mempunyai karateristik sebagai berikut:  Memory minimal 192kb untuk platform Java.  Prosesor dengan 16 atau 32 bit.  Mengkonsumsi sedikit daya.
CLDC 43

Politeknik Telkom

Mobile Application

Terbatas, koneksi jaringan yang sementara dengan pembatasan bandwith(biasanya wireless). CLDC tidak menggambarkan instalasi dan daur hidup sebuah aplikasi, antarmuka(UI) dan penanganan peristiwa(event handling). Adalah merupakan tugas profile yang berada di bawah CLDC untuk menggambarkan area ini. Secara khusus, spesifikasi MIDP menggambarkan daur hidup aplikasi MIDP (MIDlet), library UI dan event handling(javax.microedition.lcdui.*). The Connected Limited Device Configuration (CLDC) menggambarkan dan menunjuk pada area berikut ini : 1. Fitur Bahasa Java dan Virtual Machine(VM) dikenal dengan nama KVirtualMachine (KVM) 2. Library dasar(java.lang.*,java.util.*) 3. Input/Output(java.io.*) 4. Kemanan 5. Jaringan 6. Internationalization 3.1.2 Fitur yang hilang Akibatnya fitur-fitur yang kurang penting untuk diimplementasikan dalam handled devices yang bersangkutan pada Java 2 harus dibuang. Fitur-fitur tertentu dari J2SE yang dibuang antara lain :  Tidak ada dukungan untuk floating point Class-class untuk perhitungan floating point yakni java.lang.Float dan java.lang.Double dibuang dari CLDC.  Tidak ada dukungan untuk finalisasi objek Garbage collector yang secara sederhananya digunakan untuk ”bersih-bersih memori” membuang fungsi finalize pada class java.lang.Object, sekalipun fungsi ini sangat penting pada Java 2.  Tidak ada dukungan untuk Java Native Interface (JNI) Class JNI yang memungkinkan Java mengakses librari yang dibuat dengan bahasa selain Java, tidak didukung CLDC.I  Penanganan kesalahan/exception yang terbatas CLDC hanya mendefinisikan tiga class berikut untuk penanganan kesalahan / exception: o class java.lang.Error
44 CLDC



Politeknik Telkom

Mobile Application

o class java.lang.OutOfMemory o class java.lang.VirtualMachineError  Asynchronous exceptions  Beberapa error classes  User-defined class loaders  Reflection  Thread groups dan daemon threads Reflection, Java Native Interface (JNI) dan user-defined class loaders potensial menjadi lubang keamanan. JNI juga membutuhkan memory yang intensif sehingga dimungkinkan untuk tidak mendapat dukungan dari memory rendah sebuah perangkat mobile. 3.1.3 CLDC market

Gambar 3.3 : Peralatan Mobile. Pada gambar 3.3 peralatan mobile meliputi :  pagers  cellular telephones  personal digital assistants atau organizers  point of sale systems  pocket communicators  Internet screen telephones  automobile navigation dan entertainment systems  Internet television sets

CLDC

45

Politeknik Telkom

Mobile Application

3.1.4

Java TM Language Spesification (JLS) Kompatibilitas dari Java TM Language Spesification (JLS) :  Important thing : karena keterbatasan memory dan lainnya, maka KVM (kilo virtual machine) tidak dapat mengadaptasi seluruh fitur yang ada dalam JLS.  No floating point support untuk CLDC 1.0. Kelas java.lang.Float dan java.lang.Double dibuang dari CLDC.  No finalization object instances. Garbage collector yang menjadi salah satu andalan teknologi Java tidak di-support oleh CLDC.  Limited error handling capabilities. CLDC hanya mendukung penanganan kesalahan dengan hanya menggunakan kelas-kelas berikut : java.lang.Error, java.lang,OutOfMemory, dan java.lang.VirtualMachineError.  No thread & no JNI.

3.1.5

Preverification dan Application Representation  Class file harus dipreverifikasi dan harus berisi informasi preverifikasi (anda akan menerima runtime error manakala berusaha mengeksekusi aplikasi yang belum ter preverifikasi). Jar format digunakan manakala sebuah aplikasi CLDC disimpan pada tempat publik (misalnya disimpan pada sebuah situs web). Selain format jar hanya mungkin digunakan pada lingkungan internal saja (missal saat implementasi atau saat network level)



46

CLDC

Politeknik Telkom

Mobile Application

Gambar 3.4. API pada J2ME CLDC

3.2
3.2.1

CLDC Libraries
CLDC Libraries pewarisan dari J2SE
Class yang diwariskan dari Java 2 Standar Edition Platform adalah paket: 1. java.lang.* (Boolean, Byte, Character, Integer, Long, Math, Runnable, Runtime, System, StringBuffer). 2. java.util.* (Calendar, Date, Enumeration, Hashtable, Random, Stack, TimeZone, Vector). 3. java.io.* (berbagai variasi input & output stream readers dan writers : ByteArrayInput/Output, DataStreamInput/Ouput Reader/Writer).

CLDC

47

Politeknik Telkom

Mobile Application

1. Java Lang

Gambar 3.5. Hirarki library Java Lang

48

CLDC

Politeknik Telkom

Mobile Application

2. Java Util

Gambar 3.6. Hirarki library Java Util

CLDC

49

Politeknik Telkom

Mobile Application

3. Java IO

Gambar 3.7. Hirarki library Java IO

50

CLDC

Politeknik Telkom

Mobile Application

3.2.2

CLDC Libraries J2ME
Class library dari J2ME Platform adalah paket: 1. Package java.microedition.io

2. 3. 4.

Package javax.microedition.lcdui Package javax.microedition.midlet Package javax.microedition.rms

1. Package java.microedition.io

Gambar 3.8 Hirarki class java.microedition.io

CLDC

51

Politeknik Telkom

Mobile Application

2. Package javax.microedition.lcdui

Gambar 3.9 Hirarki javax.microedition.lcdui

52

CLDC

Politeknik Telkom

Mobile Application

3. Package javax.microedition.midlet

Gambar 3.10 Hirarki javax.microedition.midlet 4. Package javax.microedition.rms

Gambar 3.11 Hirarki javax.microedition.rms
CLDC 53

Politeknik Telkom

Mobile Application

3.3
  

CLDC System Properties
CLDC menyediakan akses pada system properties melalui java.lang.System. system.getProperty(String key) akan mengembalikan nilai string. Properti berikut digunakan oleh seluruh CLDC devices : microedition.platform, microedition.encoding, microedition.configuration, microedition.profiles. Profiles harus memberikan nilai yang spesifik untuk CLDC properties tersebut diatas (MIDP 1.0 requires microedition.profiles to contain at least "MIDP-1.0").



3.4
   3.1     

CLDC Networking
Libraries Networking pada J2SE terlalu besar untuk CLDC devices. Diasumsikan TCP/IP telah tersedia. CLDC membuat suatu set kelas baru yang disebut “Generic Connection Framework”. Key idea : treat everything as a URL : Connector.open("<protocol>:<address>; <parameters>"). CLDC mendefinisikan basic connection types sedangkan protocol didefinisikan pada profiles. Generic Connection Possibilities General form Connector.open("<protocol>://<address>:<parameters>"); Files : Connector.open("file://myfile.txt"); HTTP : Connector.open("http://wireless.java.sun.com"); Sockets : Connector.open("socket://129.144.111.222:9000"); Communication ports : Connector.open("comm://9600:18N"); :

54

CLDC

Politeknik Telkom

Mobile Application

3.5

Verifikasi Class oleh KVM
Spesifikasi CLDC memerlukan semua class untuk melewati proses verifikasi dua tingkat. Verifikasi pertama dilaksanakan diluar perangkat sebelum instalasi pada perangkat. Verifikasi kedua terjadi pada perangkat selama runtime dan dilaksanakan oleh KVM.

Gambar 3.12: Proses Verifikasi dua tingkat

CLDC

55

Politeknik Telkom

Mobile Application

Rangkuman
1. Perangkat yang diincar oleh CLDC mempunyai karateristik sebagai berikut:  Memory minimal 192kb untuk platform Java.  Prosesor dengan 16 atau 32 bit.  Mengkonsumsi sedikit daya.  Terbatas, koneksi jaringan yang sementara dengan pembatasan bandwith(biasanya wireless). CLDC tidak menggambarkan instalasi dan daur hidup sebuah aplikasi, antarmuka(UI) dan penanganan peristiwa(event handling). Adalah merupakan tugas profile yang berada di bawah CLDC untuk menggambarkan area ini. Secara khusus, spesifikasi MIDP menggambarkan daur hidup aplikasi MIDP (MIDlet), library UI dan event handling(javax.microedition.lcdui.*). Akibatnya fitur-fitur yang kurang penting untuk diimplementasikan dalam handled devices yang bersangkutan pada Java 2 harus dibuang. Fitur-fitur tertentu dari J2SE yang dibuang antara lain :  Tidak ada dukungan untuk floating point Class-class untuk perhitungan floating point yakni java.lang.Float dan java.lang.Double dibuang dari CLDC.  Tidak ada dukungan untuk finalisasi objek Garbage collector yang secara sederhananya digunakan untuk ”bersih-bersih memori” membuang fungsi finalize pada class java.lang.Object, sekalipun fungsi ini sangat penting pada Java 2.  Tidak ada dukungan untuk Java Native Interface (JNI) Class JNI yang memungkinkan Java mengakses librari yang dibuat dengan bahasa selain Java, tidak didukung CLDC.I  Penanganan kesalahan/exception yang terbatas CLDC hanya mendefinisikan tiga class berikut untuk penanganan kesalahan / exception: o class java.lang.Error o class java.lang.OutOfMemory o class java.lang.VirtualMachineError

2.

3.

56

CLDC

Politeknik Telkom

Mobile Application

4.

5.

6.

 Asynchronous exceptions  Beberapa error classes  User-defined class loaders  Reflection  Thread groups dan daemon threads Kompatibilitas dari Java TM Language Spesification (JLS) :  Important thing : karena keterbatasan memory dan lainnya, maka KVM (kilo virtual machine) tidak dapat mengadaptasi seluruh fitur yang ada dalam JLS.  No floating point support untuk CLDC 1.0. Kelas java.lang.Float dan java.lang.Double dibuang dari CLDC.  No finalization object instances. Garbage collector yang menjadi salah satu andalan teknologi Java tidak di-support oleh CLDC.  Limited error handling capabilities. CLDC hanya mendukung penanganan kesalahan dengan hanya menggunakan kelas-kelas berikut : java.lang.Error, java.lang,OutOfMemory, dan java.lang.VirtualMachineError.  No thread & no JNI. Class yang diwariskan dari Java 2 Standar Edition Platform adalah paket: a. java.lang.* (Boolean, Byte, Character, Integer, Long, Math, Runnable, Runtime, System, StringBuffer). b. java.util.* (Calendar, Date, Enumeration, Hashtable, Random, Stack, TimeZone, Vector). c. java.io.* (berbagai variasi input & output stream readers dan writers : ByteArrayInput/Output, DataStreamInput/Ouput Reader/Writer). Class library dari J2ME Platform adalah paket: a. Package java.microedition.io b. Package javax.microedition.lcdui c. Package javax.microedition.midlet d. Package javax.microedition.rms

CLDC

57

Politeknik Telkom

Mobile Application

7.

CLDC System Properties  CLDC menyediakan akses pada system properties melalui java.lang.System.  system.getProperty(String key) akan mengembalikan nilai string.  Properti berikut digunakan oleh seluruh CLDC devices : microedition.platform, microedition.encoding, microedition.configuration, microedition.profiles.  Profiles harus memberikan nilai yang spesifik untuk CLDC properties tersebut diatas (MIDP 1.0 requires microedition.profiles to contain at least "MIDP-1.0"). 8. CLDC Networking  Libraries Networking pada J2SE terlalu besar untuk CLDC devices. Diasumsikan TCP/IP telah tersedia.  CLDC membuat suatu set kelas baru yang disebut “Generic Connection Framework”. Key idea : treat everything as a URL : Connector.open("<protocol>:<address>; <parameters>").  CLDC mendefinisikan basic connection types sedangkan protocol didefinisikan pada profiles. 9. Generic Connection Possibilities  General form : Connector.open("<protocol>://<address>:<parameters>");  Files : Connector.open("file://myfile.txt");  HTTP : Connector.open("http://wireless.java.sun.com");  Sockets : Connector.open("socket://129.144.111.222:9000");  Communication ports : Connector.open("comm://9600:18N"); 10. Spesifikasi CLDC memerlukan semua class untuk melewati proses verifikasi dua tingkat. Verifikasi pertama dilaksanakan diluar perangkat sebelum instalasi pada perangkat. Verifikasi kedua terjadi pada perangkat selama runtime dan dilaksanakan oleh KVM.

58

CLDC

Politeknik Telkom

Mobile Application

Kuis Benar Salah

1. 2. 3. 4. 5.

6.

Pada CLDC(Connected Limited Device Configuration) umumnya untuk aplikasi java pada handphone seperti produk-produk Siemens, Nokia, Motorola dll. Salah satu kelemahan CLDC yang merisaukan programmer adalah tidak adanya dukungan floating point sehingga kreatifitas programmer sangat diperlukan. CLDC tidak menggambarkan instalasi dan daur hidup sebuah aplikasi, antarmuka(UI) dan penanganan peristiwa(event handling). Class file harus dipreverifikasi dan harus berisi informasi preverifikasi (anda akan menerima runtime error manakala berusaha mengeksekusi aplikasi yang belum ter preverifikasi). Jar format digunakan manakala sebuah aplikasi CLDC disimpan pada tempat publik (misalnya disimpan pada sebuah situs web). Selain format jar hanya mungkin digunakan pada lingkungan internal saja (missal saat implementasi atau saat network level) Spesifikasi CLDC memerlukan semua class untuk melewati proses verifikasi dua tingkat. Verifikasi pertama dilaksanakan diluar perangkat sebelum instalasi pada perangkat. Verifikasi kedua terjadi pada perangkat selama runtime dan dilaksanakan oleh KVM.

CLDC

59

Politeknik Telkom

Mobile Application

Pilihan Ganda
1. Perangkat yang diincar oleh CLDC mempunyai karateristik : 1. Memory minimal 192kb untuk platform Java. 2. Prosesor dengan 16 atau 32 bit. 3. Mengkonsumsi sedikit daya. 4. Terbatas, koneksi jaringan yang sementara dengan pembatasan bandwith(biasanya wireless). a. b. 1,2,3,4 1,2,3 c. d. 1,2 1

2. CLDC hanya mendefinisikan tiga class berikut untuk penanganan kesalahan / exception: 1. class java.lang.Error 2. class java.lang.OutOfMemory 3. class java.lang.VirtualMachineError a. b. 1,2,3 1,2 c. d. 1, 3 2,3

3. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Class file harus dipreverifikasi dan harus berisi informasi preverifikasi (anda akan menerima runtime error manakala berusaha mengeksekusi aplikasi yang belum ter preverifikasi). B. Jar format digunakan manakala sebuah aplikasi CLDC disimpan pada tempat publik (misalnya disimpan pada sebuah situs web). Selain format jar hanya mungkin digunakan pada lingkungan internal saja (missal saat implementasi atau saat network level) a. b. c. d. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

60

CLDC

Politeknik Telkom

Mobile Application

4. Class yang diwariskan dari Java 2 Standar Edition Platform adalah paket: 1. java.lang.* (Boolean, Byte, Character, Integer, Long, Math, Runnable, Runtime, System, StringBuffer). 2. java.util.* (Calendar, Date, Enumeration, Hashtable, Random, Stack, TimeZone, Vector). 3. java.io.* (berbagai variasi input & output stream readers dan writers : ByteArrayInput/Output, DataStreamInput/Ouput Reader/Writer). a. b. 1,2,3 1,2 c. 1, 3 d. 2,3

Latihan
1. 2. 3. 4. 5. Sebutkan karakteristik dari perangkat yang diincar oleh CLDC ? Sebutkan area kerja dari The Connected Limited Device Configuration (CLDC) ? Sebutkan Fitur-fitur tertentu dari J2SE yang dibuang ? Sebutkan paket class pada J2Me yang diwariskan dari Java 2 Standar Edition Platform? Sebutkan paket class dari J2ME Platform ?

CLDC

61

Politeknik Telkom

Mobile Application

4 MIDP

Overview

MIDP (Mobile Information Device Profile) menyediakan librari-librari Java untuk implementasi dasar antarmuka (GUI), implementasi jaringan, database, security dan timer. MIDP dirancang khususnya untuk handphone, pager, PDA dan sebagainya.

Tujuan

Pada akhir bab ini, pelajar diharapkan dapat menguasai : 1. Memahami MIDP (Mobile Information Device Profile) 2. MIDP java platform 3. MIDlets Security 4. MIDlet Packaging

62

MIDP

Politeknik Telkom

Mobile Application

4.1

Mobile Information Device Profile (MIDP)
MIDP dikhususkan untuk digunakan pada handset dengan kemampuan CPU, memori, keyboard dan layer yang terbatas, seperti handphone, pager, PDA dan sebagainya.

Gambar 4.1 Arsitektur aplikasi MIDP Pada Gambar 4.1 Menunjukkan bahwa aplikasi yang mendukung perangkat MIDP adalah aplikasi MIDlet yang juga termasuk bagian dari Java 2 Micro Edition. Mobile Information Device Profile (MIDP) berada di atas dari CLDC. Anda tidak bisa menulis aplikasi mobile hanya dengan menggunakan CLDC API. Anda harus tetap memanfaatkan MIDP yang mendefinisikan UI. Spesifikasi MIDP, kebanyakan seperti CLDC dan API lainnya sudah digambarkan melalui Java Community Process (JCP). JCP melibatkan sebuah kelompok ahli berasal dari lebih dari 50 perusahaan, yang terdiri atas pabrik perangkat mobile, pengembang software. MIDP terus berkembang, dengan versi-versi masa depan yang telah lulus dari proses ketat JCP.
MIDP 63

Politeknik Telkom

Mobile Application

Spesifikasi MIDP menggambarkan suatu perangkat MIDP yang memiliki karakteristikkarateristik ini sebagai batas minimum:  Tampilan:  Ukuran Layar: 96x54  kedalaman tampilan: 1-bit  Ketajaman pixel: sekitar 1:1  Masukan: Satu atau lebih mekanisme user-input: satu keybboard, dua keyboard, atau touch screen

Gambar 4.2 Tampilan Layar Peraltan Mobile  Memory:  256 kilobytes of non-volatile memory untuk implementasi MIDP.  8 kilobytes of non-volatile memory for application-created persistent data  128 kilobytes of volatile memory for the Java runtime (e.g., the Java heap)  Jaringan: dua jalur, wireless, bandwidth terbatas  Sound: Kemampuan untuk memainkan nada-nada MIDP menggambarkan model aplikasi, UI API, penyimpanan dan jaringan yang kuat, permainan dan media API, kebijakan keamanan, penyebaran aplikasi dan ketetapan over-theair.

64

MIDP

Politeknik Telkom

Mobile Application

4.2
4.2.1

J2ME Security
Protection Domains Sebuah protection domains endefinisikan rangkaian permissions yang disertakan pada MIDlet Suite. MIDP 2.0 menjelaskan bahwa paling tidak terdapat dua buah protection domains : untrusted dan trusted domains. Untrusted domains adalah pembatasan dimana akses terhadap protected API pada kondisi default tidak diijinkan. Seorang user secara eksplisit harus mengatur tipe akses MIDlet Suite terhadap API. Untrusted MIDlets (berjalan di untrusted domains) tidak memerlukan user permission dalam mengakses protected API. Untrusted dan trusted domain menyediakan akses yang tak terbatas pada Record Management, MIDlet life cycle, LDCUI, Game dan Multimedia API. Bagaimanapun, API untuk koneksi HTTP dan HTTPS menuntut kejelasan permissions dari user jika MIDlet Suite berjalan pada untrusted domain. Sebuah protection domain adalah rangkaian dari ”Allowed” dan ”User” permissions yang diberikan kepada MIDlet Suite.

4.2.2

Permissions Terdapat dua tipe mode interaksi permissions, mode Allowed dan User. Pada mode Allowed, user tidak diminta melakukan pengaturan permission saat MIDlet mengakses sebuah API yang terproteksi. Sebuah aplikasi secara otomatis memberikan hak akses terhadap resource dan interaksi dari user tidak diperlukan. Dalam mode User, device menanyakan apakah user menginginkan untuk mencabut atau memberikan hak akses MIDlet terhadap resource. Frekuensi dari pertanyaan bergantung pada mode interaksi yang dipilih oleh user.

MIDP

65

Politeknik Telkom

Mobile Application

4.2.3

Mode Interaksi User Sebuah user permission memiliki salah satu dari 2 mode interaksi berikut : 1. Blanket User memberikan permission pada MIDlet Suite untuk mengakses resource atau API secara permanen. User tidak akan lagi diminta melakukan pengaturan setiap MIDlet Suite berjalan. Permission yang ada akan tetap eksis hingga MIDlet Suite dihapus dari device atau user merubah permission tersebut. Membuat sebuah permission adalah salah satu dari cara pengamanan akses terhadap restricted APIs. Dalam MIDP, nama dari permission menggunakan nama dari package dari API tersebut sebagai prefix dan bersifat case sensitive. Jika permission tersebut ditujukan kepada sebuah class, maka penamaan permission harus mengandung nama class dan package. Sebuah MIDlet dapat menuntut adanya permission dengan mendeklarasikan MIDlet-Permissions ataupun atribut MIDletPermissions-Opt pada application descriptor. Jika MIDlet Suite menyertakan atribut MIDlet-Permissions, atribut permission tersebut harus diberi hak akses terhadap protection domain. Jika hak akses tidak diberikan, maka proses instalasi akan dibatalkan. Multiple permissions dituliskan menggunakan tanda koma (,) sebagai pemisah. MIDlet-Permissions: javax.microedition.io.Connector.http MIDlet-Permissions-Opt: javax.wireless.messaging.sms.receive, javax.wireless.messaging.sms.send Membuat permissions pada MIDlet Suite menggunakan NetBeans Mobility Pack :

66

MIDP

Politeknik Telkom

Mobile Application

Gambar 4.3 Multiple Permissions

Gambar 4.4 Penambahan Permissions
MIDP 67

Politeknik Telkom

Mobile Application

2. Trusted MIDlets Sebuah MIDlet dapat diputuskan sebagai trusted application jika authentifikasi dan integritas dari file JAR dapat terverifikasi oleh device dan terbatas pada sebuah protection domain. Proses verifikasi dilakukan oleh device menggunakan certificates. Menandai MIDlet pada NetBeans Mobility Pack : Untuk memberi tanda pada MIDlet Suite menggunakan NetBeans Mobility Pack, buka project properties (klik kanan project name pada projects tab dan pilih Properties). Periksa bagian ”Sign Distribution” :

68

MIDP

Politeknik Telkom

Mobile Application

4.2.4

Anatomi dari Aplikasi MIDP APIs yang tersedia bagi suatu aplikasi MIDP datang dari kemasankemasan di dalam kedua-duanya CLDC dan MIDP, seperti yang ditunjukkan di dalam Gambar 1-2. Bungkus yang ditandai dengan sebuah lambing + bersifat baru di CLDC 1.1 dan MIDP 2.0. CLDC menggambarkan suatu inti dari APIs, kebanyakan mengambil dari lingkup J2SE. Ini memasukkan di dalamnya kelas-kelas bahasa pokok di javalang, kelas-kelas stream dari java.io, dan koleksi-koleksi sederhana dari java.util. CLDC juga menetapkan network API di javax.microedition.io.

Gambar 4.5 MIDP packages

MIDP

69

Politeknik Telkom

Mobile Application

Kita dapat menentukan secara bebas memilih alat dari beragam vendor penyedia untuk mengakses fasilitas-fasilitas pada Java API. Beragam alat-alat MIDP dengan beragam aplikasi software di gambarkan pada Gambar 4.6.

Gambar 4.6. MIDP software components

Masing-masing alat menerapkan beragam sistem operasi (OS). Aplikasiaplikasi berjalan langsung pada lapisan yang sudah didefinisikan terlebih dahulu di MIDP, dan beragam ala-alat memiliki beragam juga jenis Sistem Operasinya (OS). Layered pada bagian atas OS dari alat adalah CLDC (termasuk JVM) dan MIDP APIs. Aplikasi-aplikasi MIDP digunakan hanya di CLDC dan MIDP APIs. Aplikasi-aplikasi spesifikasi alat Java boleh juga menggunakan interface API Java yang disediakan oleh vendor penyedia alat.

4.3

MIDlet
Suatu aplikasi MIDP disebut MIDlet. Perangkat application management software (AMS) berinteraksi langsung dengan MIDlet dengan method MIDlet create, start, pause, dan destroy.

70

MIDP

Politeknik Telkom

Mobile Application

MIDlet adalah bagian dari package javax.microedition.midlet. Sebuah MIDlet harus di-extend dengan class MIDlet. Dan dapat meminta parameter dari AMS seperti dirumuskan dalam application descriptor (JAD). Suatu MIDlet tidak harus memiliki (dan memang harus tidak mempunyai) sebuah method public static void main(String[] argv). Method tersebut tidak akan dikenal lagi oleh AMS sebagai titik awal sebuah program. 4.3.1 Arsitektur Aplikasi MIDlet Paket memiliki class MIDlet yang mendefinisikan MIDP (Mobile Information Device Profile) dan interaksinya dengan perangkat handled yang bersangkutan. Class ini merupakan class utama dalam sebuah MIDlet, yaitu semua aplikasi MIDlet harus merupakan turunan dari class ini. Class ini merupakan class abstract, sehingga class turunannya harus mengimplementasikan fungsi-fungsi abstract di dalamnya, perhatikan kode Java di bawah ini :
package javax.microedition.midlet; import com.sun.midp.midlet.MIDletState; import com.sun.midp.midlet.MIDletSuite; public abstract class MIDlet{ protected MIDlet(){ state = new MIDletProxy(this); } protected abstract void startApp() throws MIDletStateChangeException{ } protected abstract void pauseApp() { } protected abstract void destroyApp(boolean unconditional) throws MIDletStateChangeException{ } public final void notifyDestroyed(){ state.notifyDestroyed(); } public final void notifyPaused(){ state.notifyPaused();
MIDP 71

Politeknik Telkom

Mobile Application

} public final String getAppProperty(String key){ return state.getMIDletSuite().getProperty(key); } public final void resumeRequest(){ state.resumeRequest(); } Private MIDletProxy state ; }

Tampak ada tiga fungsi yang bersifat abstract yaitu :
protected abstract void startApp() throws MIDletStateChangeException{ } protected abstract void pauseApp() { } protected abstract void destroyApp(boolean unconditional) throws MIDletStateChangeException{ }

Aplikasi MIDlet sudah pasti merupakan turunan dari class MIDlet diatas, harus mengimplementasikan tiga fungsi diatas. Itulah mengapa pada contoh MIDlet HelloWorld diatas, Anda menemukan implementasi dari fungsi-fungsi tersebut, sekalipun implementasi fungsi tersebut tidak melakukan apa-apa. Fungsi-fungsi yang tidak abstract pada class MIDlet bisa Anda gunakan karena otomatis diturunkan ke aplikasi MIDlet Anda, yakni ;  public final void notifyDestroyed(); Digunakan oleh MIDlet untuk memberitahukan ke AMS bahwa MIDlet telah dihancurkan dan dibersihkan dari memori. Mengenai AMS ini akan dibahas kemudian.  public final void notifyPaused(); Digunakan oleh MIDlet untuk memberitahukan ke AMS bahwa MIDlet telah dinonaktifkan sementara (paused).  public final String getAppProperty(String key); Digunakan oleh MIDlet untuk mengambil informasi properti dari AMS sesuai parameter key pada fungsi getAppProperty().

72

MIDP

Politeknik Telkom

Mobile Application



public final void resumeRequest(); Digunakan oleh MIDlet untuk meminta ke AMS agar diaktifkan kembali.

Ada beberapa istilah penting dalam daur hidup sebuah MIDlet, yaitu: o Application Management Software MIDlet berjalan dalam sebuah perangkat handled. Application Management Software ini merupakan software atau program bawaan yang ada dalam perangkat handled tersebut untuk mengatur manajemen aplikasi MIDlet yang ada. o MIDlet Merupakan aplikasi yang dijalankan pada sebuah perangkat handled. MIDlet tidak berinteraksi langsung dengan hardware dari handphone, Palm atau perangkat handled Anda yang lain, melainkan berinteraksi melalui Application Management Software. AMS inilah yang akan menerima sinyal dari MIDlet bahwa MIDlet akan dijalankan atau berhenti. o MIDlet State Merupakan status dari sebuah MIDlet yang akan dijelaskan kemudian. 4.3.2 Siklus MIDlet Jika Anda mengenal Java Applet, Anda akan menemukan bahwa Applet dapat berada dalam status init(), start(), stop() dan run(). Untuk MIDlet, ada tiga status dalam daur hidup sebuah MIDlet yaitu: Nama Status Paused Keterangan Status ini terjadi ketika MIDlet selesai diinisialisasi dan tidak melakukan aksi apapun. Pada status ini MIDlet tidak boleh sedang mengunci suatu sumber daya, misalnya tidak boleh sedang melakukan locking atau mengunci sebuah file untuk ditulis yang menyebabkan proses lain tidak bias menulis ke file tersebut. Secara garis besar, status MIDlet adalah paused pada saat:  Setelah MIDlet dibuat dengan konstruktor new()
73

MIDP

Politeknik Telkom

Mobile Application

Active Destroyed

Dari status Active, kemudian berhasil memanggil fungsi MIDlet.pauseApp()  Dari status Active, kemudian berhasil memanggil fungsi MIDlet.notifyPaused()  Dari status Active, namun ketika akan start() terjadi kesalahanberupa exception: MIDletStateChangeException Status ini terjadi ketika MIDlet sedang aktif/berjalan dengan normal, yakni setelah memanggil fungsi MIDlet.startApp() Status ini terjadi ketika MIDlet berhenti berjalan (identik dengan exit) sehingga seluruh sumber daya yang digunakan akan dibebaskan. Status ini terjadi ketika berhasil dilakukan pemanggilan fungsi MIDlet.destroyApp() atau MIDlet.notifyDestroyed()



Jika digambarkan perubahan status dalam daur hidup sebuah MIDlet adalah seperti gambar berikut :

Gambar 4.7: Daur hidup MIDlet
74 MIDP

Politeknik Telkom

Mobile Application

Eksekusi Sebuah MIDlet Umumnya urutan eksekusi sebuah MIDlet adalah sebagai berikut: 1. AMS (Application Management Software) menginisialisasi sebuah objek MIDlet, sehingga MIDlet berada pada status Paused. 2. Ketika AMS memutuskan bahwa MIDlet sudah waktunya dijalankan, maka AMS memanggil fungsi MIDlet.startApp() sehingga MIDlet akan mulai aktif berfungsi. 3. Ketika AMS memutuskan bahwa MIDlet harus dinonaktifkan sementara, maka AMS akan memanggil fungsi MIDlet.pauseApp() sehingga MIDlet akan berhenti bekerja. 4. Ketika AMS memutuskan bahwa MIDlet harus dinonaktifkan selamanya, maka AMS akan memanggil fungsi MIDlet.destroyApp() sehingga alokasi memori yang digunakan oleh MIDlet yang bersangkutan akan dibersihkan. 4.3.3 MIDlet suites Aplikasi-aplikasi MIDlet dibungkus dan dikirim kedalam perangkat sebagai MIDlet suites. Sebuah MIDlet suite terdiri dari Java Archive (JAR) dan sebuah tambahan Java Application Descriptor (JAD). File JAD adalah suatu file teks yang berisi satu set atribut-atribut, beberapa dibutuhkan.

MIDP

75

Politeknik Telkom

Mobile Application

Rangkuman
1. 2. MIDP dikhususkan untuk digunakan pada handset dengan kemampuan CPU, memori, keyboard dan layer yang terbatas, seperti handphone, pager, PDA dan sebagainya. Secara singkat MIDP 2.0 adalah MIDP 1.0 + API untuk multimedia  Akses ke kamera dan perekaman Video  Mendukung aneka format Audio dan Video  Memiliki batasan minimum hardware yang lebih tinggi Sebuah protection domains endefinisikan rangkaian permissions yang disertakan pada MIDlet Suite. MIDP 2.0 menjelaskan bahwa paling tidak terdapat dua buah protection domains : untrusted dan trusted domains. Terdapat dua tipe mode interaksi permissions, mode Allowed dan User. Pada mode Allowed, user tidak diminta melakukan pengaturan permission saat MIDlet mengakses sebuah API yang terproteksi. Sebuah aplikasi secara otomatis memberikan hak akses terhadap resource dan interaksi dari user tidak diperlukan. Sebuah user permission memiliki salah satu dari 2 mode interaksi berikut : a. Blanket b. Trusted MIDlets APIs yang tersedia bagi suatu aplikasi MIDP datang dari kemasankemasan di dalam kedua-duanya CLDC dan MIDP, seperti yang ditunjukkan di dalam Gambar 1-2. Bungkus yang ditandai dengan sebuah lambing + bersifat baru di CLDC 1.1 dan MIDP 2.0. CLDC menggambarkan suatu inti dari APIs, kebanyakan mengambil dari lingkup J2SE. Ini memasukkan di dalamnya kelas-kelas bahasa pokok di javalang, kelas-kelas stream dari java.io, dan koleksi-koleksi sederhana dari java.util. CLDC juga menetapkan network API di javax.microedition.io. Suatu aplikasi MIDP disebut MIDlet. Perangkat application management software (AMS) berinteraksi langsung dengan MIDlet dengan method MIDlet create, start, pause, dan destroy.

3.

4.

5.

6.

7.

76

MIDP

Politeknik Telkom

Mobile Application

8.

MIDlet adalah bagian dari package javax.microedition.midlet. Sebuah MIDlet harus di-extend dengan class MIDlet. Dan dapat meminta parameter dari AMS seperti dirumuskan dalam application descriptor (JAD). 9. Ada beberapa istilah penting dalam daur hidup sebuah MIDlet, yaitu: o Application Management Software MIDlet berjalan dalam sebuah perangkat handled. Application Management Software ini merupakan software atau program bawaan yang ada dalam perangkat handled tersebut untuk mengatur manajemen aplikasi MIDlet yang ada. o MIDlet Merupakan aplikasi yang dijalankan pada sebuah perangkat handled. MIDlet tidak berinteraksi langsung dengan hardware dari handphone, Palm atau perangkat handled Anda yang lain, melainkan berinteraksi melalui Application Management Software. AMS inilah yang akan menerima sinyal dari MIDlet bahwa MIDlet akan dijalankan atau berhenti. o MIDlet State Merupakan status dari sebuah MIDlet yang akan dijelaskan kemudian.

MIDP

77

Politeknik Telkom

Mobile Application

Kuis Benar Salah

1. 2.

3.

4. 5. 6. 7.

8.

MIDP dikhususkan untuk digunakan pada handset dengan kemampuan CPU, memori, keyboard dan layer yang terbatas, seperti handphone, pager, PDA dan sebagainya. Mobile Information Device Profile (MIDP) berada di atas dari CLDC. Anda tidak bisa menulis aplikasi mobile hanya dengan menggunakan CLDC API. Anda harus tetap memanfaatkan MIDP yang mendefinisikan UI. Sebuah protection domains endefinisikan rangkaian permissions yang disertakan pada MIDlet Suite. MIDP 2.0 menjelaskan bahwa paling tidak terdapat dua buah protection domains : untrusted dan trusted domains. Sebuah protection domain adalah rangkaian dari ”Allowed” dan ”User” permissions yang diberikan kepada MIDlet Suite. Sebuah user permission memiliki salah satu dari 2 mode interaksi yaitu Balnket dan Trusted MIDlets Suatu aplikasi MIDP disebut MIDlet. Perangkat application management software (AMS) berinteraksi langsung dengan MIDlet dengan method MIDlet create, start, pause, dan destroy. MIDlet adalah bagian dari package javax.microedition.midlet. Sebuah MIDlet harus di-extend dengan class MIDlet. Dan dapat meminta parameter dari AMS seperti dirumuskan dalam application descriptor (JAD). Jika Anda mengenal Java Applet, Anda akan menemukan bahwa Applet dapat berada dalam status init(), start(), stop() dan run().

78

MIDP

Politeknik Telkom

Mobile Application

Pilihan Ganda
1. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. MIDP dikhususkan untuk digunakan pada handset dengan kemampuan CPU, memori, keyboard dan layer yang terbatas, seperti handphone, pager, PDA dan sebagainya. B. Mobile Information Device Profile (MIDP) berada di atas dari CLDC. e. f. g. h. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

2. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Terdapat dua tipe mode interaksi permissions, mode Allowed dan User. Pada mode Allowed, user tidak diminta melakukan pengaturan permission saat MIDlet mengakses sebuah API yang terproteksi. Sebuah aplikasi secara otomatis memberikan hak akses terhadap resource dan interaksi dari user tidak diperlukan. B. Dalam mode User, device menanyakan apakah user menginginkan untuk mencabut atau memberikan hak akses MIDlet terhadap resource. Frekuensi dari pertanyaan bergantung pada mode interaksi yang dipilih oleh user. a. b. c. d. 3. 1. 2. 3. 4. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah Fungsi-fungsi yang tidak abstract pada class MIDlet bisa Anda gunakan karena otomatis diturunkan ke aplikasi MIDlet Anda, yakni ; public final void notifyDestroyed(); public final void notifyPaused(); public final String getAppProperty(String key); public final void resumeRequest();
79

MIDP

Politeknik Telkom

Mobile Application

a. b. 4. 1. 2. 3. 4.

1,2,3,4 1,2,3

c. d.

1,2 1

Umumnya urutan eksekusi sebuah MIDlet adalah sebagai berikut: AMS (Application Management Software) menginisialisasi sebuah objek MIDlet, sehingga MIDlet berada pada status Paused. Ketika AMS memutuskan bahwa MIDlet sudah waktunya dijalankan, maka AMS memanggil fungsi MIDlet.startApp() sehingga MIDlet akan mulai aktif berfungsi. Ketika AMS memutuskan bahwa MIDlet harus dinonaktifkan sementara, maka AMS akan memanggil fungsi MIDlet.pauseApp() sehingga MIDlet akan berhenti bekerja. Ketika AMS memutuskan bahwa MIDlet harus dinonaktifkan selamanya, maka AMS akan memanggil fungsi MIDlet.destroyApp() sehingga alokasi memori yang digunakan oleh MIDlet yang bersangkutan akan dibersihkan. 1,2,3,4 1,3,4,2 c. d. 1,2,4,3 1,3,2,4

a. b.

80

MIDP

Politeknik Telkom

Mobile Application

Latihan
1. 2. 3. Sebutkan spesifikasi MIDP menggambarkan suatu perangkat MIDP yang memiliki karakteristik-karateristik ini sebagai batas minimum ? Sebutkan 2 mode interkasi dari user permission? Sebutkan 3 status dari siklus MIDlet?

MIDP

81

Politeknik Telkom

Mobile Application

5

Integrated Programming Environment

Overview

Pada 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.

Tujuan

Pada akhir bab ini, pelajar diharapkan dapat menguasai : 1. Membuat MIDlet sederhana 2. Membuat sebuah project di NetBeans 3. Membuat sebuah MIDlet menggunakan NetBeans Mobility Pack 4. Menjalankan MIDlet di emulator

82

Integrated Programming Environment

Politeknik Telkom

Mobile Application

5.1

Pengenalan
IDE (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.

5.2

"Hello, world!" MIDlet
Kita sudah mempelajari pada bagian sebelumnya tentang daur hidup MIDlet (MIDlet's life cycle). MIDlet mulai hidup ketika MIDlet dibuat oleh Application Management System (AMS) pada device. Agar kita dapat membuat MIDlet, kita harus membuat subclass dari MIDlet class dari javax.microedition.midlet package. Kita juga harus melakukan override atau implement pada method: startApp(), destroyApp() dan pauseApp(). Method-method tersebut adalah method yang diperlukan oleh AMS untuk menjalankan dan mengkontrol MIDlet.

Gambar 5.1: Daur hidup MIDlet

Integrated Programming Environment

83

Politeknik Telkom

Mobile Application

Tidak seperti program Java pada umumnya dimana method main() hanya digunakan sekali pada jalannya program, method startApp() mungkin akan dipanggil lebih dari sekali dalam daur hidup MIDlet. Sehingga Anda diharuskan tidak membuat satu inisialisasi code pada method startApp(). Daripada, anda dapat membuat MIDlet consturctor dan melakukan inisialisasi di situ. Berikut ini adalah code program MIDP pertama kita:

84

Integrated Programming Environment

Politeknik Telkom

Mobile Application

Selanjutnya kita akan mempelajari MIDlet pertama kita, difokuskan pada line yang penting dari code diatas:
public class HelloMidlet extends MIDlet implements CommandListener {

Seperti yang sudah kita katakan sebelumnya, kita harus membuat subclass dari MIDlet untuk membuat MIDP program. Pada line ini, kita sudah membuat subclass dari MIDlet dengan memberikan turunan kelas induk dan menamakannya HelloMIDlet.
Display display; Command exitCommand = new Command("Exit", Command.EXIT, 1); Alert helloAlert;

Line diatas ini adalah variabel properties dari MIDlet. Kita membutuhkan object Display (hanya ada satu diplay per MIDlet) untuk melakukan fungsi menggambar pada layar. exitCommand adalah perintah yang akan kita taruh pada layar agar kita dapat keluar dari program. Jika kita tidak memiliki perintah keluar, maka kita tidak memiliki cara untuk keluar dari MIDlet dengan benar.
public HelloMidlet() { helloAlert = new Alert("Hello MIDlet", "Hello, world!",null, AlertType.INFO); helloAlert.setTimeout(Alert.FOREVER); helloAlert.addCommand(exitCommand); helloAlert.setCommandListener(this); }

Consturctor melakukan inisialisasi dari object Alert. Kita akan mempelajari lebih lanjut dari Alert class pada bab berikutnya. Method addCommand() pada object Alert memberikan perintah "Exit" pada layar. Method setCommandListener() memberikan informasi kepada sistem untuk memberikan emua command events ke MIDlet.
public class HelloMidlet extends MIDlet implements CommandListener {
Integrated Programming Environment 85

Politeknik Telkom

Mobile Application

Code "implements CommandListener" adalah untuk command/key presses, sehingga program kita mampu menghandle "command" events. Jika kita melakukan implement CommandListener, kita harus membuat method commandAction().
public void commandAction(Command c, Displayable d) { if (c == exitCommand) { destroyApp(true); notifyDestroyed(); // Exit } }

commandAction() diatas hanya menghandle request untuk perintah "Exit". Method diatas akan menghentikan program menggunakan notifyDestroyed() jika perintah "Exit" dijalankan atau ditekan.
public void startApp() { if (display == null) { display = Display.getDisplay(this); } display.setCurrent(helloAlert); }

Code diatas adalah bagian awal dari program kita ketika program kita sudah siap untuk ditampilkan oleh AMS. Perlu diingat bahwa method startApp() mungkin / bias dimasukkan lebih dari sekali seperti pada daur hidup MIDlet. Jika MIDlet berhenti / dihentikan, seperti bila ada telepon masuk, program akan masuk ke state berhenti (pausedApp). Jika panggilan sudah selesai AMS akan kembali ke program dan memanggil method startApp() lagi. Method display.setCurrent() memberikan informasi ke sistem bahwa kita menginginkan object Alert untuk dimunculkan ke layar. Kita dapat mendapat tampilah object dengan memanggil method statis Display.getDisplay().

86

Integrated Programming Environment

Politeknik Telkom

Mobile Application

NetBeans Mobility Pack secara otomatis membuat Java Application Descriptor (JAD) untuk program Anda. NetBeans Mobility Pack menaruh file JAD pada folder "dist" dari folder project. Berikut ini adalah contoh file JAD yang dibuat oleh NetBeans Mobility Pack:
MIDlet-1: HelloMidlet, , HelloMidlet MIDlet-Jar-Size: 1415 MIDlet-Jar-URL: ProjectHello.jar MIDlet-Name: ProjectHello MIDlet-Vendor: Vendor MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.1 MicroEdition-Profile: MIDP-2.0

Sekarang kita siap untuk mengcompile, melakukan pemaketan (package) pada aplikasi MIDlet pertama kita.

5.3

Compilation dan Packaging MIDlets
Sebelum kita menggunakan integrated tools untuk mengcompile dan melakukan packaging aplikasi MIDlet (MIDlet suite), kita akan mencoba menggunakan command line. Aplikasi MIDlet biasanya dipaketkan ke dalam sebuah file yaitu file JAR. File ini adalah file terkompres, seperti file ZIP. Pada implementasinya, Anda dapat membuka file JAR menggunakan program dekompresor file ZIP. Aplikasi MIDlet terdiri dari:  File JAR  File Java Application Descriptor (JAD) File JAR memiliki:  File class  Manifest file describing the contents of the archive  File manifest yang menjelaskan isi dari arsip  Sumber: image/icon, video, data, dll. Digunakan oleh aplikasi

Integrated Programming Environment

87

Politeknik Telkom

Mobile Application

File manifest, manifest.mf adalah seperti file JAD. File ini digunakan oleh application manager dari device. Beberapa field yang diperlukan oleh file manifest adalah:  MIDlet-Name  MIDlet-Version  MIDlet-Vendor  MIDlet-<n> (dimana n adalah angka dari 1, untuk setiap MIDlet di file JAR)  MicroEdition-Profile  MicroEdition-Configuration Selanjutnya kita mengcompile file source java:
javac -bootclasspath C:\WTK23\lib\cldcapi11.jar;C:\WTK23\lib\midpapi20.jar *.java

Program Compiler Java, "javac", harus berada pada path Anda. Jika anda melihat error seperti "cannot find file" atau "not an executable", Anda bisa mengkonsultasikan dengan panduan instalasi untuk distribusi Java development kit Anda tentang bagaimana memasukkan executable PATH dari lokasi tools yang ada di Java. Selanjutnya kita melakukan pre-verify dari file class:
preverify -classpath C:\WTK23\lib\cldcapi11.jar;C:\WTK23\lib\midpapi20.jar;. -d . HelloMidlet

Preverify sudah berada di wireless toolkit dari java.sun.com. Masukkan perintah ini pada sebuah baris. Langkah terakhir adalah membuat file JAR tersebut:
jar cvfm HelloMidlet.jar manifest.txt HelloMidlet.class

Program jar sudah berada di Java Development Kit, dan lokasinya harus dimasukkan pada executeable path Anda. Perintah ini akan membuat file JAR dengan nama file HelloMidlet.jar. File manifest.txt namanya diganti dengan manifest.mf pada file JAR.

88

Integrated Programming Environment

Politeknik Telkom

Mobile Application

5.4

Menggunakan Sun Wireless Toolkit
Sekarang kita menggunakan Sun Wireless Toolkit untuk mengcompile dan memaketkan aplikasi MIDlet / MIDlet suite (mengandung satu MIDlet) Buka ktoolbar (dari Wireless Toolkit distribution):

Gambar 5.2: ktoolbar Buat sebuah project:

Gambar 5.3: New Project Pada Setting window, anda dapat merubah banyak pilihan-pilihan dari beberapa opsi konfigurasi untuk project Anda. Anda dapat memilih konfigurasi yang akan bekerja, package/API yang diperlukan, konfigurasi Push Registry dan yang lain. Untuk tujuan kita kali ini, kita akan menggunakan konfigurasi default project. Click "OK" untuk selesai membuat project.
Integrated Programming Environment 89

Politeknik Telkom

Mobile Application

Gambar 5.4: Setting window Copy HelloMidlet.java kedalam direktori "src": Pada jendela ini berada di direktori: C:\WTK23\apps\HelloMidlet\src (dimana C:\WTK23 adalah lokasi Anda menginstall wireless toolkit). Click "Build" dan "Run":

90

Integrated Programming Environment

Politeknik Telkom

Mobile Application

Gambar 5.5: Click "Build" dan "Run"

Gambar 5.6: Hasil program Hallo Word di Emulator
Integrated Programming Environment 91

Politeknik Telkom

Mobile Application

5.5

Menggunakan NetBeans Mobility Pack
Seperti 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

Gambar 5.7: New Project

92

Integrated Programming Environment

Politeknik Telkom

Mobile Application

Langkah 2: Memilih kategori "Mobile"

Gambar 5.8: Memilih Kategori “Mobile” Langkah 3: Memilih "Mobile Application"

Gambar 5.9: Memilih Kategori “Mobile”
Integrated Programming Environment 93

Politeknik Telkom

Mobile Application

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

Gambar 5.10: Memilih Kategori “Mobile” Langkah 5: Memilih Platform (optional)

Gambar 5.11: Memilih Platform
94 Integrated Programming Environment

Politeknik Telkom

Mobile Application

Gambar 5.12: Mobile Project yang baru dibuat (NetBeans Mobility Pack) Langkah 6: Membuat sebuah MIDlet baru

Gambar 5.13: Membuat Midlet Baru
Integrated Programming Environment 95

Politeknik Telkom

Mobile Application

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

Gambar 5.14: Memilih MIDP "Category" dan MIDlet "File Type"

96

Integrated Programming Environment

Politeknik Telkom

Mobile Application

Langkah 8: Memberi nama MIDlet

Gambar 5.15: Memberi Nama MIDlet

Integrated Programming Environment

97

Politeknik Telkom

Mobile Application

Langkah 9:

Gambar 5.16: Membuat MIDlet secara otomatis membuat method MIDlet yang diperlukan

98

Integrated Programming Environment

Politeknik Telkom

Mobile Application

Langkah 10: Mengganti code yang dibuat secara otomatis dengan code program kita.

Gambar 5.17: Mengganti code yang dibuat secara otomatis dengan code program kita.

Integrated Programming Environment

99

Politeknik Telkom

Mobile Application

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

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

100

Integrated Programming Environment

Politeknik Telkom

Mobile Application

Langkah 12: Menjalankan MIDlet kita di Emulator

Gambar 5.19: Menjalankan MIDlet kita di Emulator

Integrated Programming Environment

101

Politeknik Telkom

Mobile Application

Gambar 5.19: Hello World MIDlet

102

Integrated Programming Environment

Politeknik Telkom

Mobile Application

5.6

Bekerja dengan Form
Bekerja dengan Form memungkinkan Anda untuk menampilkan beberapa komponen GUI semacam daftar pilihan, masukan teks (textbox) dalam satu layar. Form diimplementasikan oleh class javax.microedition.lcdui.Form. Form dapat menampung komponenkomponen yang disebut item dalam satu layar. Item tersebut adalah textfield, image, date field, gauge dan choice group. Item-item tersebut merupakan implementasi dari class turunan Item(javax.microedition.lcdui.Item).
public Form(String title) public Form(String title, Item[] items)

Konstruktor pertama, menyediakan sebuah form dengan judul form seperti parameter title yang diberikan, sedangkan konstruktor kedua mendefinisikan item-item apa saja yang akan ada di form yang akan dibuat. Class Item (javax.microedition.lcdui.Item) Komponen-komponen yang bisa diletakkan dalam sebuah form merupakan komponenkomponen yang memiliki class yang merupakan class turunan dari class abstract javax.microedition.lcdui.Item. Komponen-komponen tersebut adalah:  ChoiceGroup Class ini menyediakan komponen yang mirip dengan list, yakni menyediakan daftar pilihan.  DateField Class ini menyediakan komponen untuk memasukkan informasi tanggal dan waktu.  Gauge Class ini menyediakan komponen grafik horisontal yang biasanya digunakan untuk memberikan gambaran berapa persen proses berjalan.  Image dan ImageItem Class ini menyediakan komponen grafik untuk manipulasi gambar.

Integrated Programming Environment

103

Politeknik Telkom

Mobile Application

 

StringItem Class ini menyediakan komponen teks string yang tidak bisa diedit oleh pengguna. TextField Class ini menyediakan komponen untuk masukan teks string oleh pengguna.

ChoiceGroup Class ChoiceGroup(javax.microedition.lcdui.ChoiceGroup) merupakan class turunan dari class abstract javax.microedition.lcdui.Item yang menyediakan masukan pilihan (multiple choice) pada layar. Konstruktor dari class ChoiceGroup ini ada dua yaitu:
public ChoiceGroup(String title, int choiceType) public ChoiceGroup(String title, int choiceType, String[] choiceElement, Image[] choiceImages)

Parameter-parameter:  String title Untuk memberikan title pada daftar pilihan yang ditampilkan.  int choiceType Tipe pilihan yang digunakan dapat berisi: Choice.EXCLUSIVE Berarti setiap saat hanya bisa dipilih 1 buah pilihan saja. Choice.MULTIPLE Berarti pengguna bisa memilih lebih dari 1 pilihan. Berbeda dengan class List sebelumnya yang bisa memiliki tipe Choice.IMPLICIT class ini tidak memiliki tipe yang bersangkutan.  String[] choiceElement Merupakan array dari elemen yang akan ditampilkan  Image[] choiceImages Merupakan array dari gambar(javax.microedition.lcdui.Image) elemen yang akan ditampilkan.

104

Integrated Programming Environment

Politeknik Telkom

Mobile Application

Integrated Programming Environment

105

Politeknik Telkom

Mobile Application

Pilihan dengan Choice.MULTIPLE

Pilihan dengan Choice.EXCLUSIVE

Jika kita gunakan Choice.IMPLICIT pada penggunaan hoiceGroup maka akan terjadi exception seperti di bawah ini.

106

Integrated Programming Environment

Politeknik Telkom

Mobile Application

Rangkuman
IDE (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. Pada bab ini, kita sudah melakukan hal-hal sebagai berikut : 1. Membuat MIDlet sederhana 2. Membuat sebuah project di NetBeans 3. Membuat sebuah MIDlet menggunakan NetBeans Mobility Pack 4. Menjalankan MIDlet di emulator

Integrated Programming Environment

107

Politeknik Telkom

Mobile Application

Kuis Benar Salah

1.

2. 3. 4. 5.

6.

7. 8. 9.

Aplikasi MIDlet biasanya dipaketkan ke dalam sebuah file yaitu file JAR. File ini adalah file terkompres, seperti file ZIP. Pada implementasinya, Anda dapat membuka file JAR menggunakan program dekompresor file ZIP. Aplikasi MIDlet terdiri dari File JAR dan File Java Application Descriptor (JAD) File JAR memiliki File class, Manifest file describing the contents of the archive, File manifest yang menjelaskan isi dari arsip, dan Sumber: image/icon, video, data, dll. Digunakan oleh aplikasi File manifest, manifest.mf adalah seperti file JAD. File ini digunakan oleh application manager dari device. Program Compiler Java, "javac", harus berada pada path Anda. Jika anda melihat error seperti "cannot find file" atau "not an executable", Anda bisa mengkonsultasikan dengan panduan instalasi untuk distribusi Java development kit Anda tentang bagaimana memasukkan executable PATH dari lokasi tools yang ada di Java. Program jar sudah berada di Java Development Kit, dan lokasinya harus dimasukkan pada executeable path Anda. Perintah ini akan membuat file JAR dengan nama file HelloMidlet.jar. File manifest.txt namanya diganti dengan manifest.mf pada file JAR. Bekerja dengan Form memungkinkan Anda untuk menampilkan beberapa komponen GUI semacam daftar pilihan, masukan teks (textbox) dalam satu layar. Form diimplementasikan oleh class javax.microedition.lcdui.Form. Form dapat menampung komponen-komponen yang disebut item dalam satu layar. Item tersebut adalah textfield, image, date field, gauge dan choice group. Item-item tersebut merupakan implementasi dari class turunan Item(javax.microedition.lcdui.Item).

108

Integrated Programming Environment

Politeknik Telkom

Mobile Application

Pilihan Ganda
5. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Aplikasi MIDlet biasanya dipaketkan ke dalam sebuah file yaitu file JAR. File ini adalah file terkompres, seperti file ZIP. Pada implementasinya, Anda dapat membuka file JAR menggunakan program dekompresor file ZIP. B. File JAR memiliki File class, Manifest file describing the contents of the archive, File manifest yang menjelaskan isi dari arsip, dan Sumber: image/icon, video, data, dll. Digunakan oleh aplikasi i. j. k. l. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

6. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Bekerja dengan Form memungkinkan Anda untuk menampilkan beberapa komponen GUI semacam daftar pilihan, masukan teks (textbox) dalam satu layar. B. Form dapat menampung komponen-komponen yang disebut item dalam satu layar. Item tersebut adalah textfield, image, date field, gauge dan choice group. Item-item tersebut merupakan implementasi dari class turunan Item(javax.microedition.lcdui.Item). e. f. g. h. 7. 1. 2. 3. 4. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah File JAR memiliki; File class Manifest file describing the contents of the archive File manifest yang menjelaskan isi dari arsip Sumber: image/icon, video, data, dll. Digunakan oleh aplikasi
109

Integrated Programming Environment

Politeknik Telkom

Mobile Application

c. d. 8. 1. 2. 3. 4. 5. 6. c. d.

1,2,3,4 1,2,3

c. d.

1,2 1

Form dapat menampung komponen-komponen yang disebut item dalam satu layar adalah : ChoiceGroup DateField Gauge Image dan ImageItem StringItem TextField 1,2,3,4,5,6 1,2,3,4,5 c. d. 1,2,5 2,3,4,5

110

Integrated Programming Environment

Politeknik Telkom

Mobile Application

Latihan
1. Multiple MIDlets dalam satu MIDlet suite Tambahkan satu MIDlet baru pada project "ProjectHello". Perlu anda catat bahwa NetBeans Mobility Pack secara otomatis menambahkan MIDlet baru pada aplikasi file JAD ketika anda menggunakan "New File..." Wizard. Multiple MIDlets dalam satu MIDlet suite menggunakan Wireless Toolkit Gunakan Sun Wireless Toolkit untuk menambahkan MIDlet baru pada aplikasi MIDlet anda.

2.

Integrated Programming Environment

111

Politeknik Telkom

Mobile Application

6

High Level User Interface I

Overview

Fungsi-fungsi untuk pembuatan antarmuka berbasis window(GUI) yang disediakan oleh MIDP terbagi atas dua level yakni highlevel dan lowlevel. Semua fungsi-fungsi untuk antarmuka berbasis window ini ditangani oleh paket javax.microedition.lcdui. Tampak pada contoh MIDlet HelloWorld pada bab sebelumnya, Anda harus mengimport paket ini. Pada level pemrograman yang lebih tinggi (highlevel), aplikasi MIDlet Anda akan lebih portabel dengan banyak perangkat handled yang berbeda. Jadi misalnya Anda mengembangkan sebuah form-form window MIDlet pada handled Motorola i_85s, jika Anda jalankan aplikasi MIDlet tersebut pada handled lain, hasilnya akan sama.

Tujuan

Pada akhir bab ini, pelajar diharapkan siswa dapat menguasai : 1. Mengetahui keuntungan dan kerugian dengan menggunakan high-level dan low-level UI classes 2. Mengetahui desain MIDlets menggunakan komponen high-level UI 3. Mengidentifikasi perbedaan sub-classes pada screen 4. Mengetahui perbedaan item-item yang dapat dimasukkan kedalam sebuah object Form 5. Mengetahui object-object high-level TextBox, DatetField, ImageItem, Gauge.

112

High Level User Interface

Politeknik Telkom

Mobile Application

6.1

MIDP User Interface
MDIP user interface didesain untuk peralatan mobile. Aplikasi MDIP ditunjukan pada area limited screen. Peralatan memory juga menjadi faktor penting jika perlengkapan mobile hanya memiliki kapasitas memory yang kecil. Dengan berbagai macam peralatan mobile, dari berbagai model mobile phones sampai PDAs, MIDP user interface telah didesain untuk lebih fleksibel dan mudah digunakan dalam berbagai macam peralatan ini. MIDP mempunyai class yang dapat menangani fungsi high-level dan low-level user interface. High-level UI interfaces didesain secara fleksibel. Penampilan dari komponen ini tidak didefinisikan secara spesifik. Penampilan screen yang sebenarnya dari berbagai macam komponen ini digunakan dari satu peralatan ke peralatan yang lain. Tetapi para programmer telah teryakinkan oleh kegunaan dari highlevel komponen UI interfaces memiliki persamaan dalam berbagai spesifikasi-pengimplementasi secara keseluruhan.

High Level UI highly portable across devices look dan feel sama dengan peralatannya Memiliki interaksi seperti scrolling yang dienkapsulasi Penampilannya tidak dapat digambarkan secara aktual Tidak memiliki akses untuk peralatan dengan feature yang spesifik

Low-Level UI Memungkinkan semua peralatan Spesifik aplikasi look and feel Pengimplementasiannya harus dengan petunjuk sendiri Penampilannya tidak dapat digambarkan Mengakses masukkan low-level hanya dengan menekan

Gambar 6.1: Perbedaan High-Level UI dengan Low-Level UI Kapan menggunakan High-Level UI  Saat membangun aplikasi text-based yang mudah  Saat Anda ingin aplikasi Anda dapat dengan mudah dipertukarkan dengan berbagai macam peralatan (Portabilitas)  Saat Anda ingin aplikasi Anda memiliki tampilan yang sama dengan komponen UI yang lain dari berbagai peralatan
High Level User Interface I 113

Politeknik Telkom

Mobile Application



Saat Anda ingin kode Anda dapat menjadi sesedikit mungkin, ketika sebuah interaksi ditangani oleh API

Kapan menggunakan Low-Level UI  Saat Anda memerlukan sebuah high-level untuk mengkontrol tampilan dari suatu aplikasi  Saat aplikasi Anda membutuhkan tempat yang tepat dari elemenelemen yang ada pada screen  Saat membuat game secara grafik; meskipun Anda tetap dapat menggunakan highlevel UI pada menu game, hal tersebut lebih disarankan untuk membuat menu UI  Anda sendiri untuk menghindari seamless atmosphere bagi para user  Saat sebuah aplikasi membutuhkan akses ke low-level yang memiliki inputan seperti key presses  Jika aplikasi Anda akan diimplementasikan pada layar navigasi Anda sendiri

6.2

Display
Inti dari MIDP user interfaces adalah display. Yang merupakan satusatunya kemudahan dari Display per MIDlet. MIDlet dapat mendapatkan referensi Display object dengan menggunakan method static Display.getDisplay(), melewatkan referensi tersebut ke MIDlet instance. MIDlet dijamin dengan display object tidak akan berubah dengan adanya eksistensi instance MIDlet. Hal ini berarti bahwa variebel dikembalikan (returned) ketika Anda memanggil getDisplay() dan tidak akan berpengaruh jika anda memenggilnya dengan startApp() atau destroyApp() (Lihat pada gambar Midlet Life Cycle).

6.2.1

Displayable Hanya satu displayable yang ditampilkan pada satu waktu. Secara langsung, displayable tidak ditampilkan pada layar. Seuabh displayable dapat ditampilkan dengan memanggil method setCurrent() dari Display instance. Method setCurrent() harus dipanggil pada saat memulai

114

High Level User Interface

Politeknik Telkom

Mobile Application

aplikasi, dengan kata lain sebuah screen kosong akan ditampilkan atau aplikasi tersebut tidak akan dijalankan.

Gambar 6.2: MIDlet Life Cycle Method startApp dari MIDlet merupakan suatu tempat dimana Anda dapat menaruh method pemanggil setCurrent(). Tetapi Anda harus mempertimbangkan bahwa dalam MIDlet startApp() dapat dipanggil lebih dari satu kali. Untuk memberhentikan MIDlet sementara waktu dapat dipause dengan memanggil fungsi pauseApp(), dengan adanya incoming call, memungkinkan startApp() dipanggil lagi (setelah ada telepon masuk). Maka dengan memanggil setCurrent() pada method pada startApp(), dan ada kemungkinan layar akan menjadi gelap (blank) pada screen displayed yang sebelumnya, sampai adanya penghentian sementara (pause by the phone call). Sebuah displayable dapat memiliki nama, beberapa perintah(command), commandListener dan Ticker. 6.2.2 Title Sebuah Displayable memiliki title yang berhubungan dengan dirinya sendiri. Posisi dan penampilan dari title tersebut merupakan piranti spesifik yang hanya dapat ditentukan oleh peralatan dari aplikasi yang sedang dijalankan. Sebuah title ditampilkan pada Displayable dengan
115

High Level User Interface I

Politeknik Telkom

Mobile Application

memanggil setTitle(). Dengan memanggil method ini maka seketika akan meng-update title pada Displayable. Jika pada saat Displayable ditampilkan pada layar, MIDP specification states menyebutkan bahwa title harus dirubah dengan implementasi “Memungkinkan untuk dilakukan dengan cepat”. Memberi parameter null pada setTitle() berarti menghapus title pada Displayable. Merubah atau menghapus sebuah title dari Displayable dapat mempengaruhi ukuran area untuk isi dari Displayable tersebut.Jika terjadi perubahan ukuran area terjadi, MIDlet akan diberitahu dengan memanggil kembali method sizeChanged(). 6.2.3 Command Dengan adanya kekurangan ukuran pada screen, MIDP tidak menggambarkan sebuah menu bar. Untuk menggantikan menu bar, MIDlet memiliki commands. Biasanya Command diimplementasikan sebagai soft key atau item dalam sebuah menu. Object Command hanya berisi informasi tentang action yang harus dikerjakan pada saat Command diaktifkan. Dia tidak berisikan kode yang akan dieksekusi pada saat Command tersebut dipilih.

Gambar 6.3: Properti dari sebuah Displayable Properti CommandListener dari Displayable berisi action yang akan dieksekusi saat Command diaktifkan. CommandListener merupakan interface yang spesifik pada singlemethod :

116

High Level User Interface

Politeknik Telkom

Mobile Application

public void commandAction(Command command, Displayable displayable)

Mapping dari Commands pada peralatan bergantung pada nomer yang telah ditetapkan atau programable button pada peralatan. Jika nomer dari Command tidak benar pada semua button, maka memungkinkan peralatan menaruh beberapa atau semua Command pada menu dan peta pada menu dan button akan diberi label “Menu”.
Command exitCommand = new Command("Exit", Command.EXIT, 1); Command newCommand = new Command("New Item", Command.OK, 1); Command renameCommand = new Command("Rename Item", Command.OK, 1); Command deleteCommand = new Command("Delete Item", Command.OK, 1); ... list.addCommand(exitCommand); list.addCommand(newCommand); list.addCommand(renameCommand); list.addCommand(deleteCommand);

Gambar 6.4: Contoh tampilan dari multiple Commands
High Level User Interface I 117

Politeknik Telkom

Mobile Application

Command memiliki sebuah short label, long label, tipe dan prioritas. Command Label Diasumsikan bahwa screen yang berukuran kecil dari target sebuah peralatan, selalu menjadi faktor ketika membangun aplikasi MIDP. Asumsi ini juga dapat diterapkan untuk Command label. Command label harus singkat, namun deskriptif, maka hal itu harus benar pada screen dan tetap dapat dipahami oleh user. Ketika long label ditentukan, hal tersebut akan ditampilkan kapan saja pada saat sebuah implementasi sistem dilihat secara sesuai. Tidak ada pemanggilan API yang menetapkan label yang akan ditampilkan. Hal tersebut juga memungkinkan bahwa sebuah Command akan menampilkan short label pada saat Command lain pada screen yang sama menampilkan long labels. Command Type
mmand.OK, Command.BACK, Command.CANCEL, Command.EXIT, Command.HELP, Command.ITEM, Command.SCREEN, Command.STOP

Command Priority Aplikasi dapat menetapkan spesifikasi Command yang penting pada priority property. Hal ini merupakan integer property dan nilai rendah yang sangat penting. Priority property juga hanya sebuah hint pada tempat dimana seharusnya Command ditempatkan. Biasanya implementasi menentukan posisi dari Command oleh tipenya. Jika terdapat lebih dari satu Command dari tipe yang sama, secara normal priority akan mempertimbangkan penempatan Command.

118

High Level User Interface

Politeknik Telkom

Mobile Application

Gambar 6.5: Tampilan Command yang berbeda pada implementasi telepon yang berbeda 6.2.4 CommandListener CommandListener merupakan interface dengan single method:
void commandAction(Command command, Displayable displayable)

Method commandAction() akan dipanggil jika Command dipilih. Variabel Command merupakan referensi Command yang telah dipilih. Tampilan merupakan Displayable (atau screen) dimana Command ditempatkan dan saat action “pilih” terjadi. CommandAction() harus dikembalikan dengan seketika, jika tidak maka pengeksekusian aplikasi akan diblock. Hal ini dikarenakan, spesifikasi MIDP tidak emerlukan implementasi untuk membuat sebuah pembatas untuk pengiriman event.

High Level User Interface I

119

Politeknik Telkom

Mobile Application

6.2.5

Ticker Ticker adalah sebuah baris dari text yang dapat discrolling secara terus-menerus pada display. Method konstruktor dari ticker menerima text string untuk ditampilkan. Hal tersebut hanya memiliki dua method lain, yaitu getter dan setter untuk text ini: String getString() dan void setString(String text). Tidak ada cara lain pada sebuah aplikasi untuk mengontrol kecepatan dan arah dari scrolling text. Scrolling tidak dapat dipause atau distop. Jika spasi diletakkan pada text, hal tersebut tidak akan ditampilkan pada layar. Semua baris text akan ditampilkan sebagai single line dari scrolling text. Sebuah ticker dapat dipasang pada Displayable dengan memanggil setTicker(). Jika ticker telah ada pada Displayable, maka akan diganti oleh ticker yang baru yang terdapat dalam parameter. Memberi parameter null pada setTicker akan mengganti semua ticker yang telah dimasukkan pada Displayable. Menghapus ticker dari Displayable dapat menyebabkan perubahan ukuran area dari isi Displayable tersebut. Jika perubahan ukuran area terjadi, maka MIDlet akan memanggil sebuah ukuran dengan method sizeChanged(). Pada ticker object Displayable boleh berbagi suatu kejadian(action).

6.2.6

Screen Screen merupakan inti abstrak class yang digunakan untuk high-level UI ketika canvas merupakan Displayable abstrak class untuk low-level UI. Berikut ini empat subclasses dari abstract class screen : Form, TextBox, List dan Alert.

120

High Level User Interface

Politeknik Telkom

Mobile Application

Gambar 6.6: Displayable Class Heirarchy 6.2.7 Item Items merupakan komponen yang dapat diletakan kedalam container, seperti Form atau Alert. Sebuah item dapat memiliki property seperti dibawah ini: Property Label Commands defaultCommand ItemCommandListener Layout directive Preferred width and height Default Value Dikelompokan pada subclass konstruktor Null Null LAYOUT_DEFAULT -1 (unlocked)

High Level User Interface I

121

Politeknik Telkom

Mobile Application

Gambar 6.7: Item Class Heirarchy Spesifikasi layout dari item dengan Form. Direktif layout dapat dikombinasikan menggunkan bitwise atau operasi (|). Bagaimanapun juga, beberapa direktif bersifat mutually exclusive. Berikut ini direktif horizontal alignment yang mutually exclusive:
LAYOUT_LEFT LAYOUT_RIGHT LAYOUT_CENTER

Berikut ini direktif vertical alignment yang juga mutually exclusive:
LAYOUT_TOP LAYOUT_BOTTOM LAYOUT_VCENTER

Berikut ini layout yang lain dari direktif (tidak mutually exclusive):
LAYOUT_NEWLINE_BEFORE LAYOUT_NEWLINE_AFTER LAYOUT_SHRINK LAYOUT_VSHRINK LAYOUT_EXPAND LAYOUT_VEXPAND LAYOUT_2

6.3

Text Box
TextBox merupakan sub-class dari screen yang dapat digunakan untuk mendapatkan input text dari user. Hal ini memperbolehkan user untuk memasukan dan mengedit text. TextBox hampir sama dengan TextField(Lihat pada item TextField) karena dia dapat memiliki input constraint dan input modes. Perbedaannya dengan TextField adalah user dapat memasukan garis baru(ketika input constraint di-set untuk semua “ANY”).

122

High Level User Interface

Politeknik Telkom

Mobile Application

Isi dari TextBox dapat diambil kembali dengan menggunakan method getString().

Gambar 6.8 :TextBox tipe ANY (multi-line)

Gambar 6.9: TextBox dengan modifikasi PASSWORD

High Level User Interface I

123

Politeknik Telkom

Mobile Application

6.4

Form
Bekerja dengan Form memungkinkan Anda untuk menampilkan beberapa komponen GUI semacam daftar pilihan, masukan teks (textbox) dalam satu layar. Form diimplementasikan oleh class javax.microedition.lcdui.Form. Form dapat menampung komponenkomponen yang disebut item dalam satu layar. Item tersebut adalah textfield, image, date field, gauge dan choice group. Item-item tersebut merupakan implementasi dari class turunan Item(javax.microedition.lcdui.Item).
public Form(String title) public Form(String title, Item[] items)

Konstruktor pertama, menyediakan sebuah form dengan judul form seperti parameter title yang diberikan, sedangkan konstruktor kedua mendefinisikan item-item apa saja yang akan ada di form yang akan dibuat. Class Item (javax.microedition.lcdui.Item) Komponen-komponen yang bisa diletakkan dalam sebuah form merupakan komponenkomponen yang memiliki class yang merupakan class turunan dari class abstract javax.microedition.lcdui.Item. Komponen-komponen tersebut adalah:  ChoiceGroup Class ini menyediakan komponen yang mirip dengan list, yakni menyediakan daftar pilihan. DateField Class ini menyediakan komponen untuk memasukkan informasi tanggal dan waktu. Gauge Class ini menyediakan komponen grafik horisontal yang biasanya digunakan untuk memberikan gambaran berapa persen proses berjalan.
High Level User Interface





124

Politeknik Telkom

Mobile Application



Image dan ImageItem Class ini menyediakan komponen grafik untuk manipulasi gambar. StringItem Class ini menyediakan komponen teks string yang tidak bisa diedit oleh pengguna. TextField Class ini menyediakan komponen untuk masukan teks string oleh pengguna.





6.5

Date Field
Komponen DateField digunakan untuk masukan tanggal dan waktu dari user. DateField dapat diisi dengan date entry(mode DATE), time entry (mode TIME) atau keduanya (mode DATE_TIME). Method getDate() mengembalikan nilai suatu item. Dia akan mengembalikan nilai null jika item tidak diinialisasi terlebih dahulu. Jika mode dari DateField adalah DATE, komponen time dari pengembalian nilai akan di-set menjadi nol. Jika modenya adalah TIME, komponen date akan di-set menjadi “Januari 1, 1970”.
dateForm = new Form("DateField Modes"); dateForm.addCommand(backCommand); dateForm.setCommandListener(this); DateField dateonly = new DateField("Birthday (DATE)", DateField.DATE); DateField timeonly = new DateField("Set Alarm (TIME)", DateField.TIME); DateField datetime = new DateField("Departure (DATE_TIME)", DateField.DATE_TIME); dateForm.append(dateonly); dateForm.append(timeonly); dateForm.append(datetime);

High Level User Interface I

125

Politeknik Telkom

Mobile Application

Gambar 6.10: mode DateField dan input screens

6.6

Image Item
ImageItem merupakan Image sederhana yang dapat dimasukan kedalam komponen, seperti Form. ImageItem menerima item layout sebagai parameter (Lihat pada bagian Item):
public ImageItem( String label, Image img, int layout, String altText)

Konstruktor yang lain menerima tampilan mode yang bertipe Item.PLAIN, Item.HYPERLINK atau Item.BUTTON (Lihat pada bagian StringItem):
public ImageItem(String label, Image image, int layout, String altText, int appearanceMode) imageForm = new Form("ImageItem"); imageForm.addCommand(backCommand); imageForm.setCommandListener(this); try { Image img = Image.createImage("/poltek.png"); ImageItem image = new ImageItem("JENI", img, Item.LAYOUT_CENTER, "poltek logo"); imageForm.append(image);
126 High Level User Interface

Politeknik Telkom

Mobile Application

} catch (Exception e){e.printStackTrace();}

File “poltek.png” sangat penting untuk dimasukan kedalam project dengan menggunakan operating system's manager dan menaruh image tersebut kedalam direktori project dibawah subdirektori “src”. Kemudian project direfresh dengan mengklik kanan nama project dan pilih “Refresh Folders”.

Gambar 6.11: ImageItem
High Level User Interface I 127

Politeknik Telkom

Mobile Application

6.7

Text Field
TextField merupakan Item dimana user dapat memasukan encode. Beberapa batasan exclusive yang dapat di-set yaitu:
TextField.ANY TextField.EMAILADDR TextField.NUMERIC TextField.PHONENUMBER TextField.URL TextField.DECIMAL

Masukan tersebut juga dapat memiliki macam-macam modifikasi:
TextField.PASSWORD TextField.UNEDITABLE TextField.SENSITIVE TextField.NON_PREDICTIVE TextField.INITIAL_CAPS_WORD TextField.INITIAL_CAPS_SENTENCE

Modifikasi dapat di-set dengan menggunakan bit-wise OR (|) operator (atau toggled menggunakan bit-wise XOR operator ^) pada input constraint. Sebagai konsekuensinya, modifikasi dapat diperoleh dari pengembalian nilai dari getConstraint() bit-wise operator AND(&). Sejak nilai modifikasi juga dikembalikan oleh getConstraint(), Masukan main constraint dapat diekstrak dengan menggunakan bit-wise operator AND dengan TextBox.CONSTAINT_mask dan nilai pengembalian dari getConstaints(). GetString() mengembalikan isi dari TextField sebagai nilai sebuah String.
textForm = new Form("TextField Types"); textForm.addCommand(backCommand); textForm.setCommandListener(this); TextField ANY = new TextField("ANY", "", 64, TextField.ANY); TextField EMAILADDR = new TextField("EMAILADDR", "", 64, TextField.EMAILADDR); TextField NUMERIC = new TextField("NUMERIC", "", 64, TextField.NUMERIC);
128 High Level User Interface

Politeknik Telkom

Mobile Application

TextField PHONENUMBER = new TextField("PHONENUMBER", "", 64, TextField.PHONENUMBER); TextField URL = new TextField("URL", "", 64, TextField.URL); TextField DECIMAL = new TextField("DECIMAL", "", 64, TextField.DECIMAL); textForm.append(ANY); textForm.append(EMAILADDR); textForm.append(NUMERIC); textForm.append(PHONENUMBER); textForm.append(URL); textForm.append(DECIMAL);

Gambar 6.12: TextField Items

High Level User Interface I

129

Politeknik Telkom

Mobile Application

6.8

Gauge
Objek Gauge merepresentasikan objek batang yang disusun secara horizontal yang dapat digunakan dalam form untuk merepresentasikan jalannya sebuah proses dan lain sebagainya. Objek Gauge diimplementasikan oleh class Gauge (javax.microedition.lcdui.Gauge) yang merupakan class turunan dari class abstract javax.microedition.lcdui.Item. Konstruktor dari class Gauge adalah:
public Gauge(String title, maxValue, int initialValue) boolean interactive, int

Paramater-parameter yang digunakan :  String title Untuk memberikan title pada gauge yang ditampilkan  boolean interactive Apakah akan ditampilkan secara interaktif atau tidak ? Jika modenya interaktif user bisa mengubah progress bar yang ada dan jika modenya tidak interaktif, user tidak bisa mengubah progress bar yang ada. Agar lebih jelasnya, Anda bisa mengacu ke contoh yang akan ditunjukkan kemudian.  int maxValue Nilai maksimum yang diperbolehkan. Nilai harus > 0  int initialValue Nilai awal yang digunakan nilainya antara 0 – nilai maksimum yang telah didefinisikan. Program di atas menghasilkan objek Gauge yang tidak interaktif. Ubah false menjadi true pada pembentukan objek Gauge
g1 = new Gauge("Ini Gauge", false, 15,1);

menjadi
g1 = new Gauge("Ini Gauge", true, 15,1);

maka menghasilkan objek Gauge yang interaktif. Dimana user bisa mengubah nilai dari objek Gauge.

130

High Level User Interface

Politeknik Telkom

Mobile Application

Gambar 6.13: Objek Gauge Anda bisa mendapatkan informasi apakah progress bar yang Anda buat bersifat interaktif atau tidak dengan menggunakan fungsi : • public boolen isInteractive() Jika dikembalikan true, progress bar bersifat interaktif. Dari objek Gauge, Anda bisa memperoleh nilai yang sedang ada sekarang, nilai maksimal yang diperbolehkan dengan fungsi-fungsi berikut: • public int getValue() Menghasilkan nilai integer dari progress bar yang ada • public int getMaxValue()

High Level User Interface I

131

Politeknik Telkom

Mobile Application

Menghasilkan nilai integer maksimum dari progress bar yang ada Selain itu Anda bisa menetapkan nilai yang sedang ada sekarang, nilai maksimal yang diperbolehkan dengan fungsi : • public void setValue(int val) Menetapkan nilai integer dari progress bar yang ada • public void setMaxValue(int maxval) Menetapkan nilai integer maksimum dari progress bar yang ada Anda juga bisa mengubah label judul dari progress bar yang ada menggunakan fungsi: • public void setLabel(String str) Menetapkan label progress bar yang ada dengan teks string pada parameter.

132

High Level User Interface

Politeknik Telkom

Mobile Application

Rangkuman

MDIP user interface didesain untuk peralatan mobile. Aplikasi MDIP ditunjukan pada area limited screen. Peralatan memory juga menjadi faktor penting jika perlengkapan mobile hanya memiliki kapasitas memory yang kecil. Dengan berbagai macam peralatan mobile, dari berbagai model mobile phones sampai PDAs, MIDP user interface telah didesain untuk lebih fleksibel dan mudah digunakan dalam berbagai macam peralatan ini. MIDP mempunyai class yang dapat menangani fungsi high-level dan low-level user interface. High-level UI interfaces didesain secara fleksibel. Penampilan dari komponen ini tidak didefinisikan secara spesifik. Penampilan screen yang sebenarnya dari berbagai macam komponen ini digunakan dari satu peralatan ke peralatan yang lain. Tetapi para programmer telah teryakinkan oleh kegunaan dari high-level komponen UI interfaces memiliki persamaan dalam berbagai spesifikasi-pengimplementasi secara keseluruhan.

High Level User Interface I

133

Politeknik Telkom

Mobile Application

Kuis Benar Salah

1. 2. 3. 4. 5. 6.

Aplikasi MDIP ditunjukan pada area limited screen. Peralatan memory juga menjadi faktor penting jika perlengkapan mobile hanya memiliki kapasitas memory yang kecil. MIDP mempunyai class yang dapat menangani fungsi high-level dan low-level user interface. Screen merupakan inti abstrak class yang digunakan untuk high-level UI ketika canvas merupakan Displayable abstrak class untuk lowlevel UI. Form diimplementasikan oleh class javax.microedition.lcdui.Form. Komponen DateField digunakan untuk masukan tanggal dan waktu dari user. DateField dapat diisi dengan date entry(mode DATE), time entry (mode TIME) atau keduanya (mode DATE_TIME). Objek Gauge diimplementasikan oleh class Gauge (javax.microedition.lcdui.Gauge) yang merupakan class turunan dari class abstract javax.microedition.lcdui.Item.

134

High Level User Interface

Politeknik Telkom

Mobile Application

Pilihan Ganda
1. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut C. Aplikasi MIDlet biasanya dipaketkan ke dalam sebuah file yaitu file JAR. File ini adalah file terkompres, seperti file ZIP. Pada implementasinya, Anda dapat membuka file JAR menggunakan program dekompresor file ZIP. D. File JAR memiliki File class, Manifest file describing the contents of the archive, File manifest yang menjelaskan isi dari arsip, dan Sumber: image/icon, video, data, dll. Digunakan oleh aplikasi m. n. o. p. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

2. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut C. Bekerja dengan Form memungkinkan Anda untuk menampilkan beberapa komponen GUI semacam daftar pilihan, masukan teks (textbox) dalam satu layar. D. Form dapat menampung komponen-komponen yang disebut item dalam satu layar. Item tersebut adalah textfield, image, date field, gauge dan choice group. Item-item tersebut merupakan implementasi dari class turunan Item(javax.microedition.lcdui.Item). i. j. k. l. 3. 1. 2. 3. 4. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah High Level UI memiliki karakteristik; highly portable across devices look dan feel sama dengan peralatannya Memiliki interaksi seperti scrolling yang dienkapsulasi Penampilannya tidak dapat digambarkan secara aktual
135

High Level User Interface I

Politeknik Telkom

Mobile Application

5. e. f. 4. 1. 2. 3. 4. e. f.

Tidak memiliki akses untuk peralatan dengan feature yang spesifik 1,2,3,4,5 1,2,3,4 c. d. 1,2,3 1,3

Kapan menggunakan High-Level UI : Saat membangun aplikasi text-based yang mudah Saat Anda ingin aplikasi Anda dapat dengan mudah dipertukarkan dengan berbagai macam peralatan (Portabilitas) Saat Anda ingin aplikasi Anda memiliki tampilan yang sama dengan komponen UI yang lain dari berbagai peralatan Saat Anda ingin kode Anda dapat menjadi sesedikit mungkin, ketika sebuah interaksi ditangani oleh API 1,2,3,4 1,2,3 c. d. 1,2,4 2,3,4

136

High Level User Interface

Politeknik Telkom

Mobile Application

Latihan

List Dinamis Buatlah sebuah MIDlet yang memiliki List IMPLICIT sebagai Screen main. Masukan tiga Command kedalam List ini - “Add Item”, “Remove Item” dan “Exit”. Comman “Add Item” akan memberikan layanan pada user untuk memasukan list menggunakan TextBox, kemudian insert item tersebut sebelum current item yang dipilih dari list. “Remove Item” akan menghapus currently selected list item (getSelectedIndex). Command “Exit” akan keluar dari program.

High Level User Interface I

137

Politeknik Telkom

Mobile Application

7

High Level User Interface II

Overview

Fungsi-fungsi untuk pembuatan antarmuka berbasis window(GUI) yang disediakan oleh MIDP terbagi atas dua level yakni highlevel dan lowlevel. Semua fungsi-fungsi untuk antarmuka berbasis window ini ditangani oleh paket javax.microedition.lcdui. Tampak pada contoh MIDlet HelloWorld pada bab sebelumnya, Anda harus mengimport paket ini. Pada level pemrograman yang lebih tinggi (highlevel), aplikasi MIDlet Anda akan lebih portabel dengan banyak perangkat handled yang berbeda. Jadi misalnya Anda mengembangkan sebuah form-form window MIDlet pada handled Motorola i_85s, jika Anda jalankan aplikasi MIDlet tersebut pada handled lain, hasilnya akan sama.

Tujuan

Pada akhir bab ini, pelajar diharapkan siswa dapat menguasai : 1. ChoiceGroup 2. List 3. Alert 4. High level user interface API

138

High Level User Interface II

Politeknik Telkom

Mobile Application

7.1

ChoiceGroup
Item Choicegroup merupakan group dari selectable choice. Sebuah choice boleh berisi sebuah text, gambar atau kedua-duanya. Choice boleh EXCLUSIVE (hanya satu pilihan yang dapat dipilih) atau MULTIPLE (banyak pilihan yang dapat dipilih pada suatu waktu). Jika ChoiceGroup bertipe POPUP, hanya satu choice yang ditampilkan. Popup selection akan ditampilkan ketika item ini dipilih. Dari popup seleksi ini, user diperbolehkan memilih pilihannya. Choice yang ditampilkan selalu choice yang dipilih. GetSelectedIndex() mengembalikan nilai index pada element dari ChoiceGroup yang dipilih. GetSelectedFlags() mengembalikan sebuah array dariboolean yang merespon elemen dari Choicegroup. isSelected(int index) mengembalikan state dari elemen yang diberikan oleh posisi index.
choiceForm = new Form("Choice Group Types"); choiceForm.addCommand(exitCommand); choiceForm.setCommandListener(this); choiceExclusive = new ChoiceGroup("Exclusive", Choice.EXCLUSIVE); choiceExclusive.append("Male", null); choiceExclusive.append("Female", null); choiceForm.append(choiceExclusive); choiceMultiple = new ChoiceGroup("Multiple", Choice.MULTIPLE); choiceMultiple.append("Apple", null); choiceMultiple.append("Orange", null); choiceMultiple.append("Grapes", null); choiceForm.append(choiceMultiple); choicePopup = new ChoiceGroup("Popup", Choice.POPUP); choicePopup.append("Asia", null); choicePopup.append("Europe", null); choicePopup.append("Americas", null); choiceForm.append(choicePopup);

High Level User Interface II

139

Politeknik Telkom

Mobile Application

Gambar 7.1: Tipe dari Choice Group

7.2

List
List merupakan subclass dari screen yang berisi sebuah daftar dari suatu pilihan. Sebuah list dapat dibagi menjadi tiga tipe: IMPLICIT, EXCLUSIVE atau MULTIPLE. Jika List bertipe IMPLICIT dan user mengeksekusi tombol “select”, commandAction() dari list commandListener akan dipanggil. Default perintahnya adalah list.SELECT_COMMAND. Untuk tipe IMPLICIT dan EXCLUSIVE, GetSelectedIndex() mengembalikan index dari element yang dipilih. Untuk tipe MULTIPLE, getSelectedFlags() mengembalikan sebuah array dari boolean yang berisi state dari elemen-elemen. isSelected(int index) mengembalikan state dari elemen dalam pemberian posisi index.

140

High Level User Interface II

Politeknik Telkom

Mobile Application

Gambar 7.2: Tipe-tipe List
High Level User Interface II 141

Politeknik Telkom

Mobile Application

7.3

Alert
Alert merupakan sebuah screen yang dapat menampilkan text dan gambar. Alert merupakan komponen untuk menampilkan error dan warning, display text dan informasi gambar atau untuk mendapatkan informasi dari user. Alert ditampilkan untuk spesifikasi peeriode dari waktu. Waktu di-set menggunakan method setTimeout() dan method tersebut dispesifikasikan dalam unit millliseconds. Hal tersebut dapat dibuat untuk ditampilkan hingga user mengaktifkan perintah (“Done”) dengan menspesifikasikan spesial timeout dari Alert.FOREVER. Alert juga dapat menampilkan komponen Gauge (Lihat pada Gauge item) sebagai indikator. Ketika alert berisi text yang tidak sesuai dengan screenful dan harus discroll, maka secara otomatis alert menge-set ke modal(timeout di set kepada Alert.FOREVER).

142

High Level User Interface II

Politeknik Telkom

Mobile Application

High Level User Interface II

143

Politeknik Telkom

Mobile Application

Gambar 7.3: Perbedaan tipe-tipe Alert.

7.4

String Item
StringItem merupakan komponen read-only. Dia terdiri dari label dan text. Secara bebas StringItem menerima tampilan mode parameter. Tampilan dari mode dapat berupa Item.PLAIN, Item.HYPERLINK atau Item.BUTTON. Jika tampilan sebuah mode bertipe HYPERLINK atau BUTTON, default Command dan ItemCommandListener harus di-set didalam Item.
stringForm = new Form("StringField Modes"); stringForm.addCommand(exitCommand);

144

High Level User Interface II

Politeknik Telkom

Mobile Application

stringForm.setCommandListener(this); StringItem plain = new StringItem("Plain", "Plain Text", Item.PLAIN); StringItem hyperlink = new StringItem("Hyperlink", "http://www.sun.com", Item.HYPERLINK); hyperlink.setDefaultCommand(new Command("Set", Command.ITEM, 0)); hyperlink.setItemCommandListener(this); StringItem button = new StringItem("Button", "Click me", Item.BUTTON); button.setDefaultCommand(new Command("Set", Command.ITEM, 0)); button.setItemCommandListener(this); stringForm.append(plain); stringForm.append(hyperlink); stringForm.append(button);

Gambar 7.4: StringItem

7.5

Jenis Fungsi-Fungsi API pada MIDP untuk GUI
Untuk menampilkan sesuatu pada layar misalnya tulisan, form dan sebagainya Anda harus mengakses display dari handled yang dapat diakses dengan class javax.microedition.lcdui.Display. Objek kedua

High Level User Interface II

145

Politeknik Telkom

Mobile Application

adalah screen yang berbeda dengan display. Screen digunakan untuk menangani komponen-komponen GUI, misalnya window, form, dialogbox dan menangani masukan dari pengguna misalnya dari keypad. Objek screen ini direpresentasikan dengan class javax.microedition.lcdui.Screen. Pada setiap waktu hanya satu objek screen yang bisa ditampilkan oleh objek Display, untuk menampilkan digunakan fungsi setCurrent() pada objek Dispaly.

Gambar 7.5 : paket pada javax.microedition dan javax.microedition.lcdui.game Ada 3 tipe screen pada MIDlet yaitu: • Complex Screen Object Tipe ini mengatur komponen-komponen GUI yang sudah tidak bisa ditambahi oleh komponen screen yang lain. Misalnya screen yang berisi objek ListBox untuk meminta masukan user, tidak akan bisa diisi dengan objek lain. • Generic Screen Object Tipe ini mengatur komponen-komponen GUI Form, yang bisa ditambahi oleh komponen screen yang lain. Misalnya screen yang berisi objek Form, maka Anda kemudian bisa menambahkan komponen-komponen lain pada Form tersebut. • Low Level Screen Object, yakni yang digunakan oleh subclass javax.microedition.lcdui.Graphics dan javax.microedition.lcdui.Screen
146 High Level User Interface II

Politeknik Telkom

Mobile Application

Rangkuman

MDIP user interface didesain untuk peralatan mobile. Aplikasi MDIP ditunjukan pada area limited screen. Peralatan memory juga menjadi faktor penting jika perlengkapan mobile hanya memiliki kapasitas memory yang kecil. Dengan berbagai macam peralatan mobile, dari berbagai model mobile phones sampai PDAs, MIDP user interface telah didesain untuk lebih fleksibel dan mudah digunakan dalam berbagai macam peralatan ini. MIDP mempunyai class yang dapat menangani fungsi high-level dan low-level user interface. High-level UI interfaces didesain secara fleksibel. Penampilan dari komponen ini tidak didefinisikan secara spesifik. Penampilan screen yang sebenarnya dari berbagai macam komponen ini digunakan dari satu peralatan ke peralatan yang lain. Tetapi para programmer telah teryakinkan oleh kegunaan dari high-level komponen UI interfaces memiliki persamaan dalam berbagai spesifikasi-pengimplementasi secara keseluruhan. Untuk menampilkan sesuatu pada layar misalnya tulisan, form dan sebagainya Anda harus mengakses display dari handled yang dapat diakses dengan class javax.microedition.lcdui.Display. Objek kedua adalah screen yang berbeda dengan display. Screen digunakan untuk menangani komponen-komponen GUI, misalnya window, form, dialogbox dan menangani masukan dari pengguna misalnya dari keypad.

High Level User Interface II

147

Politeknik Telkom

Mobile Application

Kuis Benar Salah

1.

Item Choicegroup merupakan group dari selectable choice. Sebuah choice boleh berisi sebuah text, gambar atau kedua-duanya. 2. Choice boleh EXCLUSIVE (hanya satu pilihan yang dapat dipilih) atau MULTIPLE (banyak pilihan yang dapat dipilih pada suatu waktu). 3. List merupakan subclass dari screen yang berisi sebuah daftar dari suatu pilihan. Sebuah list dapat dibagi menjadi tiga tipe: IMPLICIT, EXCLUSIVE atau MULTIPLE. 4. Jika List bertipe IMPLICIT dan user mengeksekusi tombol “select”, commandAction() dari list commandListener akan dipanggil. Default perintahnya adalah list.SELECT_COMMAND. 5. Alert merupakan sebuah screen yang dapat menampilkan text dan gambar. 6. Alert merupakan komponen untuk menampilkan error dan warning, display text dan informasi gambar atau untuk mendapatkan informasi dari user. 7. Alert juga dapat menampilkan komponen Gauge sebagai indikator. 8. StringItem merupakan komponen read-only. Dia terdiri dari label dan text. 9. Secara bebas StringItem menerima tampilan mode parameter. Tampilan dari mode dapat berupa Item.PLAIN, Item.HYPERLINK atau Item.BUTTON. Jika tampilan sebuah mode bertipe HYPERLINK atau BUTTON, default Command dan ItemCommandListener harus di-set didalam Item. 10. Screen digunakan untuk menangani komponen-komponen GUI, misalnya window, form, dialogbox dan menangani masukan dari pengguna misalnya dari keypad. 11. Objek screen ini direpresentasikan dengan class javax.microedition.lcdui.Screen. 12. Ada 3 tipe screen pada MIDlet yaitu Complex Screen Object, Generic Screen Object, Low Level Screen Object, yakni yang digunakan oleh subclass.

148

High Level User Interface II

Politeknik Telkom

Mobile Application

Pilihan Ganda
5. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Item Choicegroup merupakan group dari selectable choice. Sebuah choice boleh berisi sebuah text, gambar atau kedua-duanya. B. Choice boleh EXCLUSIVE (hanya satu pilihan yang dapat dipilih) atau MULTIPLE (banyak pilihan yang dapat dipilih pada suatu waktu). q. r. s. t. 6. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Secara bebas StringItem menerima tampilan mode parameter. Tampilan dari mode dapat berupa Item.PLAIN, Item.HYPERLINK atau Item.BUTTON. Jika tampilan sebuah mode bertipe HYPERLINK atau BUTTON, default Command dan ItemCommandListener harus di-set didalam Item. B. StringItem merupakan komponen read-only. Dia terdiri dari label dan text. m. n. o. p. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

7.

Ada 3 tipe screen pada MIDlet yaitu; 1. Complex Screen Object 2. Generic Screen Object 3. Low Level Screen Object, yakni yang digunakan oleh subclass. g. h. 1,2,3 1,2 c. 1,2 d.

2,3

High Level User Interface II

149

Politeknik Telkom

Mobile Application

8.

Secara bebas StringItem menerima tampilan mode parameter. Tampilan dari mode dapat berupa : 5. Item.PLAIN 6. Item.HYPERLINK 7. Item.BUTTON g. h. 1,2,3 3,2 c. 1,2 d. 3

Latihan

1. 2.

Buatlah program ChoiceGroup untuk pemilihan agama dari lima jenis agama (Islam, Kristen, Protestan, Budha, Hindu) Buatlah program List untuk menampilkan daftar jenis warna dasar (merah, kuning, biru).

150

High Level User Interface II

Politeknik Telkom

Mobile Application

8

Low Level User Interface I

Overview

Fungsi-fungsi untuk pembuatan antarmuka berbasis window(GUI) yang disediakan oleh MIDP terbagi atas dua level yakni highlevel dan lowlevel. Semua fungsi-fungsi untuk antarmuka berbasis window ini ditangani oleh paket javax.microedition.lcdui. Tampak pada contoh MIDlet HelloWorld pada bab sebelumnya, Anda harus mengimport paket ini. Pada level pemrograman yang lebih rendah (lowlevel), Anda akan mendapatkan fungsional yang lebih spesifik ke jenis handled yang digunakan. Hal ini memungkinkan kurangnya portabilitas MIDlet yang Anda buat, misalnya Anda membuat MIDlet pada handled Motorola i_85s, MIDlet tersebut belum tentu bisa dijalankan dengan baik pada handled lain. Mirip sekali pada game-game pada handphone Nokia 5110, misalnya Snake yang jika dicoba pada handphone Ericsson T10S tidak akan jalan. Class-class untuk pemrograman GUI pada level yang lebih rendah ini diimplementasikan oleh class javax.microedition.lcdui.Canvas dan javax.microedition.lcdui.Graphics.

Tujuan

Pada akhir bab ini, pelajar diharapkan siswa dapat menguasai : 1. Memahami event handling level rendah dalam MIDP 2. Menggambar dan menampilkan teks, gambar, garis, kotak, dan sudut 3. Menentukan warna, huruf, dan coretan untuk operasi menggambar 4. Memahami dan menggunakan class Canvas dan Graphic

Low Level User Interface I

151

Politeknik Telkom

Mobile Application

8.1

Pengenalan
Pada bab sebelumnya, kita telah membahas tentang bagaimana cara membuat user interface level tinggi seperti list, form, dan field input. Mereka bersifat user interface level tinggi dan programmer tidak perlu khawatir tentang menggambar pixel layar atau mengatur posisi teks pada layar. Semua program telah menetapkan jenis komponen dan label elemen. Sistem tersebut akan menangani gambar pada layar, scrolling dan layout. Satu kelemahan ketika hanya menggunakan komponen user interface level tinggi adalah program tidak memiliki kendali penuh sebuah layar. Ada saat dimana kita ingin menggambar sebuah garis, gambar beranimasi dan mempunyai kendali untuk mengatur pixel pada layar. Pada bab ini, kita akan berhadapan langsung dengan layar. Kita akan mempelajari class Canvas, dimana akan menjadi pendukung dari proses menggambar kita. Kita juga akan menyelidiki ke dalam class Graphic, dimana memiliki metode untuk menggambar garis, kotak, sudut, dan teks. Kita juga akan membahas huruf, warna dan gambar.

8.2

Canvas
Canvas adalah subclass dari Displayable. Itu adalah sebuah class abstrak yang harus di-extend sebelum sebuah aplikasi dapat menggunakan fungsi-fungsi yang ada. Canvas dapat digabungkan dengan subclass Displayable level tinggi yaitu Screen. Program dapat pindah ke dan dari Canvas dan Screen. Canvas menggambarkan metode-metode event handling kosong. Aplikasi harus mengesampingkan mereka untuk handle event. Class Canvas menggambarkan sebuah metode abstrak yang disebut paint(). Aplikasi menggunakan class Canvas harus menyediakan sebuah implementasi untuk metode paint().

152

Low Level User Interface I

Politeknik Telkom

Mobile Application

8.2.1

Sistem Koordinat Sistem koordinat dari Canvas adalah berbasis nol. Koordinat x dan y dimulai dengan nol. Pojok kiri atas dari Canvas berkoordinat (0,0). Koordinat x bertambah dari kiri ke kanan. Sedangkan koordinat y bertambah dari atas ke bawah. Metode getWidth() dan getHeight() mengembalikan nilai lebar dan tinggi berturut-turut. Pojok kanan bawah pada layar memiliki koordinat getWidth()1,getWidth()-1). Setiap perubahan yang terjadi pada ukuran yang diberikan untuk area menggambar pada Canvas dilaporkan kepada aplikasi oleh metode sizeChanged(). Ukuran yang tersedia pada Canvas mungkin saja berubah jika ada pergantian antara mode layar full dan normal atau penambahan dan pengurangan sebuah komponen seperti Command.

Gambar 8.1: Sistem Koordinat

Low Level User Interface I

153

Politeknik Telkom

Mobile Application

8.2.2

”Hello,World!”

Gambar 8.2: Hello World MIDlet menggunakan canvas

154

Low Level User Interface I

Politeknik Telkom

Mobile Application

Dengan midlet “Hello,World!”, kita membuat sebuah class yang berextend Canvas
class HelloCanvas extends Canvas implements CommandListener {

Kemudian kita menambahkan perintah (“Exit”) dan mengatur command listener nya.
addCommand(exitCommand); setCommandListener(this);

Low Level User Interface I

155

Politeknik Telkom

Mobile Application

Kita menciptakan command listener dengan mengimplementasikan class CommandListener. Ini berarti membuat class yang memiliki metode commandAction.
class HelloCanvas extends Canvas implements CommandListener { ... public void commandAction(Command c, Displayable d) { ...

Inti dari program ini adalah metode paint(). Set pertama dari pemanggilan metode adalah membersihkan layar.
g.setColor(255, 255, 255 ); g.fillRect(0, 0, getWidth(), getHeight());

Dan kemudian grafik memanggil metode drawString() untuk menampilkan “Hello,World!” pada layar : // mengatur warna tulisan dengan warna hitam
g.setColor(0, 0, 0);

// dan menulis sebuah text
g.drawString(text, getWidth()/2, getHeight()/2, Graphics.TOP | Graphics.HCENTER);

8.2.3

Perintah Seperti halnya list, textBox, dan form, Canvas juga mempunyai Command yang disediakan dan dapat merespon untuk event Command. Langkah-langkah untuk menambahkan Command ke dalam Canvas adalah sama : 1. Buatlah objek Command.
private Command exitCommand = new Command("Exit", Command.EXIT, 0);

2.

Gunakan useCommand() untuk menambahkan perintah ke dalam canvas(atau Form, list, text box)
addCommand(exitCommand);
Low Level User Interface I

156

Politeknik Telkom

Mobile Application

3.

Gunakan setCommandListener() untuk mendaftarkan class mana yang akan mendapat event command untuk perintah dalam Displayable.
setCommandListener(this);

4.

Buatlah sebuah commandListener dengan mengimplementasikan class commandListener dan menyediakan sebuah metode commandAction().
class HelloCanvas extends Canvas implements CommandListener { ... public void commandAction(Command c, Displayable d) { if (c == exitCommand) { // do something } }

8.3

Grafik
Class Graphic adalah class utama untuk menulis teks, menggambar, garis, kotak dan sudut. Dia memiliki metode untuk menentukan warna, huruf, dan coretan.

8.3.1

Warna Class Display memiliki metode untuk menentukan apakah sebuah perangkat memiliki fasilitas yang mendukung layar berwarna atau layar monochrome pada sebuah perangkat. public boolean isColor() public int numColors() Mengembalikan nilai true jika mendukung layar berwarna dan sebaliknya. Mengembalikan nomor warna(atau level abu-abu jika sebuah perangkat tidak mendukung warna) yang didukung sebuah perangkat

Low Level User Interface I

157

Politeknik Telkom

Mobile Application

Untuk mengatur warna yang digunakan untuk metode grafik berikutnya, gunakan metode setColor(). SetColor() memiliki dua bentuk: public void setColor(int red, int green, int blue) public void setColor(int RGB) Pada bentuk pertama, Anda menentukan komponen warna merah, hijau, dan biru. Pada bentuk kedua komponen warna ditentukan dalam bentuk 0x00RRGGBB. Pemanggilan setColor(int) pada contoh berikut akan melakukan hal yang sama:
int red, green, blue; ... setColor(red, green, blue); setColor( (red<<16) | (green<<8) | blue );

Metode lainnya untuk memanipulasi warna adalah : public int getColor() public int getRedComponent() public int getGreenComponent() public int getBlueComponent() public int getColor() Mengembalikan warna terbaru dalam bentuk integer. Mengembalikan komponen merah sebagai warna terbaru Mengembalikan komponen hijau sebagai warna terbaru Mengembalikan komponen biru sebagai Mengembalikan warna terbaru dalam bentuk integer. warna terbaru Mengembalikan nilai abu-abu sebagai warna terbaru Memilih nilai abu-abu untuk mengganti operasi menggambar

public int getGrayScale() public void setGrayScale(int value)

158

Low Level User Interface I

Politeknik Telkom

Mobile Application

8.3.2

Huruf Sebuah huruf memiliki tiga atribut yaitu bentuk, type, dan ukuran. Huruf tidak diciptakan oleh aplikasi. Sebagai antinya, sebuah aplikasi meminta sistem untuk memilih model atribut huruf dan sistem mengembalikan huruf yang sesuai dengan model atribut yang diminta. Sistem tidak menjamin akan mengembalikan semua atribut huruf yang dipili. Jika sistem tidak memiliki huruf yang sesuai dengan permintaan, dia akan mengembalikan sebuah huruf hampir mirip dengan atribut yang diminta.

Huruf adalah sebuah class yang terpisah. Seperti yang dinyatakan di atas, aplikasi tidak menciptakan objek huruf. Sebagai gantinya, metodemetode statis getFont() dan getDefaultFont() digunakan untuk meminta sebuah huruf dari sistem. public static Font Mengembalikan sebuah huruf getFont(int face, int style, int size) dari sistem yang sesuai dengan atribut public static Font getDefaultFont() Mengembalikan huruf default yang digunakan oleh sistem public static Font getFont(int fontSpecifier) Mengembalikan huruf yang digunakan untuk komponen UI level tinggi. FontSpecifier bisa jadi : FONT_INPUT_TEXT Atau FONT_STATIC_TEXT Face adalah salah satu dari FACE_SYSTEM, FACE_MONOSPACE, atau FACE_PROPORTIONAL. Style bisa jadi STYLE_PLAIN atau kombinasi STYLE_BOLD, STYLE_ITALIC dan STYLE_UNDERLINED. Kombinasi style ditentukan oleh penggunaan bitwise operator OR (|). Sebuah style huruf tebal(bold) dan garis miring(italic) dideklarasikan sebagai: STYLE_BOLD | STYLE_ITALIC
Low Level User Interface I 159

Politeknik Telkom

Mobile Application

Ukuran huruf bisa jadi : SIZE_SMALL, SIZE_MEDIUM, SIZE_LARGE Metode ini mengembalikan atribut huruf tertentu: public int getStyle() public int getFace() public int getSize() public boolean isPlain() public boolean isBold() public boolean isItalic() public boolean isUnderlined() 8.3.3 Style Coretan Metode setStrokeStyle(int style) menetapkan style coretan bahwa akan digunakan untuk menggambar garis, sudut, dan kotak. Style coretan tidak mempengaruhi teks, gambar, dan operasi mewarnai. public void setStrokeStyle(int style) public int getStrokeStyle() Mengatur style coretan untuk menggambar garis, sudut, kotak, dll Mengembalikan style coretan terbaru

Nilai valid untuk style adalah SOLID dan DOTTED. 8.3.4 Menggambar garis Satu-satunya metode grafik untuk menggambar garis didefinisikan sebagai : public void drawLine(int x1, int y1, int x2, int y2) Metode ini menggambar sebuah garis menggunakan warna yang tersedia dan coretan antara koordinat (x1,y1) dan (x2,y2). g.setColor(255, 0, 0); // red // garis dari pojok kiri atas ke pojok kanan bawah layar g.drawLine(0, 0, getWidth()-1, getHeight()-1); g.setColor(0, 255, 0); // green
160 Low Level User Interface I

Politeknik Telkom

Mobile Application

// garis horisontal pada tengah layar g.drawLine(0, getHeight()/2, getWidth()-1, getHeight()/2); g.setColor(0, 0, 255); // blue // garis horisontal pada bawah layar g.drawLine(0, getHeight()-1, getWidth()-1, getHeight()-1); g.setColor(0, 0, 0); // black // garis dari pojok kiri bawah ke pojok kanan atas layar g.drawLine(0, getHeight()-1, getWidth()-1, 0);

Gambar 8. 5: Hasil menggambar garis

Low Level User Interface I

161

Politeknik Telkom

Mobile Application

8.3.5

Menggambar kotak Metode grafik untuk menggambar kotak adalah :
public void height) public void int height, public void height) public void int height, drawRect(int x, int y, int width, int drawRoundRect(int x, int y, int width, int arcWidth, int arcHeight) fillRect(int x, int y, int width, int fillRoundRect(int x, int y, int width, int arcWidth, int arcHeight)

Metode drawRect() menggambar sebuah kotak dengan pojok kiri atas pada koordinat (x,y) dan luas area (width+1 x height+1). Parameter yang sama ada bersama drawRoundRect(). Parameter tambahan arcWidth dan arcHeight adalah diameter horisontal dan vertikal dari busur dari keempat sudut. Jika Anda akan mengenali, definisi drawRect dan drawRoundRect menetapkan lebar dari kotak yang digambar pada layar adalah dengan width+1 dan tingginya dengan height+1. Hal ini sangat tidak intuitif, tetapi seperti itulah spesifikasi MIDP menggambarkan metode ini. Untuk meng-agravate tidak konsistensi dari “off-byone” ini, metode fillRect dan fillRoundRect hanya mengisi sebuah area kotak (width x height). Anda akan melihat ketidakcocokan ini jika anda memasukkan parameter yang sama untuk drawRect dan fillRect (dan drawRoundRect vs fillRoundRect). Sisi kanan dan bawah dari kotak digambar oleh kepalsuan drawRect di luar area yang diisi oleh fillRect.
// menggunakan tinta hitam untuk drawRect g.setColor(0, 0, 0); g.drawRect(8, 8, 64, 32); // menggunakan tinta kuning untuk fillrect // untuk menampilkan perbedaan antara drawRect dan fillrect g.setColor(255, 255, 0); g.fillRect(8, 8, 64, 32);

162

Low Level User Interface I

Politeknik Telkom

Mobile Application

Gambar 8.6: hasil dari penggunaan parameter yang sama untuk drawRect dan fillRect
// mewarnai warna pena dengan warna hitam g.setColor(0, 0, 0); // menggambar kotak pada (4,8) dengan lebar 88 dan tinggi 44 // kotak pada kiri atas g.drawRect(4,8,88,44); // elips pada kanan atas g.drawRoundRect(108,8,88,44,18,18); // kotak pada kiri bawah g.fillRect(4,58,88,44); // elips pada kanan bawah g.fillRoundRect(108,58,88,44,18,18);

Low Level User Interface I

163

Politeknik Telkom

Mobile Application

Gambar 8.7: drawRect(), fillRect(), drawRoundRect(), dan fillRoundRect() 8.3.6 Menggambar Sudut Metode untuk menggambar bundar atau eclips adalah : public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) Menggambar arc dengan pusat pada (x,y) dan dimensi (width+1 x height+1). Arc digambar mulai dari startAngle dan extend untuk derajat arcAngle. 0 derajat terletak pada jarum jam 3. Mewarnai bidang bundar dan eclips yang telah dibuat dengan warna yang tersedia.
Low Level User Interface I

public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)

164

Politeknik Telkom

Mobile Application

g.setColor(255, 0, 0); g.drawArc(18, 18, 50, 50, 0, 360); // menggambar sebuah lingkaran g.setColor(0, 255, 0); g.drawArc(40, 40, 100, 120, 0, 180); g.setColor(0, 0, 255); g.fillArc(100, 200, 80, 100, 0, 90);

Gambar 8.8: Hasil pemanggilan metode drawArc dan fillArc

Low Level User Interface I

165

Politeknik Telkom

Mobile Application

8.3.7

Melukis gambar Gambar digambar dengan metode drawImage() drawImage(Image img, int x, int y, int anchor). public void

Selama dengan drawString, x dan y adalah koordinat titik anchor. Perbedaannya adalah bahwa vertikal anchor tetap adalah VCENTER yang berdasar BASELINE. Anchor harus berupa kombinasi dari horizontal constant(LEFT, HCENTER atau RIGHT) dan vertical constant (TOP,VCENTER atau BOTTOM). Horizontal dan Vertical Constants dikombinasikan dengan menggunakan operator bitwise OR(|).

Gambar 8.9: Image Anchor Points
166 Low Level User Interface I

Politeknik Telkom

Mobile Application

try { Image image = Image.createImage("/jedi.png"); g.drawImage(image, getWidth()/2, getHeight()/2, Graphics.VCENTER | Graphics.HCENTER); } catch (Exception e){}

Gambar 8.11: Output dari drawImage()

Low Level User Interface I

167

Politeknik Telkom

Mobile Application

Rangkuman

Paket javax.microedition.lcdui juga menyediakan fungsi-fungsi yang memungkinkan kita untuk menggambar garis, titik dan elemen-elemen dasar lain dengan menggunakan class Canvas. Class Canvas merupakan class yang menyediakan fungsi-fungsi untuk manajemen antarmuka pada level rendah handled. Class ini merupakan class abstract sehingga kita harus membuat class turunannya dulu untuk melakukan manajemen antarmuka pada level rendah. Class Canvas merupakan class abstract sekaligus turunan dari class Displayable. Penggunaan class Canvas umumnya bersamaan dengan class Graphics. Class Graphics yang menyediakan objek-objek Grafik dan fungsi-fungsi untuk memanipulasi grafik level rendah. Pada bab Low Level User Interface ini diharapkan siswa dapat menguasai : 1. Memahami event handling level rendah dalam MIDP 2. Menggambar dan menampilkan teks, gambar, garis, kotak, dan sudut 3. Menentukan warna, huruf, dan coretan untuk operasi menggambar 4. Memahami dan menggunakan class Canvas dan Graphic

168

Low Level User Interface I

Politeknik Telkom

Mobile Application

Kuis Benar Salah

1. 2. 3. 4. 5. 6.

7.

Satu kelemahan ketika hanya menggunakan komponen user interface level tinggi adalah program tidak memiliki kendali penuh sebuah layar. Sistem koordinat dari Canvas adalah berbasis nol. Koordinat x dan y dimulai dengan nol. Pojok kiri atas dari Canvas berkoordinat (0,0). Koordinat x bertambah dari kiri ke kanan. Sedangkan koordinat y bertambah dari atas ke bawah. Metode getWidth() dan getHeight() mengembalikan nilai lebar dan tinggi berturut-turut. Class Graphic adalah class utama untuk menulis teks, menggambar, garis, kotak dan sudut. Dia memiliki metode untuk menentukan warna, huruf, dan coretan. Class Display memiliki metode untuk menentukan apakah sebuah perangkat memiliki fasilitas yang mendukung layar berwarna atau layar monochrome pada sebuah perangkat. Huruf adalah sebuah class yang terpisah. Seperti yang dinyatakan di atas, aplikasi tidak menciptakan objek huruf. Sebagai gantinya, metode-metode statis getFont() dan getDefaultFont() digunakan untuk meminta sebuah huruf dari sistem. Metode setStrokeStyle(int style) menetapkan style coretan bahwa akan digunakan untuk menggambar garis, sudut, dan kotak. Style coretan tidak mempengaruhi teks, gambar, dan operasi mewarnai.

Low Level User Interface I

169

Politeknik Telkom

Mobile Application

Pilihan Ganda
1. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Satu kelemahan ketika hanya menggunakan komponen user interface level tinggi adalah program tidak memiliki kendali penuh sebuah layar. B. Sistem koordinat dari Canvas adalah berbasis nol. Koordinat x dan y dimulai dengan nol. Pojok kiri atas dari Canvas berkoordinat (100,100). u. v. w. x. 2. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Class Graphic adalah class utama untuk menulis teks, menggambar, garis, kotak dan sudut. Dia memiliki metode untuk menentukan warna, huruf, dan coretan. B. Class Display memiliki metode untuk menentukan apakah sebuah perangkat memiliki fasilitas yang mendukung layar berwarna atau layar monochrome pada sebuah perangkat. q. r. s. t. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

170

Low Level User Interface I

Politeknik Telkom

Mobile Application

3.

Karakteristik dari Low Level UI adalah ; 1. Memungkinkan semua peralatan 2. Spesifik aplikasi look and feel 3. Pengimplementasiannya harus dengan petunjuk sendiri 4. Penampilannya tidak dapat digambarkan 5. Mengakses masukkan low-level hanya dengan menekan i. j. 1,2,3 1,2,4 c. d. 1,2,3,4 1,2,3,4,5

4.

Kapan kita harus menggunakan Low Level UI: 1. Saat Anda memerlukan sebuah high-level untuk mengkontrol tampilan dari suatu aplikasi 2. Saat aplikasi Anda membutuhkan tempat yang tepat dari elemenelemen yang ada pada screen 3. Saat membuat game secara grafik; meskipun Anda tetap dapat menggunakan highlevel UI pada menu game, hal tersebut lebih disarankan untuk membuat menu UI 4. Anda sendiri untuk menghindari seamless atmosphere bagi para user 5. Saat sebuah aplikasi membutuhkan akses ke low-level yang memiliki inputan seperti key presses 6. Jika aplikasi Anda akan diimplementasikan pada layar navigasi Anda sendiri i. j. 1,2,3,4 3,4,5,6 c. d. 1,2,3,4,5,6 1,2,3,4,5

Low Level User Interface I

171

Politeknik Telkom

Mobile Application

Latihan

Key Codes Buatlah sebuah MIDlet yang akan menampilkan kode dan nama dari tombol yang ditekan oleh user. Gunakan sebuah Canvas dan tempatkan keterangan kode dan nama tepat di tengah dari tampilan pada layer.

172

Low Level User Interface I

Politeknik Telkom

Mobile Application

9

Low Level User Interface II

Overview

Fungsi-fungsi untuk pembuatan antarmuka berbasis window(GUI) yang disediakan oleh MIDP terbagi atas dua level yakni highlevel dan lowlevel. Semua fungsi-fungsi untuk antarmuka berbasis window ini ditangani oleh paket javax.microedition.lcdui. Tampak pada contoh MIDlet HelloWorld pada bab sebelumnya, Anda harus mengimport paket ini. Pada level pemrograman yang lebih rendah (lowlevel), Anda akan mendapatkan fungsional yang lebih spesifik ke jenis handled yang digunakan. Hal ini memungkinkan kurangnya portabilitas MIDlet yang Anda buat, misalnya Anda membuat MIDlet pada handled Motorola i_85s, MIDlet tersebut belum tentu bisa dijalankan dengan baik pada handled lain. Mirip sekali pada game-game pada handphone Nokia 5110, misalnya Snake yang jika dicoba pada handphone Ericsson T10S tidak akan jalan. Class-class untuk pemrograman GUI pada level yang lebih rendah ini diimplementasikan oleh class javax.microedition.lcdui.Canvas dan javax.microedition.lcdui.Graphics.

Tujuan

Pada akhir bab ini, pelajar diharapkan siswa dapat menguasai : 1. Memahami dan menggunakan The Graphics Clip, Rendering Text, Images, dan Event Handling 2. Multithreading and the User Interface 3. Mengetahui bagaimana menggunakan GAME API 4. Menggambar grafik berskala

Low Level User Interface I

173

Politeknik Telkom

Mobile Application

9.1

Event key
Subclass dari Canvas dapat merespon sebuah event tombol dengan metode-metode sebagai berikut : keyPressed(int keyCode) keyRepeated(int keyCode) keyReleased(int keyCode) Dipanggil ketika kunci ditekan Dipanggil ketika kunci diulang Dipanggil ketika kunci dilepas

Canvas mendefinisikan kode tombol ini : KEY_NUM0, KEY_NUM1, KEY_NUM2, KEY_NUM3, KEY_NUM4, KEY_NUM5, KEY_NUM6, KEY_NUM7, KEY_NUM8, KEY_NUM9, KEY_STAR, and KEY_POUND. Untuk mendapatkan “String” nama sebuah kunci, gunakan metode getKeyName(int keyCode).

9.2

Aksi Permainan
Masing-masing kode tombol bisa dipetakan menjadi sebuah aksi game. Sebuah key code bisa dipetakan kepada aksi sebuah game. Class Canvas mendefinisikan aksi game ini : UP, DOWN, LEFT, RIGHT, FIRE, GAME_A, GAME_B, GAME_C, GAME_D. Sebuah program dapat menerjemahkan sebuah key code ke dalam aksi game menggunakan metode getGameAction(keyCode). Metode getKeyCode(int gameAction) mengembalikan key code yang berkaitan dengan suatu aksi game. Sebuah aksi game dapat memiliki lebih dari satu key code yang berkaitan dengannya. Jika terdapat lebih dari satu key code yang berkaitan dengan aksi game, hanya satu key code yang akan dikembalikan. Sebuah aplikasi perlu menggunakan getGameAction(int keyCode) daripada langsung menggunakan kode tombol yang telah didefinisikan. Secara normal, jika suatu program ingin merespon kunci “UP”, sebaiknya menggunakan kunci KEY_NUM2 atau key code yang spesifik untuk tombol UP. Program menggunakan metode ini tidaklah portable

174

Low Level User Interface I

Politeknik Telkom

Mobile Application

sejak sebuah perangkat memiliki layout kunci yang berbeda dan key code yang berbeda pula. KEY_NUM2 mungkin menjadi kunci “UP” untuk sebuah perangkat, tetapi mungkin juga menjadi kunci “LEFT” untuk perangkat lainnya. GetGameAction() akan selalu mengembalikan “UP”, tidak terikat pada kunci mana yang ditekan selama dia adalah kunci “UP” di dalam konteks dari layout kunci sebuah perangkat.

9.3

Event Pointer
Disamping dari event key, program MIDP juga dapat mengatasi event pointer. Hal ini bersifat benar jika sebuah perangkat memiliki sebuah pointer dan hal tersebut diimplementasikan di dalam sistem JAVA pada sebuah perangkat. Metode hasPointerEvents() mengembalikan nilai true jika sebuah perangkat mendukung pointer yang bersifat ditekan dan dilepaskan. Metode hasPointerMotionEvents() mengembalikan nilai true jika sebuah perangkat mendukung event gerakan dari pointer.
public boolean hasPointerEvents() public boolean hasPointerMotionEvents()

Sebuah event dapat di-generate oleh aktivitas pointer sebagai berikut : pointerPressed, pointerReleased dan pointerDragged. Sebuah aplikasi mengesampingkan metode-metode yang untuk diperhatikan ketika event ini terjadi. Koordinat (x,y) dari event (ketika pointer ditekan, dilepas atau digeser) ditetapkan didalam metode-metode callback ini.
protected void pointerPressed(int x, int y) protected void pointerReleased(int x, int y) protected void pointerDragged(int x, int y)

Low Level User Interface I

175

Politeknik Telkom

Mobile Application

9.4

Clipping
Suatu bidang clipping adalah suatu kotak di dalam objek Graphics yang ada. Setiap operasi grafik hanya akan mempengaruhi pixel-pixel didalam area clip. Pixel yang berada diluar clipping tidak akan dipengaruhi oleh setiap operasi grafik.

public void setClip(int x, int y, int width, int height) public int getClipX() public int getClipY() public int getClipWidth() public int getClipHeight()

Mengatur area clip yang tersedia menjadi kotak, ditentukan oleh koordinat Mengembalikan offset X dari area clip yang tersedia, sehubungan dengan awal mula dari konteks grafik ini Mengembalikan offset Y dari area clip yang tersedia Mengembalikan lebar dari area clip yang tersedia Mengembalikan tinggi dari area clip yang tersedia

9.5

Anchor Points
Teks digambar sesuai dengan sebuah anchor points. Metode drawString() mengharap sebuah koordinat (x,y) sesuai dengan anchor points. public void drawString(String str, int x, int y, int anchor) Anchor harus suatu kombinasi horisontal yang konstan (LEFT,HCENTER, atau RIGHT) dan vertikal yang konstan (TOP, BASELINE, atau BOTTOM). Horisontal dan vertikal yang konstan harus dikombinasikan mengunakan operator bitwise OR (|). Ini berarti menggambar teks berhubungan dengan baseline dan horisontal tengah akan membutuhkan sebuah nilai anchor BASELINE | HCENTER.

176

Low Level User Interface I

Politeknik Telkom

Mobile Application

Gambar 9.1: titik anchor teks

9.6

Menggambar Teks
Metode untuk menggambar teks dan karakter adalah : public void drawString(String str, int x, int y, int anchor) public void drawSubstring(String str, int offset, int len, int x, int y, int anchor) Menggambar teks dalam str menggunakan warna dan huruf yang tersedia. (x,y) adalah koordinat titik anchor Sama seperti drawString, kecuali ini hanya akan menggambar substring dari offset (berbasis nol) dengan panjang length.

Low Level User Interface I

177

Politeknik Telkom

Mobile Application

public void drawChar(char character, int x, int y, int anchor) public void drawChars(char[] data, int offset, int length, int x, int y, int anchor)

Menggambar karakter dengan warna dan huruf yang tersedia

Menggambar karakter dalam data array karakter, dimulai dari indeks offset dengan panjang length

Berikut adalah beberapa metode dari Font yang berguna dalam menggambar teks: public int getHeight() Mengembalikan tinggi teks dalam huruf ini. Tinggi dikembalikan termasuk spasi ekstra. Hal ini memastikan bahwa dua teks digambar dengan jarak ini dari titik anchor ke titik anchor lainnya akan berisi cukup ruang antara dua baris teks. Mengembalikan lebar total dalam pixel dari ruang yang ditempati oleh string ini jika digambar menggunakan huruf ini Mengembalikan lebar total dalam pixel dari ruang yang ditempati oleh karakter ini jika digambar menggunaka huruf ini Mengembalikan jarak dalam pixel antara TOP dan BASELINE pada teks, berdasarkan pada huruf ini

public int stringWidth(String str) public int charWidth(char ch) public int getBaselinePosition()

g.setColor(255, 0, 0); // merah g.drawString("JEDI", getWidth()/2, getHeight()/2, Graphics.TOP | Graphics.HCENTER); g.setColor(0, 0, 255); // biru
178 Low Level User Interface I

Politeknik Telkom

Mobile Application

Font font = g.getFont(); g.drawString("Java Education & Development Initiative", getWidth()/2, getHeight()/2+font.getHeight(), Graphics.TOP | Graphics.HCENTER);

Gambar 9.2: Hasil operasi drawString()

9.7
9.7.1

Game API
Game API Aplikasi games memiliki peranan utama pada aplikasi mobile. Sebagian besar aplikasi dibuat pada pangsa pasar mobile adalah games. Action, strategy, board and card games dan sebagainya, seluruhnya terdapat pada aplikasi mobile. Sebagian besar produsen game telah membuat API tersendiri untuk berbagai fungsi bermain game yang hanya akan bekerja pada handset yang dibuat oleh perusahaan tersebut. Hal ini berarti bahwa sebuah

Low Level User Interface I

179

Politeknik Telkom

Mobile Application

game yang dibangun menggunakan API dari salah satu produsen tidak akan berjalan pada device hasil produksi dari produsen lain. Untuk menjembatani perbedaan ini, MIDP versi 2 telah memiliki fungsionalitas dasar yang secara spesifik ditujukan aplikasi game. Class utama Game API dari MIDP adalah class GameCanvas. Class GameCanvas merupakan perluasan dari class Canvas yang kita gunakan dalam pembuatan low – level user interface. Dua kelemahan utama dari class Canvas dalam pemrograman game adalah tidak memadainya kemampuan untuk mengatur proses repaint dan ketidakmampuan untuk mengatur bagaimana pointer events serta quick keys diteruskan pada canvas. Komponen user interface dari MIDP umumnya berupa event driven. Events berupa antrian berurutan dan diteruskan terhadap aplikasi satu persatu, beserta tunda waktu antar waktu dimana event dibuat (key press). GameCanvas memungkinkan aplikasi mengumpulkan events yang terbuat dan melakukan proses repaint pada canvas dengan cepat. Struktur program menjadi lebih bersih karena terdapat rangkaian perulangan utama dimana proses painting dan pengumpulan events dilakukan. GameCanvas menggunakan teknik double buffering. Seluruh proses pembuatan interface dilakukan di off-screen buffer, kemudian di transfer dari area buffer tersebut menuju area yang terlihat pada canvas. Aplikasi anda harus menggunakan instance method dari class Graphics berupa method getGraphics(). Setiap pemanggilan terhadap method ini mengembalikan sebuah instance baru dari offscreen buffer yang anda gunakan dalam proses pembuatan user interface. Untuk memperbaharui screen tersebut, anda harus memanggil flushGraphics() untuk melakukan proses repaint secara cepat dengan isi dari off-screen buffer. Perhatikan bahwa anda hanya perlu memanggil method getGraphics() sekali saja, karena sebuah buffer teralokasi setiap kali anda memanggil method ini.

180

Low Level User Interface I

Politeknik Telkom

Mobile Application

MyCanvas.java :

Low Level User Interface I

181

Politeknik Telkom

Mobile Application

GameMidlet.java:

9.7.2

Layers Layers adalah elemen visual dari sebuah screen. Layer adalah abstract class yang merepresentasikan objects pada screen. Sprite dan TiledLayer adalah subclasses dari class Layer. Tiled Layer adalah rangkaian dari beberapa persegi empat yang berukuran sama dan gambar – gambar yang memadai untuk ditempatkan pada persegi empat tersebut. Layer ini dibangun dengan menempatkan gambar – gambar dan elemen – elemen visual dalam area ini. Sebuah gambar dapat digunakan oleh lebih dari satu persegi empat sehingga dapat menghemat ruang dan memory. Tiled Layers umumnya digunakan sebagai background pada game.

182

Low Level User Interface I

Politeknik Telkom

Mobile Application

9.7.3

Sprites Sprites adalah objects grafis yang anda lihat pada game. Object ini dapat berupa character, kunci, tombol, pintu ataupun peluru. Sebuah sprite bersifat statis ataupun animasi. Animasi sprite terbuat dari beberapa elemen sprite dengan perbedaan – perbedaan kecil dan tersusun sedemikian hingga membentuk kesan bergerak. Rangkaian sprite ini disebut sebagai frame. Contoh kode berikut ini (dari Project Game2) mendemonstrasikan cara penggunaan sprites. Program ini menggunakan sprite sederhana dengan dua frame. Frame ditampilkan menurut penekanan tombol oleh user (UP, DOWN, LEFT atau RIGHT).

Low Level User Interface I

183

Politeknik Telkom

Mobile Application

GameCanvas dengan Sprite :

184

Low Level User Interface I

Politeknik Telkom

Mobile Application

Low Level User Interface I

185

Politeknik Telkom

Mobile Application

9.7.4

LayerManager Class LayerManager akan memberikan kemudahan dalam pengaturan keseluruhan Sprites dan TiledLayers. LayerManager mengatur seluruh Sprites dan TiledLayers yang anda buat. Dan anda tidak perlu untuk membuat seluruh object tersebut satu persatu. LayerManager yang akan melakukannya untuk anda. LayerManager juga mengatur pengurutan objek dari dasar hingga paling atas.

9.8

Scalable 2D Graphics
JSR 226 menyediakan method untuk transforming atas grafis vector-based 2D. proses rendering dan

Format gambar raster-based seperti GIF melakukan proses encode terhadap pewarnaan pada tiap-tiap pixel pada area persegi empat yang menunjukkan bentuk gambar. Gambar dengan tipe vector-based hanya memiliki instruksi penggambaran yang menentukan bagaimana pixelpixel dari gambar tersebut harus diwarnai. Vector tersebut merepresentasikan sebuah gambar yang berukuran jauh lebih kecil, sebuah nilai lebih dalam penggunaan resource pada mobile devices.

186

Low Level User Interface I

Politeknik Telkom

Mobile Application

Rangkuman

Paket javax.microedition.lcdui juga menyediakan fungsi-fungsi yang memungkinkan kita untuk menggambar garis, titik dan elemen-elemen dasar lain dengan menggunakan class Canvas. Class Canvas merupakan class yang menyediakan fungsi-fungsi untuk manajemen antarmuka pada level rendah handled. Class ini merupakan class abstract sehingga kita harus membuat class turunannya dulu untuk melakukan manajemen antarmuka pada level rendah. Class Canvas merupakan class abstract sekaligus turunan dari class Displayable. Penggunaan class Canvas umumnya bersamaan dengan class Graphics. Class Graphics yang menyediakan objek-objek Grafik dan fungsi-fungsi untuk memanipulasi grafik level rendah. Pada bab Low Level User Interface ini diharapkan siswa dapat menguasai : 1. Memahami dan menggunakan The Graphics Clip, Rendering Text, Images, dan Event Handling 2. Multithreading and the User Interface 3. Mengetahui bagaimana menggunakan GAME API 4. Menggambar grafik berskala

Low Level User Interface I

187

Politeknik Telkom

Mobile Application

Kuis Benar Salah
1. Sebuah program dapat menerjemahkan sebuah key code ke dalam aksi game menggunakan metode getGameAction(keyCode). 2. Metode getKeyCode(int gameAction) mengembalikan key code yang berkaitan dengan suatu aksi game. 3. Metode hasPointerEvents() mengembalikan nilai true jika sebuah perangkat mendukung pointer yang bersifat ditekan dan dilepaskan. Metode hasPointerMotionEvents() mengembalikan nilai true jika sebuah perangkat mendukung event gerakan dari pointer. 4. Suatu bidang clipping adalah suatu kotak di dalam objek Graphics yang ada. Setiap operasi grafik hanya akan mempengaruhi pixel-pixel didalam area clip. 5. Teks digambar sesuai dengan sebuah anchor points. Metode drawString() mengharap sebuah koordinat (x,y) sesuai dengan anchor points. 6. Untuk menjembatani perbedaan ini, MIDP versi 2 telah memiliki fungsionalitas dasar yang secara spesifik ditujukan aplikasi game. Class utama Game API dari MIDP adalah class GameCanvas. 7. Layers adalah elemen visual dari sebuah screen. Layer adalah abstract class yang merepresentasikan objects pada screen. Sprite dan TiledLayer adalah subclasses dari class Layer. 8. Sprites adalah objects grafis yang anda lihat pada game. Object ini dapat berupa character, kunci, tombol, pintu ataupun peluru. Sebuah sprite bersifat statis ataupun animasi. 9. Class LayerManager akan memberikan kemudahan dalam pengaturan keseluruhan Sprites dan TiledLayers. 10. JSR 226 menyediakan method untuk proses rendering dan transforming atas grafis vector-based 2D.

188

Low Level User Interface I

Politeknik Telkom

Mobile Application

Pilihan Ganda
1. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Sebuah program dapat menerjemahkan sebuah key code ke dalam aksi game menggunakan metode getGameAction(keyCode). B. Metode getKeyCode(int gameAction) mengembalikan key code yang berkaitan dengan suatu aksi game. y. z. aa. bb. 2. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Tiled Layer adalah rangkaian dari beberapa persegi empat yang berukuran sama dan gambar – gambar yang memadai untuk ditempatkan pada persegi empat tersebut. B. Layer ini dibangun dengan menempatkan gambar – gambar dan elemen – elemen visual dalam area ini. Sebuah gambar dapat digunakan oleh lebih dari satu persegi empat sehingga dapat menghemat ruang dan memory. Tiled Layers umumnya digunakan sebagai background pada game. u. v. w. x. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

3.

Subclass dari Canvas dapat merespon sebuah event tombol dengan metode-metode sebagai berikut : 1. keyPressed(int keyCode) 2. keyRepeated(int keyCode)
189

Low Level User Interface I

Politeknik Telkom

Mobile Application

3. k. l. 4.

keyReleased(int keyCode) 1,2,3 1,2 c. d. 2,3 1,3

Berikut adalah beberapa metode dari Font yang berguna dalam menggambar teks: 1. public int getHeight() 2. public int stringWidth(String str) 3. public int charWidth(char ch) 4. public int getBaselinePosition() k. l. 1,2,3,4 3,4 c. d. 1,2,3 3,4

190

Low Level User Interface I

Politeknik Telkom

Mobile Application

Latihan

Buatlah program dengan low level UI untuk menampilkan string “Hello World” dengan warna latar merah seperti pada gambar dibawah.

Low Level User Interface I

191

Politeknik Telkom

Mobile Application

10 Networking (Socket/TCP)

Overview

Generic Connection Framework mendukung koneksi packet (socket) dan stream (datagram). Sesuai dengan namanya, framework ini menyediakan API dasar bagi koneksi di CLDC. Framework ini menyediakan pondasi umum dari berbagai koneksi seperti HTTP, socket, dan datagram. Walaupun Bluetooth dan serial I/O termasuk kedalam API ini, GCF menyediakan satu set API yang lebih generic dan mendasar yang menjadi abstraksi dari berbagai tipe koneksi. Harus dicatat, bahwa tidak semua tipe koneksi dibutuhkan bagi implementasi sebuah MIDP device.

Tujuan

Pada akhir bab ini, pelajar diharapkan siswa dapat menguasai : 1. Penerapkan sebuah MIDlet yang mempunyai kemampuan untuk koneksi kedalam jaringan. 2. Mendeskripsikan Generic Connection Framework, dan bagaimana ia dapat digunakan untuk mendukung method 3. Menciptakan MIDlet dengan menggunakan TCP sockets dan UDP datagram

192

Networking (Socket/TCP

Politeknik Telkom

Mobile Application

10.1 Generic Connection Framework
10.1.1 Hirarki dari GCF Interface Perluasan dari hirarki GCF interface memungkinkan terjadinya generalization. Sebuah tipe koneksi yang baru mungkin dapat ditambahkan kepada framework ini dengan cara memperluas hirarki.

Gambar 10.1: Hirarki dari GCF Interface

Networking (Socket/TCP)

193

Politeknik Telkom

Mobile Application

10.1.2 GCF Connection URL Parameter-parameter koneksi telah dispesifikasikan menggunakan sebuah format pengalamatan: scheme://username:password@host:port/path;parameters 1. 2. 3. Scheme adalah sebuah protokol atau method koneksi. Misalnya: http,ftp, https. Usernamebersifat optional, akan tetapi bila kita ingin mendefinisikannya, harus didahului dengan tanda @ Password juga bersifat optional dan hanya dapat dispesifikasikan jika username telah didefinisikan sebelumnya. Jika password didefinisikan, maka ia harus dipisahkan dari username dengan menggunakan tanda titik dua (:) Host – parameter ini wajib dicantumkan. Bisa berupa nama host atau fully qualified domain name (FQDN) atau alamat IP dari host yang dituju. Port – parameter ini juga bersifat optional. Jika tidak dispesifikasikan, maka default port akan digunakan Path parameters – bersifat optional, tetapi harus didahuli dengan titik koma (;) apabila ia dicantumkan dengan

4. 5. 6. 7.

Jika kita menggunakan kurung siku untuk memberi tanda pada parameter-parameter yang bersifat optional pada format pengalamatan diatas, kita dapat mengubah format diatas menjadi seperti berikut: scheme://[username[:password]@]host[:port]/path[;parameters] Format pengalamatan tersebut haruslah sesuai dengan Uniform Resource Indicator (URI) seperti yang didefinisikan pada RFC 2396. Pada MIDP 2.0, hanya skema “http” dan “https” dibutuhkan untuk diimplementasikan pada device.

194

Networking (Socket/TCP

Politeknik Telkom

Mobile Application

10.2 TCP Sockets
Banyak implementasi dari HTTP dijalankan diatas layer TCP. Jika Anda mengirim data menggunakan layer TCP, data tersebut akan dipotong menjadi bagian yang lebih kecil yang disebut dengan packet. Layer TCK akan memastikan bahwa semua packet akan dikirim oleh sender dan diterima oleh recipient, dengan susunan yang sama seperti pada saat ia dikirimkan. Jika sebuah packet tidak diterima oleh recipient, ia akan mengirimkannya kembali. Hal ini berarti, sekali Anda mengirim sebuah pesan, Anda dapat memastikan bahwa pesan tersebut akan berhasil dikirim kepada recipient dengan format yang sama seperti pada saat Anda mengirimkannya, tanpa ada data yang hilang atau disisipi (dihalangi oleh sebuah siklus tertentu seperti recipient disconnect dari jaringan) . Layer TCP menangani reassembly dan retransmission pada packet secara transparan. Sebagai contoh, pada protokol HTTP kita tidak perlu khawatir terhadir prosess disassembly dan assembly packet karena hal ini akan dihandle pada layer TCP. Kadang-kadang, ukuran dari pesan tersebut terkadang terlalu kecil dan sangat tidak efisien untuk dikirimkan sebagai packet tunggal (overhead dari packet sangat tinggi jika dibandingkan dengan payload). Bayangkan banyak packet dikirimkan melalui jaringan dengan satu byte payload dan multi byte overhead(misal 16 bytes). Hal ini akan menyebabkan jaringan sangat tidak effisien, banyak packets membanjiri jaringan dengan hanya satu byte payload. Pada kasus ini, implementasi dari TCP dimungkinkan untuk menunggu sebuah pesan dikirim dengan sukses. Pesan tersebut kemudian akan dipaket sebagai banyak pesan didalam sebuah packet sebelum dikirimkan. Jika hal ini terjadi, maka akan terjadi keterlambatan pada koneksi. Jika aplikasi Anda menginginkan sesedikit mungkin terjadi keterlambatan, anda harus mengeset DELAY socket option ke nol (0). Atau jika aplikasi Anda dapat tetap berjalan dengan beberapa paket yang hilang atau tidak tersusun secara benar, Anda mungkin harus mencoba menggunakan UDP atau koneksi datagram. Koneksi UDP juga menggunakan sesedikit mungkin overhead packet.
Networking (Socket/TCP) 195

Politeknik Telkom

Mobile Application

10.3 Server Sockets
Didalam model client-server, server akan secara terus menerus menunggu sebuah koneksi dari client atau dari port tertentu yang telah disetujui. Kita juga dapat menggunakan method Connector.open untuk menciptakan sebuah server socket. Sebuah URL akan memberikan sebuah format yang sama seperti pada TCP socket kepada method open(), dengan nama hostname yang dibiarkan kosong (misal socket://:8899).

196

Networking (Socket/TCP

Politeknik Telkom

Mobile Application

10.4 Datagrams
Koneksi dari TCP socket adalah koneksi yang dapat dipercaya. Sebaliknya, tersampaikannya pesan dengan menggunakan packet UDP tidak dijamin. Tidak ada jaminan bahwa packet yang dikirimkan dengan menggunakan paket datagram akan diterima oleh pasangan. Susunan dari packet yang diterima juga tidak terpercaya. Susunan packet yang dikirimkan dimungkinkan untuk tidak sama dengan susunan packet yang diterima. UDP datagrams atau packet digunakan apabila aplikasi dapat tetap berjalan walaupun ada packet yang hilang atau packet tersebut tidak lagi memiliki susunan yang sama seperti yang dikirimkan.

Networking (Socket/TCP)

197

Politeknik Telkom

Mobile Application

198

Networking (Socket/TCP

Politeknik Telkom

Mobile Application

Rangkuman
1. Generic Connection Framework mendukung koneksi packet (socket) dan stream (datagram). Sesuai dengan namanya, framework ini menyediakan API dasar bagi koneksi di CLDC. Framework ini menyediakan pondasi umum dari berbagai koneksi seperti HTTP, socket, dan datagram. Walaupun Bluetooth dan serial I/O termasuk kedalam API ini, GCF menyediakan satu set API yang lebih generic dan mendasar yang menjadi abstraksi dari berbagai tipe koneksi. Harus dicatat, bahwa tidak semua tipe koneksi dibutuhkan bagi implementasi sebuah MIDP device. Perluasan dari hirarki GCF interface memungkinkan terjadinya generalization. Sebuah tipe koneksi yang baru mungkin dapat ditambahkan kepada framework ini dengan cara memperluas hirarki. Parameter-parameter koneksi telah dispesifikasikan dengan menggunakan sebuah format pengalamatan: scheme://username:password@host:port/path;parameters 1. Scheme adalah sebuah protokol atau method koneksi. Misalnya: http,ftp, https. 2. Usernamebersifat optional, akan tetapi bila kita ingin mendefinisikannya, harus didahului dengan tanda @ 3. Password juga bersifat optional dan hanya dapat dispesifikasikan jika username telah didefinisikan sebelumnya. Jika password didefinisikan, maka ia harus dipisahkan dari username dengan menggunakan tanda titik dua (:) 4. Host – parameter ini wajib dicantumkan. Bisa berupa nama host atau fully qualified domain name (FQDN) atau alamat IP dari host yang dituju. 5. Port – parameter ini juga bersifat optional. Jika tidak dispesifikasikan, maka default port akan digunakan 6. Path 7. parameters – bersifat optional, tetapi harus didahuli dengan titik koma (;) apabila ia dicantumkan

2.

3. 4.

Networking (Socket/TCP)

199

Politeknik Telkom

Mobile Application

5.

6.

7.

8.

9.

Banyak implementasi dari HTTP dijalankan diatas layer TCP. Jika Anda mengirim data menggunakan layer TCP, data tersebut akan dipotong menjadi bagian yang lebih kecil yang disebut dengan packet. Layer TCK akan memastikan bahwa semua packet akan dikirim oleh sender dan diterima oleh recipient, dengan susunan yang sama seperti pada saat ia dikirimkan. Jika sebuah packet tidak diterima oleh recipient, ia akan mengirimkannya kembali. Hal ini berarti, sekali Anda mengirim sebuah pesan, Anda dapat memastikan bahwa pesan tersebut akan berhasil dikirim kepada recipient dengan format yang sama seperti pada saat Anda mengirimkannya, tanpa ada data yang hilang atau disisipi (dihalangi oleh sebuah siklus tertentu seperti recipient disconnectdari jaringan) . Layer TCP menangani reassembly dan retransmission pada packet secara transparan. Sebagai contoh, pada protokol HTTP kita tidak perlu khawatir terhadir prosess disassembly dan assembly packet karena hal ini akan dihandle pada layer TCP. Didalam model client-server, server akan secara terus menerus menunggu sebuah koneksi dari client atau dari port tertentu yang telah disetujui. Kita juga dapat menggunakan method Connector.open untuk menciptakan sebuah server socket. Sebuah URL akan memberikan sebuah format yang sama seperti pada TCP socket kepada method open(), dengan nama hostname yang dibiarkan kosong (misal socket://:8899). Koneksi dari TCP socket adalah koneksi yang dapat dipercaya. Sebaliknya, tersampaikannya pesan dengan menggunakan packet UDP tidak dijamin. Tidak ada jaminan bahwa packet yang dikirimkan dengan menggunakan paket datagram akan diterima oleh pasangan. Susunan dari packet yang diterima juga tidak terpercaya. Susunan packet yang dikirimkan dimungkinkan untuk tidak sama dengan susunan packet yang diterima. UDP datagrams atau packet digunakan apabila aplikasi dapat tetap berjalan walaupun ada packet yang hilang atau packet tersebut tidak lagi memiliki susunan yang sama seperti yang dikirimkan.

200

Networking (Socket/TCP

Politeknik Telkom

Mobile Application

Kuis Benar Salah

1. 2. 3. 4. 5. 6. 7.

Layer TCP menangani reassembly dan retransmission pada packet secara transparan. Protokol HTTP kita tidak perlu khawatir terhadir prosess disassembly dan assembly packet karena hal ini akan dihandle pada layer TCP. Ukuran dari pesan tersebut terkadang terlalu kecil dan sangat tidak efisien untuk dikirimkan sebagai packet tunggal (overhead dari packet sangat tinggi jika dibandingkan dengan payload). Jika aplikasi Anda menginginkan sesedikit mungkin terjadi keterlambatan, anda harus mengeset DELAY socket option ke nol (0). Kita juga dapat menggunakan method Connector.open untuk menciptakan sebuah server socket. Sebuah URL akan memberikan sebuah format yang sama seperti pada TCP socket kepada method open(), dengan nama hostname yang dibiarkan kosong (misal socket://:8899). UDP datagrams atau packet digunakan apabila aplikasi dapat tetap berjalan walaupun ada packet yang hilang atau packet tersebut tidak lagi memiliki susunan yang sama seperti yang dikirimkan.

Networking (Socket/TCP)

201

Politeknik Telkom

Mobile Application

Pilihan Ganda
5. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Layer TCP menangani reassembly dan retransmission pada packet secara transparan. B. Protokol HTTP kita tidak perlu khawatir terhadir prosess disassembly dan assembly packet karena hal ini akan dihandle pada layer TCP. cc. dd. ee. ff. 6. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Sebuah URL akan memberikan sebuah format yang sama seperti pada TCP socket kepada method open(), dengan nama hostname yang dibiarkan kosong (misal socket://:8899). B. UDP datagrams atau packet digunakan apabila aplikasi dapat tetap berjalan walaupun ada packet yang hilang atau packet tersebut tidak lagi memiliki susunan yang sama seperti yang dikirimkan. y. z. aa. bb. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

202

Networking (Socket/TCP

Politeknik Telkom

Mobile Application

7.

Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Ukuran dari pesan tersebut terkadang terlalu kecil dan sangat tidak efisien untuk dikirimkan sebagai packet tunggal (overhead dari packet sangat tinggi jika dibandingkan dengan payload). B. Bayangkan banyak packet dikirimkan melalui jaringan dengan satu byte payload dan multi byte overhead(misal 16 bytes). Hal ini akan menyebabkan jaringan sangat tidak effisien, banyak packets membanjiri jaringan dengan hanya satu byte payload. a. b. c. d. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

8.

Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Susunan packet yang dikirimkan dimungkinkan untuk tidak sama dengan susunan packet yang diterima. B. UDP datagrams atau packet digunakan apabila aplikasi dapat tetap berjalan walaupun ada packet yang hilang atau packet tersebut tidak lagi memiliki susunan yang sama seperti yang dikirimkan. a. b. c. d. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

Networking (Socket/TCP)

203

Politeknik Telkom

Mobile Application

Latihan

Mendapatkan URL Buatlah sebuah MIDlet yang mendapatkan HTTP URL. Aplikasi tersebut akan mendapatkan URL dengan method GET dan menampilkan jenis koneksi/ content properties (jika tersedia): Reponse Code, Response Message, Length, Type, Encoding, Expiration dan Last Modified Date.

204

Networking (Socket/TCP

Politeknik Telkom

Mobile Application

Networking (Socket/TCP)

205

Politeknik Telkom

Mobile Application

11 Networking (HTTP)

Overview

Dua buah tipe request HTTP yang paling umum digunakan adalah GET dan POST yang juga dikenal sebagai request method. Request GET digunakan untuk mendapatkan atau menerima informasi dari server. Pada umumnya request GET digunakan untuk menerima file HTML atau image. Sedangkan request POST digunakan untuk mengirimkan data ke server. Request POST akan mengirimkan informasi server dalam bentuk HTML yang berisi data yang dimasukkan oleh client.

Tujuan

Pada akhir bab ini, pelajar diharapkan siswa dapat menguasai : 1. Membuat koneksi HTTP/HTTPS

206

Networking (HTTP)

Politeknik Telkom

Mobile Application

11.1 Koneksi HTTP
11.1.1 Protokol HTTP HTTP merupakan kepanjangan dari HyperText Transfer Protocol. Ia merupakan protocol yang digunakan untuk memindahkan web pages dari web server (misal: www.sun.com) kepada web browser. Client(web browser) akan me-request sebuah web page dengan cara mespesifikasikan path dengan command Get atau POST. Pada method GET, parameter telah dispesifikasikan dan dilekatkan pada URL. Sebagai contoh, untuk memberikan sebuah variable dengan nama “id” dan memiliki nilai 100 kepada index.jsp, url tersebut akan dispesifikasikan sebagai : “http://hostname/index.jsp?id=100”. Parameter tambahan dipisahkan dengan dengan tanda &, "http://hostname/index.jsp?id=100&page=2. Jika method “POST” digunakan, parameter bukanlah menjadi bagian dari URL tetapi dikirim dengan pada baris terpisah pada command POST. Client / Web Browser GET /index.jsp?id=100 HTTP/1.1 HTTP Server

HTTP/1.1 200 OK Server: ApacheCoyote/1.1 Content-Type: text/html;charset=ISO-8859-1 Date: Wed, 18 Jun 2005 14:09:31 GMT Connection: close <html> <head> <title>Test Page</title> </head> <body> <h1 align="center">Test Page</h1> </body> </html> Gambar 11.1: Contoh dari transaksi HTTP GET

Networking (HTTP)

207

Politeknik Telkom

Mobile Application

Client / Web Browser GET /non-existent.html HTTP/1.0

HTTP Server

HTTP/1.1 404 /non-existent.html Server: Apache-Coyote/1.1 ContentType: text/html;charset=utf-8 Content-Length: 983 Date: Mon, 11 Jul 2005 13:21:01 GMT Connection: close <html><head><title>Apache Tomcat/5.5.7 -Error report</title><style>... <body><h1>HTTP Status 404</h1> ... The requested resource (nonexistent.html)is not available. ... </body></html> Gambar 11.2: Contoh dari transaksi HTTP GET dengan response error 11.1.2 Menciptakan sebuah koneksi HTTP Anda dapat membuka sebuah koneksi HTTP dengan menggunakan Connector.open() dan meng-casting nya dengan salah satu dari ketiga interface berikut ini: StreamConnection, ContentConnection, dah HTTPConnection. Bagaimanapun, dengan StreamConnection dan ContentConnection, Anda tidak dapat menspesifikasikan dan menurunkan parameter-parameter spesifik dari HTTP dan juga resultnya. Bila Anda menggunakan StreamConnection, panjang dari sebuah reply, tidak dapat ditentukan sebelumnya. Sedangkan pada ContentConnection atau HTTPConnection, selalu ada cara untuk menentukan panjang dari sebuah reply. Akan tetapi penentuan panjang ini, tidak selalu tersedia. Oleh karena itu, program Anda harus bisa mendapatkan reply tersebut tanpa harus mengetahui panjang content terlebih dahulu.

208

Networking (HTTP)

Politeknik Telkom

Mobile Application

11.1.3 Handling HTTP Redirects Terkadang server akan melakukan redirect dari sebuah browser/client ke web page yang lain dengan cara me-reply HTTP_MOVED_PERM (301), HTTP_MOVED_TEMP (302), HTTP_SEE_OTHER (303) atau HTTP_TEMP_REDIRECT (307) daripada menggunakan reply HTTP_OK yang biasa dilakukan. Program Anda harus dapat
Networking (HTTP) 209

Politeknik Telkom

Mobile Application

mengidentifikasi-nya dengan menggunakan getResponseCose(), mendapatkan URI yang baru dari header dengan menggunakan getHeaderField(“Location”), dan mendapatkan kembali dokumen dari lokasi yang baru.
int code = connection.getResponseCode(); switch(code){ case HttpConnection.HTTP_MOVED_PERM: case HttpConnection.HTTP_MOVED_TEMP: case HttpConnection.HTTP_SEE_OTHER: case HttpConnection.HTTP_TEMP_REDIRECT: String newUrl = conn.getHeaderField("Location"); ...

11.2 Koneksi HTTPS
HTTPS adalah sebuah HTTP diatas sebuah koneksi secure transport. Membuka sebuah koneksi HTTPS, hampir sama untuk membuka koneksi HTTP. Perbedaan utamanya adalah URL akan memberikan kepada Connector.open() dan meng-casting hasilnya kepada HttpsConnection class variable. Sebuah tipe exception tambahan juga harus dijalankan melalui Connector.open() misalnya IllegalArgumentException, ConnectionNotFoundException,java.io.IOException dan SecurityException. Sebuah CertificateExceptionjuga dapat dijalankan untuk melaporkan kesalahan pada certificate.

210

Networking (HTTP)

Politeknik Telkom

Mobile Application

static byte

BAD_EXTENSIONS Mengindikasikan bahwa sertifikat memiliki extenstion yang tidak teridentifikasi. BROKEN_CHAIN Mengindikasikan bahwa sertifikat terletak didalam sebuah rantai yang tidak terautentikasi pada mata rantai berikutnya. CERTIFICATE_CHAIN_TOO_LONG Mengindikasikan bahwa sertifikat server dari rantai tersebut melebihi panjang yang disepakati pada policy dari pembuat sertifikat. EXPIRED Mengindikasikan bahwa sertifikat tersebut telah berakhir jangka waktunya. INAPPROPRIATE_KEY_USAGE Mengindikasikan bahwa public key dari sertifikat tersebut telah digunakan tidak sesuai dengan ketetapan yang dibuat oleh pembuat sertifikat.

static byte

static byte

static byte

static byte

Networking (HTTP)

211

Politeknik Telkom

Mobile Application

static byte

MISSING_SIGNATURE Mengindikasikan bahwa object dari sertifikat tidak memiliki sebuah tanda tangan digital. NOT_YET_VALID Mengindikasikan bahwa sertifikat tersebut tidak berlaku. ROOT_CA_EXPIRED Mengindikasikan bahwa root dari public key CA telah habis jangka waktunya. SITENAME_MISMATCH Indicates a certificate does not contain the correct site name. UNAUTHORIZED_INTERMEDIATE_CA Mengindikasikan bahwa ada sebuah sertifikat intermediate certificate didalam rantai yang tidak punya otoritas sebagai intermediate CA. UNRECOGNIZED_ISSUER Mengindikasikan bahwa sertifikat tersebut telah dikeluarkan oleh entity yang tidak teridentifikasi. UNSUPPORTED_PUBLIC_KEY_TYPE Mengindikasikan bahwa tipe public key didalam sertifikat tidak didukung oleh device. UNSUPPORTED_SIGALG Mengindikasikan bahwa sertifikat telah ditandatangani dengan menggunakan algorithma yang tidak disupport. VERIFICATION_FAILED Mengindikasikan bahwa sertifikat tersebut gagal di-verifikasi.

static byte static byte

static byte static byte

static byte

static byte

static byte

static byte

Gambar 11.3: Berbagai alasan pada CertificateException (kutipan dari spesifikasi MIDP 2.0 – JSR 118)

212

Networking (HTTP)

Politeknik Telkom

Mobile Application

11.3 Servlet
Tujuan servlet adalah untuk meng-generate respons yang bersifat dinamis. Cara komunikasi antara client dan server melalui protocol HTTP adalah sebagai berikut : 1. Client akan mengirimkan HTTP request ke server 2. Setelah request diterima oleh server, server akan memberikannya pada servlet untuk dilakukan pemrosesan, misalnya akses ke database 3. Setelah pemrosesan selesai dilakukan, server akan mengembalikan hasilnya ke client. Hasil pengembalian ini dapat berbentuk file HTML yang akan ditampilkan di browser, image dan data binary.

Gambar 11.4 Cara Kerja Servlet

11.4 HTTP Servlet
Dua buah tipe request HTTP yang paling umum digunakan adalah GET dan POST yang juga dikenal sebagai request method. Request GET digunakan untuk mendapatkan atau menerima informasi dari server. Pada umumnya request GET digunakan untuk menerima file HTML atau image.

Networking (HTTP)

213

Politeknik Telkom

Mobile Application

Sedangkan request POST digunakan untuk mengirimkan data ke server. Request POST akan mengirimkan informasi server dalam bentuk HTML yang berisi data yang dimasukkan oleh client.

214

Networking (HTTP)

Politeknik Telkom

Mobile Application

Rangkuman

1.

2.

3.

4.

HTTP merupakan kepanjangan dari HyperText Transfer Protocol. Ia merupakan protocol yang digunakan untuk memindahkan web pages dari web server (misal: www.sun.com) kepada web browser. Client(web browser) akan me-request sebuah web page dengan cara mespesifikasikan path dengan command Get atau POST. Pada method GET, parameter telah dispesifikasikan dan dilekatkan pada URL. Sebagai contoh, untuk memberikan sebuah variable dengan nama “id” dan memiliki nilai 100 kepada index.jsp, url tersebut akan dispesifikasikan sebagai : “http://hostname/index.jsp?id=100”. Parameter tambahan dipisahkan dengan dengan tanda &, "http://hostname/index.jsp?id=100&page=2. Anda dapat membuka sebuah koneksi HTTP dengan menggunakan Connector.open() dan meng-casting nya dengan salah satu dari ketiga interface berikut ini: StreamConnection, ContentConnection, dah HTTPConnection. Bagaimanapun, dengan StreamConnection dan ContentConnection, Anda tidak dapat menspesifikasikan dan menurunkan parameter-parameter spesifik dari HTTP dan juga result-nya. Bila Anda menggunakan StreamConnection, panjang dari sebuah reply, tidak dapat ditentukan sebelumnya. Sedangkan pada ContentConnection atau HTTPConnection, selalu ada cara untuk menentukan panjang dari sebuah reply. Akan tetapi penentuan panjang ini, tidak selalu tersedia. Oleh karena itu, program Anda harus bisa mendapatkan reply tersebut tanpa harus mengetahui panjang content terlebih dahulu. Terkadang server akan melakukan redirect dari sebuah browser/client ke web page yang lain dengan cara me-reply HTTP_MOVED_PERM (301), HTTP_MOVED_TEMP (302), HTTP_SEE_OTHER (303) atau HTTP_TEMP_REDIRECT (307) daripada menggunakan reply HTTP_OK yang biasa dilakukan. Program Anda harus dapat mengidentifikasi-nya dengan menggunakan getResponseCose(), mendapatkan URI yang baru dari header dengan menggunakan getHeaderField(“Location”), dan
215

Networking (HTTP)

Politeknik Telkom

Mobile Application

mendapatkan kembali dokumen dari lokasi yang baru. HTTPS adalah sebuah HTTP diatas sebuah koneksi secure transport. Membuka sebuah koneksi HTTPS, hampir sama untuk membuka koneksi HTTP. Perbedaan utamanya adalah URL akan memberikan kepada Connector.open() dan meng-casting hasilnya kepada HttpsConnection class variable. 6. Sebuah tipe exception tambahan juga harus dijalankan melalui Connector.open() misalnya IllegalArgumentException, ConnectionNotFoundException,java.io.IOException dan SecurityException. Sebuah CertificateExceptionjuga dapat dijalankan untuk melaporkan kesalahan pada certificate. 7. Cara komunikasi antara client dan server melalui protocol HTTP adalah sebagai berikut : 1. Client akan mengirimkan HTTP request ke server 2. Setelah request diterima oleh server, server akan memberikannya pada servlet untuk dilakukan pemrosesan, misalnya akses ke database 3. Setelah pemrosesan selesai dilakukan, server akan mengembalikan hasilnya ke client. Hasil pengembalian ini dapat berbentuk file HTML yang akan ditampilkan di browser, image dan data binary. 8. Dua buah tipe request HTTP yang paling umum digunakan adalah GET dan POST yang juga dikenal sebagai request method. 5.

216

Networking (HTTP)

Politeknik Telkom

Mobile Application

Kuis Benar Salah

1. 2.

3. 4.

5. 6.

7.

HTTP merupakan kepanjangan dari HyperText Transfer Protocol. Ia merupakan protocol yang digunakan untuk memindahkan web pages dari web server (misal: www.sun.com) kepada web browser. Client(web browser) akan me-request sebuah web page dengan cara mespesifikasikan path dengan command Get atau POST. Pada method GET, parameter telah dispesifikasikan dan dilekatkan pada URL. Jika method “POST” digunakan, parameter bukanlah menjadi bagian dari URL tetapi dikirim dengan pada baris terpisah pada command POST. Anda dapat membuka sebuah koneksi HTTP dengan menggunakan Connector.open() dan meng-casting nya dengan salah satu dari ketiga interface berikut ini: StreamConnection, ContentConnection, dah HTTPConnection. HTTPS adalah sebuah HTTP diatas sebuah koneksi secure transport. Membuka sebuah koneksi HTTPS, hampir sama untuk membuka koneksi HTTP. Perbedaan utamanya adalah URL akan memberikan kepada Connector.open() dan meng-casting hasilnya kepada HttpsConnection class variable. Dua buah tipe request HTTP yang paling umum digunakan adalah GET dan POST yang juga dikenal sebagai request method.

Networking (HTTP)

217

Politeknik Telkom

Mobile Application

Pilihan Ganda
1. Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Request GET digunakan untuk mendapatkan atau menerima informasi dari server. Pada umumnya request GET digunakan untuk menerima file HTML atau image. B. Sedangkan request POST digunakan untuk mengirimkan data ke server. Request POST akan mengirimkan informasi server dalam bentuk HTML yang berisi data yang dimasukkan oleh client. gg. hh. ii. jj. 2. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Anda dapat membuka sebuah koneksi HTTP dengan menggunakan Connector.open() dan meng-casting nya dengan salah satu dari ketiga interface berikut ini: StreamConnection, ContentConnection, dah HTTPConnection. B. Membuka sebuah koneksi HTTPS, hampir sama untuk membuka koneksi HTTP. Perbedaan utamanya adalah URL akan memberikan kepada Connector.open() dan meng-casting hasilnya kepada HttpsConnection class variable. cc. dd. ee. ff. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

218

Networking (HTTP)

Politeknik Telkom

Mobile Application

3.

Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Client(web browser) akan me-request sebuah web page dengan cara mespesifikasikan path dengan command Get atau POST. Pada method GET, parameter telah dispesifikasikan dan dilekatkan pada URL. B. HTTPS adalah sebuah HTTP diatas sebuah koneksi secure transport. a. b. c. d. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

4.

Cara komunikasi antara client dan server melalui protocol HTTP adalah sebagai berikut : 1. 2. 3. Client akan mengirimkan HTTP request ke server Setelah request diterima oleh server, server akan memberikannya pada servlet untuk dilakukan pemrosesan, misalnya akses ke database Setelah pemrosesan selesai dilakukan, server akan mengembalikan hasilnya ke client. Hasil pengembalian ini dapat berbentuk file HTML yang akan ditampilkan di browser, image dan data binary. c. d. 2,3 1,3

m. 1,2,3 n. 1,2

Networking (HTTP)

219

Politeknik Telkom

Mobile Application

Latihan

1. 2.

Sebutkan langkah-langkah Cara komunikasi antara client dan server melalui protocol HTTP? Sebutkan perbedaan antara HTTP dengan HTTPS?

220

Networking (HTTP)

Politeknik Telkom

Mobile Application

12 Persistent Storage

Overview

MIDP menyediakan sebuah API dimana program dapat menyimpan data-data aplikasi secara lokal didalam device tersebut. MIDP Record Management System adalah sebuah fasilitas yang dimiliki oleh MIDlets untuk menyimpan data-data aplikasi pada saat MIDlet invocations. Data akan disimpan dalam non-volatile memory didalam device. Hal ini berarti, data-data program yang telah disimpan tidak akan hilang walaupun program di restart maupun device dimatikan.

Tujuan

Pada akhir bab ini, pelajar diharapkan siswa dapat menguasai : 1. Memahami mengenai konsep dari Record Store 2. Membuat dan membuka sebuah Record Store 3. Menambah, memanggil kembali, mengupdate, dan mendelete record 4. Memanggil record satu persatu (enumerate) record dengan menggunakan RecordEnumerate 5. Membuat sebuah Record Comparator 6. Membuat sebuah Record Filter

Persistent Storage

221

Politeknik Telkom

Mobile Application

12.1 Record Store
Sebuah Record Store adalah sebuah koleksi daripada record-record. Record Id didalam Record Store selalu unique. Record Id akan secara otomatis dialokasikan pada saat pembentukan sebuah record dan bertindak sebagai index atau primary key. Pemberian record Id dilaksanakan secara sekuensial dan nilai yang diberikan kepada record Id pertama pada setiap Record Store adalah 1 (satu). Pada saat sebuah record dihapus, record id-nya tidak akan bisa digunakan kembali. Jika kita membuat empat buah record dan menghapus record ke-empat, maka record Id selanjutnya yang akan diberikan oleh system adalah 5 (lihat gambar) Record ID 1 2 3 5 Byte array Data dari record #1 Data dari record #2 Data dari record #3 Data dari record #5

MIDlets dapat menciptakan lebih dari satu Record Store. Nama dari sebuah record store didalam MIDlet suite haruslah unique. Nama dari record store juga case sensitive dan memiliki panjang maksimal 32 karakter. Pada saat MIDlet suite dihapus dari sebuah device, maka semua record store yang terkoneksi dengan MIDlet didalam suite tersebut juga akan terhapus. Membuat dan membuka sebuah Record Store Method-method dibawah ini digunakan untuk membuat dan membuka sebuah record store:

222

Persistent Storage

Politeknik Telkom

Mobile Application

static RecordStore static RecordStore static RecordStore

openRecordStore(String recordStoreName,boolean createIfNecessary) openRecordStore(String recordStoreName,boolean createIfNecessary, int authmode,boolean writable) openRecordStore(String recordStoreName,String vendorName, String suiteName)

Jika createIfNecessary di-set menjadi true dan Record Store belum ada, maka Record Store akan dibangun. Jika createIfNecessary di-set menjadi false dan Record Store tersebut belum dibuat, maka sebuah RecordStoreNotFoundException akan dijalankan. Authmode paramater dapat di-set menjadi RecordStore.AUTHMODE_PRIVATE atau RecordStore.AUTHMODE_ANY. Penggunaan UTHMODE_PRIVATE akanmenyebabkan Record Store hanya mampu diakses oleh MIDlet suite sipemilik MIDlet. Sedangkan setting authmode ke AUTHMODE_ANY akanmenyebabkan Record Store untuk diakses oleh MIDlet manapun. Access modeini dispesifikasikan oleh sebuah writable boolean parameter. Untukmemperbolehkan MIDlet yang lain (diluar MIDlet suite) untuk menggunakanrecord store tersebut, parameter ini harus diubah menjadi true. Penggunaan bentuk pertama dari method openRecordStore()akan menyebabkanRecord Store untuk dapat diakses oleh MIDlet-MIDlet didalam suite yangsama (authmode di-set ke AUTHMODE_PRIVATE). Untuk membuka sebuah Record Store dari MIDlet suite yang berbeda,bentuk ketiga dari method openRecordStore harus digunakan. Anda harusmenspesifikasikan nama vendor (vendorName) dan nama dari Midlet suite(suiteName). Jika sebuah Record Store terlanjur dibuka, method ini akanmengembalikan reference kepada record store tersebut. System akan tetapmenghitung berapa kali Record Store telah dibuka dan setiap RecordStore harus ditutup dengan jumlah yang sama pada saat ia dibuka.
Persistent Storage 223

Politeknik Telkom

Mobile Application

Menambahkan sebuah record

Method addRecord akan membuat record yang baru didalam Record Store dan akan mengembalikan record ID. Mengambil kembali Record byte[] int int getRecord(int recordId) getRecord(int recordId, byte[] buffer, int offset) getRecordSize(int recordId) Bentuk pertama dari method getRecord akan mengembalikan copy dari data stored yang ada didalam record tertentu berdasarkan RecordID. Bentuk kedua akan meng-copy data pada paramater byte array yang telah disediakan. Pada saat menggunakan bentuk kedua, byte array tersebut haruslah dialokasikan terlebih dahulu. Jika ukuran dari record lebih besar daripada ukuran dari parameter, maka akan terjadi ArrayIndexOutOfBoundsException. Anda akan menggunakan method getRecordSize secara berurutan untuk mengetahui ukuran dari record sebelum Anda mulai untuk membacanya. Meng-update sebuah Record Anda tidak dapat memodifikasi hanya sebagian dari data record. Jika Anda ingin untuk memodifikasi sebuah record Anda harus: 1 Membaca tiap record dengan menggunakan getRecord 2 Meng-update record didalam memory 3 Memanggil setRecord untuk mengupdate data record

224

Persistent Storage

Politeknik Telkom

Mobile Application

Menghapus Record

Pada saat sebuah record dihapus, record Id akan digunakan kembali di pemanggilanberikutnya pada addRecord. Hal ini berarti, ada sebuah celah didalam Record Id.Oleh karena itu, tidak disarankan untuk menggunakan counter increment untuk membuat list dari keseluruhan record didalam record store. Anda harus menggunakan Record Enumerator untuk mengetahui tiap record didalam sebuah list store. Menutup sebuah Record Store

Record store yang akan ditutup dengan cara pemanggilan method closeRecordStore() tidak akan benar-benar ditutup sampai closeRecordStore() dipanggil sejumlah pemanggilan dari openRecordStore() sebelumnya. Pemanggilan closeRecordStore() lebih dari jumlah pemanggilan openRecordStore() akan berakibat exception RecordStoreNotOpen. Potongan kode dari contoh RmsExample1 adalah MIDlet sederhana yang mendemonstrasikan bagaimana untuk membuat sebuah record store, menambah record, dan memanggil kembali semua record didalam record store: // Buka dan buatlah record store dengan nama “RmsExample1”
recStore= RecordStore.openRecordStore("RmsExample1", true);

// Masukkan content kedalam record store
for(int recId=1; recId<=recStore.getNumRecords(); recId++){

// getRecord memiliki return value berupa panjang dari recordrecLength =
recStore.getRecord(recId, data, 0);

// Mengkonversikan byte array menjadi String

String item = new String(data, 0, recLength); ...
Persistent Storage 225

Politeknik Telkom

Mobile Application

}

// Ini adalah String yang akan kita masukkan kedalam record
String newItem = "Record #" + recStore.getNextRecordID();

...

// Konversikan String ke byte array
byte[] bytes = newItem.getBytes();

// Tulislah record kedalam record store
recStore.addRecord(bytes, 0, bytes.length);

Tips Pemrograman: 1. Record ID dimulai dari 1, bukan 0. Oleh karena itu, apabila menggunakan loop, ingatlah untuk menggunakan 1 sebagai index pertama dan bukan 0. 2. Lebihbaik digunakan Record Enumerator daripada menggunakan index incrementing (seperti contoh). Record yang telah dihapus, tetapi masih tetap ingin dibaca pada contoh disini akan menyebabkan InvalidRecordIDException. Mendapatkan list dari Record Store didalam MIDlet Suite

Method ini akan mengembalikan array dari nama record store tersebut yang dimiliki oleh MIDlet suite. Jika MIDlet suite tidak memiliki sebuah Record Store, maka method ini akan memiliki nilai pengembalian null.
String[] storeNames = RecordStore.listRecordStores(); System.out.println("Record Stores for this MIDlet suite:"); for (int i=0; storeNames != null && i<storeNames.length; i++){ System.out.println(storeNames[i]); }
226 Persistent Storage

Politeknik Telkom

Mobile Application

Contoh: RmsListStores Record Stores for this MIDlet suite: Prefs RmsExample1 RmsExample2 Contoh output dari RmsListStores Urutan penamaan yang akan dikembalikan tidak akan didefinisikan dan akan diimplementasikan secara independent. Oleh karena itu, apabila Anda ingin untuk menampilkan nama tersebut secara alphabetic, maka Anda harus melakukan sorting array terlebih dahulu. Menyimpan Data Primitif Java Sejauh ini, data yang telah dibuat dan dibaca dari Record Store adalah berupa String. CLDC memiliki standard classes dalam manipulasi data primitif. Class tersebut berasal dari standard library platform Java 2, yaitu Standard Edition (J2SE). Anda dapat menulis data Java primitif dengan mengkombinasikan class ByteArrayOutputStream dan DataOutputStream. Pembacaan tipe data primitive(int, long, short, string, Boolean, dan sebagainya) dapat pula dilakukan dengan menggunakan ByteArrayInputStream dan DataInputStream.
ByteArrayOutputStream out = new ByteArrayOutputStream(); DataOutputStream dOut = new DataOutputStream(out); // Menyimpan sebuah integer dOut.writeInt(recStore.getNextRecordID() * recStore.getNextRecordID()); // Menyimpan sebuah string dOut.writeUTF("Record #" + recStore.getNextRecordID()); byte[] bytes = out.toByteArray(); // Menuliskan Record pada Store recStore.addRecord(bytes, 0, bytes.length); ...

Persistent Storage

227

Politeknik Telkom

Mobile Application

// Menuju Record selanjutnya byte[] recBytes = enumerator.nextRecord(); ByteArrayInputStream in = new ByteArrayInputStream(recBytes); DataInputStream dIn = new DataInputStream(in); int count = dIn.readInt(); String item = dIn.readUTF();

Method lain untuk Record Stores
long getLastModified() int getVersion()

Sistem merekam bilamana sebuah Record Store mengalami modifikasi terakhir. Method getLastModified memberikan informasi bahwa sebuah Record Store mengalami perubahan terakhir, dalam bentuk long dan sesuai format yang digunakan oleh system.currentTimeMillis(). Seluruh Record Store memiliki version information. Setiap kali sebuah record mengalami modifikasi, maka version number juga akan terupdate. Penggunaan method addRecord, setRecord dan deleteRecord menyebabkan penambahan version number dari record store tersebut.
static void deleteRecordStore(String recordStoreName)Menghapus record store. String getName()Mengetahui nama dari RecordStore. int getNextRecordID()Mengetahui recordId dari record selanjutnya untuk disimpan pada record store. int getNumRecords()Mendapatkan jumlah record yang terdapat pada Record Store. int getSize()Mengetahui space (dalam bytes) yang dipakai oleh record store. int getSizeAvailable()Mengetahui sisa space yang tersedia (dalam bytes).

228

Persistent Storage

Politeknik Telkom

Mobile Application

void setMode(int authmode, boolean writable) Mengubah access mode dari RecordStore.

12.2 Record Enumeration
Memeriksa sebuah record store menggunakan incerementing index adalah tidak efisien. Record stores yang telah dihapus akan terlewati jika Record Id dari record tersebut tidak digunakan kembali. Penggunaan record enumeration dapat menyelesaikan permasalahan tersebut dengan melakukan pemeriksaaan pada record yang telah dihapus. Anda juga dapat mengurutkan enumerasi dengan menggunakan method pembanding. Dengan penggunaan method pembanding, anda dapat melewati record yang tidak diharapkan pada output.
RecordEnumeration enumerateRecords(RecordFilter filter, RecordComparator comparator, boolean keepUpdated)

Method enumerateRecords dari sebuah record store akan menghasilkan enumerasi untuk memeriksa seluruh record pada sebuah record store. Ini adalah cara yang direkomendasikan untuk melewatkan seluruh record dalam record store. Filter dan Comparator akan dibahas dalam pembahasan selanjutnya. Cara paling sederhana dalam menggunakan method ini adalah memberikan nilai null untuk filter dan comparator. Hal ini akan menghasilkan enumerasi dari seluruh record pada sebuah store dalam urutan acak.
// Membuka atau membuat sebuah record store dengan nama "RmsExample2" recStore = RecordStore.openRecordStore("RmsExample2", true); // Mengambil isi dari record store RecordEnumeration enumerator = recStore.enumerateRecords(null, null,
Persistent Storage 229

Politeknik Telkom

Mobile Application

false); while (enumerator.hasNextElement()){ // Mendapatkan record selanjutnya dan konversi byte array menjadi string String item = new String(enumerator.nextRecord()); // Area kode manipulasi record ... }

12.3 Record Comparator
Pengurutan sebuah enumerasi dapat didefinisikan menggunakan sebuah Record Comparator. Record Comparator digunakan pada method enumerateRecords. Jika anda ingin mengurutkan output dari enumerasi, anda harus membuat comparator dan mengimplementasikannya sebagai parameter kedua pada enumerateRecords.
int compare(byte[] rec1, byte[] rec2)

Untuk membuat sebuah record comparator, anda harus mengimplementasikan interface RecordComparator. Interface tersebut mendefinisikan method tunggal, compare(byte[] rec1, byte[] rec2). Method ini harus menghasilkan return value, RecordComparator.FOLLOWS atau RecordComparator.PRECEDES. RecordComparator.EQUIVALENT harus dihasilkan jika rec1 adalah ekuivalen terhadap rec2 dalam pengurutan.
// Membuat enumerasi, diurutkan menurut alfabet RecordEnumeration enumerator = recStore.enumerateRecords(null , new AlphaOrder(), false); ...
230 Persistent Storage

Politeknik Telkom

Mobile Application

// Pengurutan menurut alfabet class AlphaOrder implements RecordComparator { public int compare(byte[] rec1, byte[] rec2){ String record1 = new String(rec1).toUpperCase(); String record2 = new String(rec2).toUpperCase(); if (record1.compareTo(record2) < 0){ return(PRECEDES); } else { if (record1.compareTo(record2) > 0){ return(FOLLOWS); } else { return(EQUIVALENT); } } } }

12.4 Record Filter
Contoh – contoh selama ini membaca seluruh record dari sebuah store. Kita dapat menggunakan sebuah filter untuk mendapatkan hanya record yang kita inginkan. Program Anda harus mengimpelementasikan method match() untuk menyeleksi record. Method tersebut akan menghasilkan nilai true jika record sesuai dengan criteria.
boolean matches(byte[] candidate) public boolean matches(byte[] candidate){ boolean isaMatch = false; try {

Persistent Storage

231

Politeknik Telkom

Mobile Application

ByteArrayInputStream bin = new ByteArrayInputStream(candidate); DataInputStream dIn = new DataInputStream(bin); int count = dIn.readInt(); String item = dIn.readUTF(); // mendapatkan record dengan akhiran “0” if (item.endsWith("0")){isaMatch = true; } else { isaMatch = false; } } catch (Exception e){items.append(e.toString(), null); } return(isaMatch); }

12.5 Record Listener
Sebuah Record Store dapat menggunakan lebih dari satu record listener. Record listener adalah object yang dipanggil pada saat sebuah record ditambahkan, diubah atau dihapus dari record store. Record listeners harus mengimplementasikan interface RecordListener. Record Listener diregristrasikan pada record store menggunakan method addRecordListener(). Pada saat sebuah record store ditutup, seluruh record listener yang terkait juga akan dihapus. Penggunaan method deleteRecordStore() tidak akan menghasilkan pemanggilan recordDeleted() pada record listener manapun yang terkait.

232

Persistent Storage

Politeknik Telkom

Mobile Application

void void void

recordAdded(RecordStore recordStore, int recordId)Dipanggil saat sebuah record ditambahkan pada record store. recordChanged(RecordStore recordStore, int recordId)Dipanggil setelah sebuah record pada record store diubah. recordDeleted(RecordStore recordStore, int recordId)Dipanggil setelah sebuah record dihapus dari record store.

Persistent Storage

233

Politeknik Telkom

Mobile Application

Rangkuman

1.

2.

3.

4. 5. 6.

7.

Sebuah Record Store adalah sebuah koleksi daripada record-record. Record Id didalam Record Store selalu unique. Record Id akan secara otomatis dialokasikan pada saat pembentukan sebuah record dan bertindak sebagai index atau primary key. Pemberian record Id dilaksanakan secara sekuensial dan nilai yang diberikan kepada record Id pertama pada setiap Record Store adalah 1 (satu). Pada saat sebuah record dihapus, record id-nya tidak akan bisa digunakan kembali. Jika kita membuat empat buah record dan menghapus record ke-empat, maka record Id selanjutnya yang akan diberikan oleh system adalah 5 MIDlets dapat menciptakan lebih dari satu Record Store. Nama dari sebuah record store didalam MIDlet suite haruslah unique. Nama dari record store juga case sensitive dan memiliki panjang maksimal 32 karakter. Pada saat MIDlet suite dihapus dari sebuah device, maka semua record store yang terkoneksi dengan MIDlet didalam suite tersebut juga akan terhapus. Memeriksa sebuah record store menggunakan incerementing index adalah tidak efisien. Record stores yang telah dihapus akan terlewati jika Record Id dari record tersebut tidak digunakan kembali. Pengurutan sebuah enumerasi dapat didefinisikan menggunakan sebuah Record Comparator. Record Comparator digunakan pada method enumerateRecords. Jika anda ingin mengurutkan output dari enumerasi, anda harus membuat comparator dan mengimplementasikannya sebagai parameter kedua pada enumerateRecords. Sebuah Record Store dapat menggunakan lebih dari satu record listener. Record listener adalah object yang dipanggil pada saat sebuah record ditambahkan, diubah atau dihapus dari record store. Record listeners harus mengimplementasikan interface RecordListener.

234

Persistent Storage

Politeknik Telkom

Mobile Application

Kuis Benar Salah

1. 2. 3. 4.

5.

Sebuah Record Store adalah sebuah koleksi daripada record-record. Record Id didalam Record Store selalu unique. Record Id akan secara otomatis dialokasikan pada saat pembentukan sebuah record dan bertindak sebagai index atau primary key. Pemberian record Id dilaksanakan secara sekuensial dan nilai yang diberikan kepada record Id pertama pada setiap Record Store adalah 1 (satu). Pada saat sebuah record dihapus, record id-nya tidak akan bisa digunakan kembali. Jika kita membuat empat buah record dan menghapus record ke-empat, maka record Id selanjutnya yang akan diberikan oleh system adalah 5 (lihat gambar) MIDlets dapat menciptakan lebih dari satu Record Store. Nama dari sebuah record store didalam MIDlet suite haruslah unique. Nama dari record store juga case sensitive dan memiliki panjang maksimal 32 karakter.

Persistent Storage

235

Politeknik Telkom

Mobile Application

Pilihan Ganda

1.

Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Sebuah Record Store adalah sebuah koleksi daripada record-record. B. Pemberian record Id dilaksanakan secara sekuensial dan nilai yang diberikan kepada record Id pertama pada setiap Record Store adalah 1 (satu). C. D. E. F. 2. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Record Id didalam Record Store selalu unique. Record Id akan secara otomatis dialokasikan pada saat pembentukan sebuah record dan bertindak sebagai index atau primary key. B. Pada saat sebuah record dihapus, record id-nya tidak akan bisa digunakan kembali. Jika kita membuat empat buah record dan menghapus record ke-empat, maka record Id selanjutnya yang akan diberikan oleh system adalah 5. C. D. E. F. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah

236

Persistent Storage

Politeknik Telkom

Mobile Application

3.

Pilih jawaban yang paling tepat sehubungan dengan pernyaataan berikut A. Client(web browser) akan me-request sebuah web page dengan cara mespesifikasikan path dengan command Get atau POST. Pada method GET, parameter telah dispesifikasikan dan dilekatkan pada URL. B. HTTPS adalah sebuah HTTP diatas sebuah koneksi secure transport. C. D. E. F. 4. Pernyataan A dan B benar Pernyataan A benar dan pernyataan B salah Pernyataan A salah dan Pernyataan B benar Pernyataan A dan B salah sebagian dari data record. Jika Anda ingin untuk memodifikasi sebuah record Anda harus: 1. 2. 3. openRecordStore(String recordStoreName,boolean createIfNecessary) openRecordStore(String recordStoreName,boolean createIfNecessary, int authmode,boolean writable) openRecordStore(String recordStoreName,String vendorName, String suiteName) A. B. C. D. 1,2,3 2,3 1,2 1,3

Persistent Storage

237

Politeknik Telkom

Mobile Application

Latihan

Penyimpanan Pilihan Buat sebuah class yang dapat melangsungkan pemilihan pada program. Class tersebut akan menyimpan pilihan pada sebuah Record Store. Setiap record akan memiliki variabel name dan value. Setiap pasangan variabel disimpan pada sebuah record. Name dan value disimpan pada database sebagai string. Class Anda harus mengimplementasikan method sebagai berikut : public String readVar(RecordStore recStore, String name, String defaultValue){ public void writeString(RecordStore recStore, String name, String value);

238

Persistent Storage

Politeknik Telkom

Mobile Application

Daftar Pustaka
1. 2. Kim, Topley, J2ME in a Nutshell, O’Reilly. 2002. J2ME: Step by step

239

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close