PENGENALAN J2ME
A. TUJUAN
- Mengetahui dan memahami cara indentifikasi karakteristik dari mobile dan dapar
mendeskripsikan arsitektur dari J2ME
- Mengetahui ruang lingkup aplikasi mobile dengan J2ME
C. DASAR TEORI
Java merupakan bahasa pemrograman yang diciptakan oleh James Gosling pada tahun
1996 dan mengklaim dirinya mengimplementasikan konsep PBO. Sampai saat ini pengembangan
Java berada dibawah Sun Microsystems walaupun akhirakhir ini Java mulai di opensourcekan.
Java dapat diimplementasikan pada berbagai aspek kehidupan mulai dari komputer mainframe,
PC, telepon genggam/HP, PDA, smart card sampai dengan perlengkapan rumah tangga seperti
mesin cuci dan TiVo. Java menjanjikan sifat platform independent yang berarti program cukup
ditulis satu kali dan decompile satu kali maka akan dapat dijalankan di mesin lain tanpa
memerlukan pengubahan kode.
Sampai saat ini Java terbagi menjadi empat kategori yaitu Java 2 Platform Standard
Edition (J2SE) untuk aplikasi desktop, Java 2 Platform Enterprise Edition (J2EE) untuk aplikasi
server kelas enterprise yang biasanya berskala besar, Java 2 Platform Micro Edition (J2ME)
untuk aplikasi pada perangkat yang memiliki tingkat komputasi tidak setinggi komputer,
misalnya telepon genggam, PDA dan TiVo, dan yang terakhir adalah Java Card yang digunakan
untuk pemrograman smart card berbasis Java.
J2ME dibagi menjadi dua kategori berdasarkan kapabilitas dari produkproduk tempat
diimplementasikannya J2ME. Pembagian kategori ini dilakukan oleh Java Community Process
(JCP). Kategori pertama disebut HighEnd consumer devices. Kategori ini memiliki sumber daya
yang cukup besar hampir menyamai komputer dalam hal sumber daya listrik, memori maupun
bandwidth. Kategori ini diberi label Connected Device Configuration (CDC). Contoh produknya
adalah Internet TV.
Kategori kedua disebut LowEnd consumer devices. Kategori ini memiliki sumber daya
yang sangat kecil. Kategori ini diberi nama Connected, Limited Device Configuration (CLDC).
Contoh produknya adalah telepon genggam / HP dan twoway pager. Pada modul ini kategori
yang dibahas hanya CLDC pada perangkat telepon genggam/HP.
CLDC melingkupi perangkatperangkat dengan sumber daya terbatas. Sumber daya yang
dimaksud disini adalah memori, antarmuka pengguna, daya listrik dan kemampuan prosesor.
Karakteristik perangkat CLDC yaitu memori min. 192KB, 1632 bit prosesor, daya listrik yang
rendah dan koneksivitas jaringan yang tidak stabil.
Ada dua versi CLDC yaitu CLDC 1.0 dan 1.1. Vendor perangkat mobile yang
menentukan versi mana yang ingin diimplementasikan. Pada CLDC 1.1 dilakukan beberapa
upgrade dari versi sebelumnya 1.0 antara lain:
a. Fitur floating point
b. Persyaratan memori min. 192 KB
c. Fitur untuk weak reference
d. Fitur detil pada code verifier
e. Errorhandling yang lebih baik
f. Thread naming dan
g. InterruptionStandard
CLDC yang diperuntukkan untuk beberapa perangkat membuatnya kesulitan
mengeksploitasi kemampuan lebih yang dimiliki. Perangkat yang kurang begitu terfasilitasi
dengan standard CLDC ini antara lain telepon genggam/HP. Untuk memberikan kemampuan
mengeksploitasi kemampuan terpendam dari perangkat ini, HP, maka Sun Microsystems
mengeluarkan satu standard lagi yang diberi nama Mobile Information Device Profile (MIDP).
MIDP memungkinkan eksploitasi kemampuan pada perangkatperangkat CLDC yang
berbedabeda misalnya pada HP. Sampai saat ini ada tiga versi MIDP yang beredar luas dipasaran
yaitu versi 1.0, 2.0 dan versi 2.1. Upgrade pada MIDP 2.0 antara lain Advanced networking,
Aplikasi yang dibuat dengan menggunakan J2ME dengan standar MIDP disebut MIDlet.
Kumpulan dari beberapa MIDlet disebut MIDlet Suite. Untuk membuat MIDlet diperlukan satu
kelas yang menjadi turunan dari kelas java.microedition.midlet.MIDlet. MIDlet mempunyai
siklus hidup/life cycle. Suatu MIDlet setelah diciptakan akan berada di salah satu status (active,
paused, destroyed). Begitu obyek suatu MIDlet diciptakan akan memasuki status paused
menunggu perintah berikutnya. MIDlet memasuki status active ketika setelah method startApp()
dipanggil. MIDlet akan kembali ke status pause jika method pauseApp() dipanggil. Setelah
semua proses di dalam MIDlet selesai dilakukan dan MIDlet dimatikan maka MIDlet berada
dalam status destroyed. Status destroyed ini dimasuki MIDlet pada pemanggilan method
destroyApp(boolean).
D. PRAKTIKUM
Membuat Project Baru
Project merupakan kerangka dasar aplikasi yang sangat menentukan jenis aplikasi yang akan
dibuat. Untuk memulai pembuatan project, ikuti langkah-langkah berikut:
1. Jalankan aplikasi Wireless Toolkit 2.5.2.
2. Klik menu File > New Project, atau melalui ikon New Project, atau melalui kombinasi
tombol Ctrl+N.
3. Pada kotak dialog New Project, di Project Name ketikkan nama project, dan pada MIDlet
Class Name juga ketikkan MIDlet Classnya, kemudian klik Create Project.
4. Jalankan JCreator atau Notepad. Ketikkan coding di bawah ini :
A. TUJUAN
- Mengetahui dan mampu menciptakan MIDlet sederhana dan menjalankan MIDlet di
emulator
- Mampu menciptakan MIDlet sederhana dan menciptakan project di netbeans serta
menjalankan MIDlet di Emulator
C. DASAR TEORI
Pada subbab ini akan kita tunjukkan salah satu aplikasi J2ME yang sangat sederhana.
Meneruskan tradisi belajar bahasa pemrograman, kita akan membuat program yang menampilkan
tulisan Hello World dengan J2ME. Berikut akan ditampilkan kode dari aplikasi Hello World
beserta tampilannya dalam emulator WTK. Selanjutnya akan diberikan penjelasan mengenai
kode program Hello World.
Pada aplikasi diatas kita gunakan perangkat pengembangan WTK dari Sun
Microsystems. Aplikasi Hello World sangat sederhana sehingga dapat di install di berbagai
perangkat mobile tanpa ada masalah yang berarti dan tanpa penyesuaian. Hal ini kemungkinan
tidak berlaku jika aplikasi J2ME yang dibuat adalah aplikasi besar, kompleks dan menggunakan
fiturfitur tertentu.
Aplikasi Hello World terdiri dari satu kelas yang bernama HelloWorld. Karena kita
bertujuan membuat MIDlet maka kelas tersebut harus merupakan turunan dari
javax.microedition.midlet.MIDlet. HelloWorld harus mengimplementasikan tiga method dari
orang tuanya yaitu startApp(), pauseApp() dan destroyApp(). Untuk menangani interaksi dengan
pengguna aplikasi ini dilengkapi dengan satu obyek Command bernama exitCommand.
HelloWorld juga mengimplementasikan interface bernama ComandListener. CommandListener
ini berisi satu method bernama commandAction() yang berisi perintah respon jika suatu obyek
Command dieksekusi dalam hal ini obyek Command tersebut adalah exitCommand dan
responnya adalah untuk menutup aplikasi MIDlet Hello World.
Bila diperhatikan method startApp() yang merupakan entry point dari semua aplikasi
MIDlet tidak berisi kode. Hal ini dikarenakan secara otomatis konstruktor HelloWorld pasti
dipanggil pertama kali dan di dalamnya sudah terdapt kode untuk mengatur obyekobyek yang
diperlukan dan menampilkannya.
D. PRAKTIKUM
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.
Gambar II-10. Membuat Midlet Secara Otomatis Membuat Method Midlet yang Diperlukan
Langkah 10: Mengganti Code yang Dibuat Secara Otomatis dengan Code Program Kita.
Gambar II-11. Mengganti Code Yang Dibuat Secara Otomatis dengan Code Program Kita.
A. TUJUAN
- Mengetahui penggunaan High Level dan Low Level User Interface classes
- Mengetahui keuntungan dan kerugian menggunakan High Level dan Low Level User
Interface
C. DASAR TEORI
J2ME, dalam MIDP, seperti halnya kategori java lainnya (J2SE) mendefinisikan
serangkaian library untuk membuat tampilan antarmuka penguna/user interface. Pada MIDP
terdapat dua jenis library antarmuka pengguna yaitu:
a. Antarmuka tingkat atas/Highlevel User Interface
b. Antarmuka tingkat bawah/Lowlevel interface
Antarmuka tingkat atas terdiri dari komponenkomponen yang telah terdefinisi/well
defined dan siap langsung digunakan dalam MIDlet. Komponen ini mampu merespon input dari
pengguna langsung tanpa penambahan kode. Semua komponenkomponen yang berada pada
tingkat atas ini merupakan turunan dari sebuah kelas yang bernama Screen. Pada bab ini khusus
dibahas antarmuka tingkat atas ini.
Antarmuka tingkat bawah menyediakan kendali lebih dalam pembentukan komponen
baik tampilan maupun interaksinya. Antarmuka jenis ini biasanya digunakan untuk pembuatan
antarmuka pengguna grafis/graphical user interface pada aplikasi game maupun aplikasiaplikasi
lain yang memerlukan komponen antarmuka yang tidak terdapat pada antarmuka pengguna
tingkat atas. Antarmuka tingkat ini direpresentasikan oleh Canvas dan turunannya yaitu
GameCanvas.
Berikut kelas pada antarmuka tingkat atas :
1. Display, Displayable dan Ticker
Display adalah representasi dari layar tampilan perangkat bergerak. Display ini tidak dapat
diciptakan dan hanya ada satu (singleton). Obyek Displayable adalah sebuah obyek yang
dapat tampil pada obyek Display sendirian tanpa kehadiran obyek lagi. Turunan Displayable
ini ada dua yaitu Screen dan Canvas. Screen dan turunannya masuk ke dalam antarmuka
tingkat atas. Ticker adalah sebuah baris dari text yang dapat discrolling secara terus-menerus
pada display.
2. Item dan Form
Item adalah komponen antarmuka tingkat atas yang bukan merupakan turunan Displayable.
Item ini mempunyai sifat tidak dapat berdiri sendiri tanpa kehadiran komponen antarmuka
tingkat tinggi lain yaitu Form. Agar Item dapat digunakan, obyek Item harus berada di dalam
Form. Secara teknis yang dimasukkan ke dalam Form bukan obyek/instance dari Item tapi
obyek/instance dari kelas turunan Item. Kelaskelas turunan Item adalah StringItem,
ImageItem, TextField, Datefield, Gauge, ChoiceGroup, Spacer dan CustomItem. Masing
masing turunan Item ini memiliki atribut ukuran dan layout masingmasing.
D. PRAKTIKUM
Latihan 1
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public MyChoiceGroup()
{
form = new Form("My Choice Group");
String [] elements = {"Choice 1","Choice 2","Choice 3"};
cg_exclusive = new ChoiceGroup("Exclusive",ChoiceGroup.EXCLUSIVE,elements,null);
form.append(cg_exclusive);
cg_multiple = new ChoiceGroup("Multiple",ChoiceGroup.MULTIPLE,elements,null);
form.append(cg_multiple);
cg_popup = new ChoiceGroup("Popup",ChoiceGroup.POPUP,elements,null);
form.append(cg_popup);
form.addCommand(exit);
form.setCommandListener(this);
}
Latihan 2
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public List ()
{
layar = Display.getDisplay(this);
}
public void startApp()
{
daftar = new List("Jenis kartu SIM", Choice.EXCLUSIVE);
daftar.append("Kartu Simpati", null);
daftar.append("Kartu IM3",null);
daftar.append("Kartu XL", null);
layar.setCurrent(daftar);
}
}
public void destroyApp(boolean unconditional)
{
}
public void commandAction(Command perintah, Displayable s)
{
if(perintah == kembali)
{
destroyApp(false);
notifyDestroyed();
}
if(perintah == pilihan)
{
int pilihanpengguna = daftar.getSelectedIndex();
}
}
Latihan 3
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class TickerDemo extends MIDlet
implements CommandListener{
FirstDateField.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public FirstDateField() {
display = Display.getDisplay(this);
}
FirstDateFieldForm.java
import javax.microedition.lcdui.*;
class FirstDateFieldForm
extends Form
implements CommandListener
{
private Display display;
private Command cmExit;
private FirstDateField midlet;
setCommandListener(this);
}
A. TUJUAN
- Mengetahui dan memahami even handling level rendah dalam MIDP
- Dapat menggambar dan menampilkan teks, gambar, garis, kotak, dan sudut
C. DASAR TEORI
Untuk membuat sebuah tampilan dengan kreasi sendiri, pengembang membutuhkan
pengetahuan dasar tentang Canvas. Canvas menyediakan media untuk menciptakan tampilan
yang sesuai dengan keperluan aplikasi atau keinginan pengguna. Media ini mendukung
kapabilitas di dalam membuat beragam bentuk, teks, dan gambar (statis atau animasi), yang pada
dasarnya merupakan kemampuan obyek Graphics.
Canvas memiliki kemampuan berinteraksi dengan pengguna melalui mekanisme event
handling. Event handling ini dapat berupa antisipasi terhadap key event, game action dan pointer
event. Perangkat komunikasi, telepon seluler ataupun PDA, memiliki resolusi tampilan yang
sangat beragam. Untuk mengetahui dimensi Canvas terkait dengan tampilan perangkat mobile,
disediakan method getWidth() dan getHeight(). MIDP 2.0 menyediakan fungsionalitas full screen
mode. Tetapi tidak semua perangkat mobile mendukung hal ini. Setting mode ini dapat dilakukan
dengan memanggil setFullScreenMode(boolean).
D. PRAKTIKUM
Latihan 1
Buatlah project game dengan mengetikkan coding ini menjadi satu project, tempatkan seluruh
file pada folder src.
MyCanvas.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
scrCanvas.java
import javax.microedition.lcdui.*;
private scrCanvas()
{
Thread thread=new Thread(this);
thread.start();
}
A. TUJUAN
- Mengetahui bagaimana menggunakan GAME API serta menggambar grafik berskala.
- Mengetahui & memahami bagaimana menggunakan GAME API serta menggambar grafik
berskala
C. DASAR TEORI
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 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.
MyCanvas.java :
GameMidlet.java:
A. TUJUAN
- Mengetahui mengenai konsep dari Record Store
- Mengetahui & memahami pemanggilan record satu persatu dengan menggunakan
RecordEnumerate dan membuat sebuah record comparator
C. DASAR TEORI
1) RecordStore
Kelas RecordStore pada RMS berfungsi menyediakan fitur untuk menyimpan,
mengupdate, mengambil dan menghapus data pada perangkat mobile. Kelas RecordStore
merepresentasikan sebuah lokasi penyimpanan data permanen. Satu RecordStore dapat
digunakan oleh lebih dari satu MIDlet baik pada saat bersamaan maupun terpisah. Berdasarkan
spesifikasi MIDP, vendor perangkat mobile bertanggung jawab pada pemeliharaan integritas
obyek RecordStore.
Antar MIDlet dapat berbagi RecordStore. Pada versi MIDP lama, sebelum MIDP 2.0,
MIDlet hanya dapat mengakses obyek RecordStore selama MIDlet tersebut adalah pemilik obyek
RecordStore atau masih dalam satu MIDlet suite dengan MIDlet pemilik obyek RecordStore.
Pada MIDP 2.0 terdapat fitur baru di mana RecordStore dapat dibagi dengan MIDlet lain dari
MIDlet suite yang berbeda dengan MIDlet pemilik RecordStore. Gambar IV1 mengilustrasikan
dua MIDlet suite berbagi RecordStore.
Dalam kelas RecordStore didefinisikan tiga static method untuk membuat dan membuka
obyek RecordStore. Methodmethod tersebut adalah sebagai berikut:
a. static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary)
b. static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary, int
authMode, boolean writable)
c. static RecordStore openRecordStore(String recordStoreName, String vendorName, String
suiteName)
Masingmasing method diatas memiliki kegunaan sendirisendiri. Method pertama
merupakan method untuk membuka dan membuat RecordStore yang dibuat oleh MIDlet itu
sendiri atau MIDlet lain yang masih dalam satu MIDlet suite. Method kedua merupakan method
untuk membuat dan mengakses RecordStore yang shared antar MIDlet suite. Method ketiga
khusus digunakan untuk mengakses RecordStore yang shared antar MIDlet suite. Pemanggilan
method openRecordStore() dapat menimbulkan exception dikarenakan beberapa hal seperti
kapasitas memori perangkat mobile yang sudah penuh (RecordStoreFullException) ataupun
internal error (RecordStoreException).
Mekanisme dari method pertama ketika dipanggil adalah mencari RecordStore dengan
nama sesuai dengan parameter recordStoreName yang dimasukkan. Jika RecordStore dengan
nama tersebut ditemukan maka RecordStore itu akan dibuka. Jika tidak terdapat RecordStore
dengan nama tersebut maka akan dilihat nilai dari parameter createIfNecessary yang diberikan.
Jika nilainya true maka akan dibuat sebuah RecordStore baru dengan nama seperti pada
parameter recordStoreName. Jika nilainya false maka tidak akan dibuat RecordStore baru.
Pemberian nama untuk RecordStore harus memenuhi persyaratan sebagai berikut:
a. Panjang sebuah nama 32 Unicode character
b. Nama harus memperhatikan huruf kapital dan huruf non kapital (case sensitive)
c. Nama harus unik di dalam sebuah MIDlet suite
Method kedua digunakan untuk membuka (mungkin juga menciptakan) RecordStore
yang dapat diakses oleh MIDlet baik dalam MIDlet suite yang sama ataupun MIDlet suite yang
berbeda. RecordStore yang tercipta dari pemanggilan method ini menjadi milik MIDlet suite
yang menciptakannya meskipun dapat diakses oleh MIDlet suite lain. Pada method kedua
2) RecordEnumeration
RecordStore menyediakan sebuah interface untuk melakukan iterasi pengambilan record
yang ada dalam suatu RecordStore. Interface itu adalah RecordEnumeration. Interface
RecordEnumeration menyediakan satu set API yang mirip dengan interface Enumeration pada
J2SE dalam paket java.util. Interface RecordEnumeration memfasilitasi proses pengulangan
dalam obyek RecordStore tanpa harus mengetahui nilai record ID. Namun, dalam penggunaan
RecordEnumeration perlu berhatihati karena interface ini dapat menyebabkan overhead/beban
kerja yang cukup besar pada perangkat mobile, khususnya dalam hal kinerja/processing dan
penggunaan memori.
Interface RecordEnumeration menggunakan method nextRecord() dan previousRecord()
untuk membaca record berikutnya (next) dan sebelumnya (previous) di dalam suatu enumerasi.
Kedua method tersebut adalah sebagai berikut.
a. byte[] nextRecord()
b. byte[] previousRecord()
D. PRAKTIKUM
Latihan 1
Buatlah project buku telepon dengan mengetikkan coding ini menjadi satu project, tempatkan
seluruh file pada folder src.
BukuTelepon.java
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.rms.*;
import java.io.*;
public BukuTelepon()
{
}
//Membuat method simpan
public void Simpan(String input1,String input2,String input3)
{
try
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeUTF(input1);
dos.writeUTF(input2);
dos.writeUTF(input3);
dos.flush();
RecordStore rs = RecordStore.openRecordStore("bukutelepon",true);
//bukutelepon sebagai nama database dalam konsep RMS
rs.addRecord(bos.toByteArray(),0,bos.toByteArray().length);
//Menutup koneksi
rs.closeRecordStore();
bos.close();
dos.close();
tampil.setCurrent(new Alert("Informasi","Data berhasil
disimpan",null,AlertType.INFO));
}
}
//Membuat method Hapus
public void Hapus(int i)
{
try
{
RecordStore rs = RecordStore.openRecordStore("bukutelepon",true);
rs.deleteRecord(i);
rs.closeRecordStore();
tampil.setCurrent(new Alert("Informasi","Data berhasil
dihapus",null,AlertType.INFO));
}
catch(Exception ex)
{
Update(txtNama.getString(),txtEmail.getString(),txtNoTelp.getString(),i);
txtNama.setString("");
txtEmail.setString("");
txtNoTelp.setString("");
}
else
{
tampil.setCurrent(new Alert("Error","Data belum
dipilih",null,AlertType.ERROR));
}
}
else if(cmd == comHapus)
{
if(i>0)
{
//Method Hapus
Hapus(i);
txtNama.setString("");
txtEmail.setString("");
txtNoTelp.setString("");
}
else
{
tampil.setCurrent(new Alert("Error","Data belum
dipilih",null,AlertType.ERROR));
}
Praktikum 7
Pembuatan Aplikasi Mobile J2ME Dalam Symbian Platform
A. TUJUAN
- Mengetahui dan memahami fungsi yang disediakan oleh Mobile Media API
- Mengetahui fungsionalitas yang disediakan oleh Mobile Media API (MMAPI)
C. DASAR TEORI
Perkembangan perangkat bergerak saat ini mengarah kepada komunikasi multimedia.
Pengguna dapat mengirim atau menerima informasi yang tidak hanya berbasis pada teks atau
audio saja, melainkan video. Beberapa perangkat bergerak saat ini sudah diperkaya dengan fitur
kamera dan kemampuan multimedia player, seperti MP3 dan video.
Di J2ME, profil MMAPI (Mobile Media API) memperluas cakupan ke arah
pengembangan mobile mutimedia. MMAPI yang didefinisikan dalam JSR135 menyediakan
sekumpulan interface dan kelas yang mendukung pemutaran berbagai tipe media. Di dalam
MIDP 2.0 terdapat subset spesifikasi MMAPI yang dibatasi. MMAPI mendefinisikan kelas dan
interface dalam package javax.microedition.media dan javax.microedition.media.player.
Packagepackage ini menyediakan bagian yang lebih kecil dari API yang didefinisikan dalam
JSR135. Manfaat dari subset yang terbatas dari API ini adalah aplikasi yang dibangun pada
MIDP 2.0 dapat dijalankan pada perangkat yang mendukung MMAPI sehingga memperbanyak
jumlah perangkat yang mendukung aplikasi MIDP 2.0.
D. PRAKTIKUM
Latihan 1
Buatlah project dengan mengetikkan coding ini menjadi satu project, tempatkan file pada
folder src.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
public MainkanMusik()
{
disp1 = Display.getDisplay(this);
}
PRAKTIKUM 8
Pembuatan Aplikasi Mobile J2ME Dalam Microsoft Windows CE
Platform
A. TUJUAN
- Mengetahui dan memahami fungsi yang disediakan oleh Mobile Media API
- Mengetahui fungsionalitas yang disediakan oleh Mobile Media API (MMAPI)
C. DASAR TEORI
Perkembangan perangkat bergerak saat ini mengarah kepada komunikasi multimedia.
Pengguna dapat mengirim atau menerima informasi yang tidak hanya berbasis pada teks atau
audio saja, melainkan video. Beberapa perangkat bergerak saat ini sudah diperkaya dengan fitur
kamera dan kemampuan multimedia player, seperti MP3 dan video.
Di J2ME, profil MMAPI (Mobile Media API) memperluas cakupan ke arah
pengembangan mobile mutimedia. MMAPI yang didefinisikan dalam JSR135 menyediakan
sekumpulan interface dan kelas yang mendukung pemutaran berbagai tipe media. Di dalam
MIDP 2.0 terdapat subset spesifikasi MMAPI yang dibatasi. MMAPI mendefinisikan kelas dan
D. PRAKTIKUM
Latihan 1
Buatlah project dengan mengetikkan coding ini menjadi satu project, tempatkan file pada
folder src.
import java.util.Hashtable;
import java.util.Enumeration;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.media.Player;
import javax.microedition.media.Control;
public MainkanVideo() {
display = Display.getDisplay(this);
form.addCommand(stopCommand);
form.addCommand(pauseCommand);
form.setCommandListener(this);
items.put("Movie.mpeg", "file://Movie.mpeg");
itemsInfo.put("Movie.mpeg", "video/mpeg");
}
itemList.setCommandListener(this);
display.setCurrent(itemList);
}
try {
playMedia((String)items.get(key), key);
} catch (Exception e) {
}
} else if(disp instanceof Form) {
try {
if(command == stopCommand) {
player.close();
display.setCurrent(itemList);
form.removeCommand(startCommand);
form.addCommand(pauseCommand);
player.stop();
form.removeCommand(pauseCommand);
form.addCommand(startCommand);
} else if(command == startCommand) {
player.start();
form.removeCommand(startCommand);
form.addCommand(pauseCommand);
}
player =
Manager.createPlayer(
getClass().getResourceAsStream(file), (String)itemsInfo.get(key));
player.addPlayerListener(this);
player.setLoopCount(-1);
player.prefetch();
player.realize();
player.start();
if(event.equals(PlayerListener.STARTED) &&
new Long(0L).equals((Long)eventData)) {
VideoControl vc = null;
if((vc = (VideoControl)player.getControl("VideoControl")) != null) {
Item videoDisp =
(Item)vc.initDisplayMode(vc.USE_GUI_PRIMITIVE, null);
form.append(videoDisp);
}
display.setCurrent(form);
} else if(event.equals(PlayerListener.CLOSED)) {
form.deleteAll();
}
}
A. TUJUAN
- Mengetahui cara mengirim dan menerima pesan / SMS.
- Dapat mengirim dan menerima pesan SMS
C. DASAR TEORI
Kebanyakan perangkat saat ini telah mendukung penggunaan teks. Hampir semua telepon
seluler yang beredar saat ini telah mendukung penggunaan SMS Kebutuhan memori yang relatif
kecil memuat konten berbasis teks lebih mudah diimplementasikan. Namun keterbatasan jumlah
karakter yan dapat ditampilkan harus menjadi pertimbangan dalam menampilkan konten
pembelajaran sehingga perlu strategi khusus agar konten pembelajaran dapat disampaikan secara
tepat dan efektif meskipun dengan keterbatasan ini. Salah satu contoh aplikasi pembelajaran
D. PRAKTIKUM
Latihan 1
Buatlah project dengan mengetikkan coding ini menjadi satu project, tempatkan file pada
folder src, beri nama project ReceiveSMS, pada kotak user defined di property tambahkan
smsPort dengan value 800.
ReceiveSMS.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
public ReceiveSMS() {
display = Display.getDisplay(this);
}
import java.io.IOException;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import javax.wireless.messaging.*;
SMSFormReceive.java
try {
smsconn = (MessageConnection) Connector.open(address);
smsconn.setMessageListener(this);
} catch (Exception e) {
}
Buatlah project dengan mengetikkan coding ini menjadi satu project, tempatkan file pada
folder src, beri nama project SendSMS, pada kotak user defined di property tambahkan smsPort
dengan value 800.
SendSMS.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public SendSMS(){
display = Display.getDisplay(this);
PhoneInput.java
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import javax.wireless.messaging.*;
import java.io.IOException;
class PhoneInput
extends Form
implements ItemCommandListener, ItemStateListener, CommandListener, Runnable
{
private Display display;
private Command cmSend, cmCancel, cmExit;
private TextField tfPhone;
private SendSMS midlet;
private String msg;
private StringItem itemCancel, itemSend, itemExit;
private Alert al;
private String adr;
private String smsPort;
setItemStateListener(this);
}
try {
if (smsconn != null) {
try {
smsconn.close();
} catch (IOException ioe) {
}
}
}
}
PRAKTIKUM 10
PEMBUATAN APLIKASI BLUETOOTH DENGAN J2ME
A. TUJUAN
- Mengetahui cara berkomunikasi wireless menggunakan protokol Bluetooth
- Dapat berkomunikasi wireless menggunakan protokol Bluetooth
C. DASAR TEORI
Generic Connection Framework mendukung koneksi packet (socket) dan stream
(datagram). Sesuai dengan namanya, framework ini menyediakan API dasar bagi koneksi di
D. PRAKTIKUM
Latihan 1
Buatlah project dengan mengetikkan coding ini menjadi satu project, tempatkan file pada
folder src, beri nama project BluetoothServer, pada kotak user property cheklis fasilitas Bluetooth
OBEX.
BluetoothServer.java
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.List;
public BluetoothServer() {
menu.addCommand(cmExit);
menu.addCommand(cmOk);
Displayable getDisplayable() {
return menu;
}
import javax.bluetooth.DataElement;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.ServiceRecord;
import javax.bluetooth.ServiceRegistrationException;
import javax.bluetooth.UUID;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.io.StreamConnectionNotifier;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
Server(UIServer parent) {
this.parent = parent;
accepterThread = new Thread(this);
accepterThread.start();
}
try {
localDevice = LocalDevice.getLocalDevice();
if (!localDevice.setDiscoverable(DiscoveryAgent.GIAC)) {
throw new IOException("Tidak dapat mengeset mode pencarian");
}
StringBuffer url = new StringBuffer("btspp://");
url.append("localhost").append(':');
url.append(PICTURES_SERVER_UUID.toString());
url.append(";name=Picture Server");
url.append(";authorize=false");
isBTReady = true;
} catch (Exception e) {
}
parent.completeInitialization(isBTReady);
while (!isClosed) {
StreamConnection conn = null;
try {
conn = notifier.acceptAndOpen();
} catch (IOException e) {
continue;
}
processor.addConnection(conn);
}
}
try {
localDevice.updateRecord(record);
} catch (ServiceRegistrationException e) {
return false;
}
return true;
}
void destroy() {
isClosed = true;
if (notifier != null) {
try {
try {
accepterThread.join();
} catch (InterruptedException e) {
}
if (processor != null) {
processor.destroy(true);
}
processor = null;
}
try {
out = conn.openOutputStream();
out.write(imgData.length >> 8);
out.write(imgData.length & 0xff);
out.write(imgData);
out.flush();
} catch (IOException e) {
}
if (out != null) {
try {
out.close();
} catch (IOException e) {
}
}
try {
in = conn.openInputStream();
int length = in.read();
if (length <= 0) {
throw new IOException("Tidak dapat membaca panjang nama");
}
byte[] nameData = new byte[length];
length = 0;
if (n == -1) {
throw new IOException("Tidak dapat membaca nama data");
}
length += n;
}
imgName = new String(nameData);
} catch (IOException e) {
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
}
}
return imgName;
}
try {
while (true) {
if (length == -1) {
break;
}
baos.write(buff, 0, length);
}
} catch (IOException e) {
return null;
}
return baos.toByteArray();
}
ClientProcessor() {
processorThread = new Thread(this);
processorThread.start();
}
StreamConnection conn;
synchronized (this) {
if (isClosed) {
return;
}
conn = (StreamConnection) queue.firstElement();
queue.removeElementAt(0);
processConnection(conn);
}
}
synchronized (this) {
notify();
while (queue.size() != 0) {
conn = (StreamConnection) queue.firstElement();
queue.removeElementAt(0);
try {
conn.close();
} catch (IOException e) {
}
}
}
try {
processorThread.join();
} catch (InterruptedException e) {
}
}
}
}
UIServer.java
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
UIServer(BluetoothServer parent) {
this.parent = parent;
server = new Server(this);
setupIdicatorImage();
setupImageList();
published = new boolean[imagesList.size()];
imagesList.addCommand(backCommand);
imagesList.addCommand(addCommand);
imagesList.addCommand(removeCommand);
imagesList.setCommandListener(this);
}
if (c == backCommand) {
Display.getDisplay(parent).setCurrent(imagesList);
return;
}
published[index] = c == addCommand;
Image stateImg = c == addCommand ? onImage : offImage;
imagesList.set(index, imagesList.getString(index), stateImg);
if (!server.changeImageInfo(imagesList.getString(index),
published[index])) {
Alert al = new Alert("Error", "Tidak dapat mengubah properti", null,
AlertType.ERROR);
al.setTimeout(Alert.FOREVER);
Display.getDisplay(parent).setCurrent(al, imagesList);
published[index] = !published[index];
stateImg = published[index] ? onImage : offImage;
imagesList.set(index, imagesList.getString(index), stateImg);
}
}
if (isBTReady) {
Display.getDisplay(parent).setCurrent(imagesList);
return;
}
void destroy() {
server.destroy();
}
if (index == -1 || !published[index]) {
return null;
}
return (String) imagesNames.elementAt(index);
}
try {
onImage = Image.createImage("/images/kupuOn.gif");
} catch (IOException e) {
onImage = createIndicatorImage(12, 12, 0, 255, 0);
}
try {
offImage = Image.createImage("/images/kupuOff.gif");
} catch (IOException e) {
offImage = createIndicatorImage(12, 12, 255, 0, 0);
}
}
Buatlah project dengan mengetikkan coding ini menjadi satu project, tempatkan file pada
folder src, beri nama project BluetoothClient, pada kotak user property cheklis fasilitas Bluetooth
OBEX.
BluetoothClient.java
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.List;
public BluetoothClient() {
menu.addCommand(cmExit);
menu.addCommand(cmOk);
menu.setCommandListener(this);
}
Displayable getDisplayable() {
return menu;
}
Client.java
import javax.bluetooth.BluetoothStateException;
import javax.bluetooth.DataElement;
import javax.bluetooth.DeviceClass;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.DiscoveryListener;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.RemoteDevice;
import javax.bluetooth.ServiceRecord;
import javax.bluetooth.UUID;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.lcdui.Image;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
Client(UIClient parent) {
this.parent = parent;
processorThread = new Thread(this);
processorThread.start();
}
try {
LocalDevice localDevice = LocalDevice.getLocalDevice();
discoveryAgent = localDevice.getDiscoveryAgent();
isBTReady = true;
} catch (Exception e) {
}
parent.completeInitialization(isBTReady);
if (!isBTReady) {
return;
}
processImagesSearchDownload();
}
synchronized (this) {
notify();
}
}
if (index != -1) {
searchIDs[index] = -1;
}
synchronized (this) {
notify();
}
}
void requestSearch() {
synchronized (this) {
notify();
}
}
void cancelSearch() {
synchronized (this) {
if (state == DEVICE_SEARCH) {
discoveryAgent.cancelInquiry(this);
void cancelLoad() {
isDownloadCanceled = true;
}
void destroy() {
synchronized (this) {
isClosed = true;
isDownloadCanceled = true;
notify();
}
try {
processorThread.join();
} catch (InterruptedException e) {
}
}
try {
wait();
} catch (InterruptedException e) {
return;
}
if (isClosed) {
return;
}
if (!searchDevices()) {
return;
} else if (devices.size() == 0) {
if (!searchServices()) {
return;
} else if (records.size() == 0) {
continue;
}
if (!presentUserSearchResults()) {
continue;
}
while (true) {
isDownloadCanceled = false;
try {
wait();
} catch (InterruptedException e) {
return;
}
if (isClosed) {
return;
}
if (imageNameToLoad == null) {
break;
}
if (isClosed) {
return;
}
if (isDownloadCanceled) {
continue;
}
if (img == null) {
parent.informLoadError("Gambar tidak dapat ditampilkan : "
+ imageNameToLoad);
continue;
}
parent.showImage(img, imageNameToLoad);
continue;
try {
discoveryAgent.startInquiry(DiscoveryAgent.GIAC, this);
} catch (BluetoothStateException e) {
parent.informSearchError("Tidak dapat memulai pencarian perangkat");
return true;
}
try {
wait();
} catch (InterruptedException e) {
return false;
}
if (isClosed) {
return false;
}
switch (discType) {
case INQUIRY_ERROR:
parent.informSearchError("Pemcarian perangkat error.......");
case INQUIRY_TERMINATED:
devices.removeAllElements();
break;
case INQUIRY_COMPLETED:
if (devices.size() == 0) {
parent.informSearchError("Tidak ada perangkat dalam jangkauan");
}
break;
default:
destroy();
return false;
}
return true;
}
try {
searchIDs[i] = discoveryAgent.searchServices(attrSet, uuidSet,
rd, this);
} catch (BluetoothStateException e) {
searchIDs[i] = -1;
continue;
}
isSearchStarted = true;
}
if (!isSearchStarted) {
parent.informSearchError("Tidak dapat melakukan pencarian pelayanan");
return true;
}
try {
wait();
} catch (InterruptedException e) {
return false;
}
if (isClosed) {
return false;
}
if (records.size() == 0) {
parent.informSearchError("Tidak ada pelayanan yang sesuai");
}
return true;
}
DataElement de = sr.getAttributeValue(IMAGES_NAMES_ATTRIBUTE_ID);
if (de == null) {
continue;
}
while (enume.hasMoreElements()) {
de = (DataElement) enume.nextElement();
String name = (String) de.getValue();
if (obj != null) {
Vector v;
ServiceRecord[] sr = null;
Object obj = base.get(imageNameToLoad);
if (obj == null) {
return null;
} else if (obj instanceof ServiceRecord) {
sr = new ServiceRecord[] { (ServiceRecord) obj };
} else {
Vector v = (Vector) obj;
sr = new ServiceRecord[v.size()];
if (isDownloadCanceled) {
return null;
}
try {
url = sr[i].getConnectionURL(
ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);
conn = (StreamConnection) Connector.open(url);
} catch (IOException e) {
continue;
}
try {
OutputStream out = conn.openOutputStream();
out.write(imageNameToLoad.length());
out.write(imageNameToLoad.getBytes());
out.flush();
out.close();
} catch (IOException e) {
try {
conn.close();
} catch (IOException ee) {
}
continue;
}
try {
InputStream in = conn.openInputStream();
int length = in.read() << 8;
length |= in.read();
if (length <= 0) {
throw new IOException("Tidak dapat membaca panjang data");
}
try {
img = Image.createImage(imgData, 0, imgData.length);
} catch (Exception e) {
continue;
}
return img;
}
return null;
}
}
UIClient.java
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Gauge;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.ImageItem;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.StringItem;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Enumeration;
UIClient(BluetoothClient parent) {
this.parent = parent;
client = new Client(this);
mainScreen.addCommand(SCR_MAIN_BACK_CMD);
mainScreen.addCommand(SCR_MAIN_SEARCH_CMD);
mainScreen.setCommandListener(this);
listScreen.addCommand(SCR_IMAGES_BACK_CMD);
listScreen.addCommand(SCR_IMAGES_LOAD_CMD);
listScreen.setCommandListener(this);
imageScreen.addCommand(SCR_SHOW_BACK_CMD);
imageScreen.setCommandListener(this);
}
if (c == SCR_MAIN_BACK_CMD) {
destroy();
parent.show();
return;
}
if (c == SCR_MAIN_SEARCH_CMD) {
Form f = new Form("Pencarian...");
f.addCommand(SCR_SEARCH_CANCEL_CMD);
f.setCommandListener(this);
f.append(new Gauge("Pencarian Gambar...", false, Gauge.INDEFINITE,
Gauge.CONTINUOUS_RUNNING));
if (c == SCR_SEARCH_CANCEL_CMD) {
client.cancelSearch();
Display.getDisplay(parent).setCurrent(mainScreen);
return;
}
if (c == SCR_IMAGES_BACK_CMD) {
client.requestLoad(null);
Display.getDisplay(parent).setCurrent(mainScreen);
return;
}
if (c == SCR_IMAGES_LOAD_CMD) {
Form f = new Form("Proses...");
f.addCommand(SCR_LOAD_CANCEL_CMD);
f.setCommandListener(this);
f.append(new Gauge("Proses tampilkan gambar...", false, Gauge.INDEFINITE,
Gauge.CONTINUOUS_RUNNING));
Display.getDisplay(parent).setCurrent(f);
List l = (List) d;
client.requestLoad(l.getString(l.getSelectedIndex()));
return;
}
if (c == SCR_LOAD_CANCEL_CMD) {
client.cancelLoad();
Display.getDisplay(parent).setCurrent(listScreen);
return;
}
if (c == SCR_SHOW_BACK_CMD) {
Display.getDisplay(parent).setCurrent(listScreen);
return;
}
}
if (isBTReady) {
StringItem si = new StringItem("Siap memulai pencarian", null);
si.setLayout(StringItem.LAYOUT_CENTER | StringItem.LAYOUT_VCENTER);
mainScreen.append(si);
Display.getDisplay(parent).setCurrent(mainScreen);
void destroy() {
client.destroy();
}
if (!keys.hasMoreElements()) {
informSearchError("Tidak ditemukan");
return false;
}
while (listScreen.size() != 0) {
listScreen.delete(0);
}
while (keys.hasMoreElements()) {
listScreen.append((String) keys.nextElement(), null);
}
a. Server
1. Buka Wireless Toolkit.
2. Buat project baru dgn nama BluetoothServer.
>Tambahkan Bluetooth/OBEX for J2ME(JSR 82) pada tab API Selection pada jendela
Setting.
>Tambahkan pada tab User Defined pada jendela setting spt berikut:
3. Buat direktori images di dalam direktori res, kemudian isi direktori images dgn file-file
gambar: bintang.gif,kupu1.gif,dll. (spt pada lampiran modul)
4. Letakkan file source code yg harus diletakkan dalam direktori project:
>BluetoothServer.java
>UIServer.java
>File Server.java
b. Client
PRAKTIKUM 11
Lingkungan Pemrograman Visual Studio Mobile Edition
A. TUJUAN
- Mengetahui cara penggunaan Microsoft Visual Studio 2008
- Dapat menggunakan Microsoft Visual Studio 2008
C. DASAR TEORI
Document Ini Menjelaskan Tentang pembuatan aplikasi sederhana diatas Windows
Mobile 6.5. Aplikasi yang akan kita buat adalah sebuah aplikasi matematika sederhana untuk
perkalian, penjumlahan dan Pengurangan. Aplikasi kasi sederhana ini mudah2an akan membantu
teman-teman sekalian dalam pengembangan Aplikasi Windows Mobile tingkat Lanjut
berikutnya. Dalam Hand On Lab ini, Kami menggunakan Tool Visual Stuido 2008, .NET
Compact Framework 3.5, Windows Mobile 6 SDK Refresh dan Windows Mobile 6.5 Simulator.
Dalam Pembuatan aplikasi diatas Windows Mobile 6.5, kita harus mempersipakan
beberapa Tools yang akan membantu kita dalam pengembangan. Pastikan di Komputer anda
telah terinstal :
a. Visual Studio 2008 beserta (optional) MSDN Untuk Visual Studio 2008
b. .Net Compact Framework 3.5
c. Windows Mobile 6 SDK Refresh
d. Windows Mobile 6.5 Simulator
D. PRAKTIKUM
Latihan 1
a)Membuat project baru
Jalankan visual studio 2008
b) Mendesign Form
Salah satu component utama dalam pengembangan windows mobile adalah user interface.
Design dari user interface yang menarik tentunya akan membuat aplikasi kita di sukai banyak
orang. Visual studio 2008 telah menyediakan sebuah template untuk design windows mobile
form ini. Sama dengan pengembangan pada non gadget, menu design ini di lengkapi dengan
beberapa tool yang bisa kita gunakan untuk design form seperti toolbox, porperti dan lain
lain. Sekarang mari kita mendesign form untuk project hello world yang sudah kita buat,
sebagai contoh kita akan membuat design form seperti di bawah ini
A. TUJUAN
- Mengetahui cara penggunaan Microsoft Visual Studio 2008
- Dapat menggunakan Microsoft Visual Studio 2008
C. DASAR TEORI
Document Ini Menjelaskan Tentang pembuatan aplikasi sederhana diatas Windows
Mobile 6.5. Aplikasi yang akan kita buat adalah sebuah aplikasi matematika sederhana untuk
perkalian, penjumlahan dan Pengurangan. Aplikasi kasi sederhana ini mudah2an akan membantu
teman-teman sekalian dalam pengembangan Aplikasi Windows Mobile tingkat Lanjut
berikutnya. Dalam Hand On Lab ini, Kami menggunakan Tool Visual Stuido 2008, .NET
Compact Framework 3.5, Windows Mobile 6 SDK Refresh dan Windows Mobile 6.5 Simulator.
Dalam Pembuatan aplikasi diatas Windows Mobile 6.5, kita harus mempersipakan
beberapa Tools yang akan membantu kita dalam pengembangan. Pastikan di Komputer anda
telah terinstal :
e. Visual Studio 2008 beserta (optional) MSDN Untuk Visual Studio 2008
f. .Net Compact Framework 3.5
g. Windows Mobile 6 SDK Refresh
h. Windows Mobile 6.5 Simulator
Latihan 1
c)Membuat project baru
Jalankan visual studio 2008
d) Mendesign Form
Salah satu component utama dalam pengembangan windows mobile adalah user interface.
Design dari user interface yang menarik tentunya akan membuat aplikasi kita di sukai banyak
orang. Visual studio 2008 telah menyediakan sebuah template untuk design windows mobile
form ini. Sama dengan pengembangan pada non gadget, menu design ini di lengkapi dengan
beberapa tool yang bisa kita gunakan untuk design form seperti toolbox, porperti dan lain
Buka lah Form1.VB dengan cara meng-Klik form1.vb di Solution Explorer, Pada
Properti Windows Rubah lah Beberapa properti
(Name ) : frmAppMat
Text : Aplikasi Matematika
Buat Lah 3 Buah TextBox Pada layar dengan cara drag & Drop dari ToolBox Windows
lalu Tempatkan Seperti Gambar Diatas dan Rubah Masing Properti TextBox
Texbox pertama
(Name) : txtAngka1
BackColor : DarkKhaki
Text :0
Texbox Kedua
(Name) : txtAngka2
BackColor : DarkKhaki
Text :0
Texbox Ketiga
(Name) : txtHasil
BackColor : BurlyWood
Text :0
Enable : False agar tidak bisa di edit
Buatlah 5 buah Label dengan cara drag & Drop dari ToolBox Windows lalu
Tempatkan Seperti Gambar Diatas dan Rubah Masing Properti Label
Label Pertama
(Name) : lblangka1
Text : Angka 1
Label kedua
(Name) : lblMat
e)Membuat Code
Coding adalah core dari Pemrograman, dan menjadi salah satu syarat agar aplikasi kita bisa
berjalan sesuai dengan yang kita inginkan. Kita bisa menggunakan beberapa bahasa yang di
sediakan oleh visual studio seperti Visual Basic dan C#
Pada HOL ini Kami menggunakan Bahasa Pemrograman Visual Basic
Double Klik Pada Button Kali, lalu Ketik Code di bawah ini
Private Sub btnKali_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnKali.Click
TxtHasil.Text = txtAngka1.Text * txtAngka2.Text
lblMat.Text = "x"
End Sub
Double Klik Pada Button Jumlah, lalu Ketik Code di bawah ini
Private Sub btnJumlah_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnJumlah.Click
TxtHasil.Text = Int(txtAngka1.Text) + Int(txtAngka2.Text)
lblMat.Text = "+"
End Sub
Double Klik Pada Button Kurang, lalu Ketik Code di bawah ini
Jalankan aplikasi dengan cara menekan tombol yang saya lingkari di bawah ini
Kemudian akan di minta untuk memilih platform windows mobile yang sudah terinstall di
komputer kita. Anda bebas memilih yang anda mau
Cobalah dengan memasukkan angka pada textboxt dan tekan button di bawahnya
A. TUJUAN
- Mengetahui dan memahami konsep / fungsi dasar dari class Visual Studio Mobile Edition
- Mengetahui dan memahami dasar dari fungsi dan pemanggilan class pada Visual Studio
Mobile Edition
C. DASAR TEORI
Document Ini Menjelaskan Tentang pembuatan aplikasi sederhana diatas Windows
Mobile 6.5. Aplikasi yang akan kita buat adalah sebuah aplikasi matematika sederhana untuk
perkalian, penjumlahan dan Pengurangan. Aplikasi kasi sederhana ini mudah2an akan membantu
teman-teman sekalian dalam pengembangan Aplikasi Windows Mobile tingkat Lanjut
berikutnya. Dalam Hand On Lab ini, Kami menggunakan Tool Visual Studio 2008, .NET
Compact Framework 3.5, Windows Mobile 6 SDK Refresh dan Windows Mobile 6.5 Simulator.
D. PRAKTIKUM
Latihan 1
Buatlah project dengan mengetikkan coding ini menjadi satu project, tempatkan file pada
folder src, beri nama project HitTheBirdMidlet.
HitTheBird.java
import java.util.Random;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.TiledLayer;
//rock property
private int rockXSpeed;
private int rockYSpeed;
private boolean rockDirection;
private boolean rockIsThrown = false;
private final int gravity = 2;
//bird property
private int birdSpeed = 5;
private boolean birdHitByStone;
HitTheBirdMidlet.java
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.List;
import javax.microedition.midlet.*;
}
}
}
public void showMainScreen(){
display.setCurrent(startupList);
}
}
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
public mouse(){
setFullScreenMode(true);
}
protected void paint(Graphics g) {
//baground
g.setColor(0xff0000);
g.fillRect(0, 0, getWidth(), getHeight());
//muka
g.setColor(0xffffff);
g.fillArc(getWidth()/2 - 50, getHeight()/2 - 50, 100, 100, 0, 360);
//telinga kanan
g.fillArc(getWidth()/2 - 40-20, getHeight()/2 - 50-20, 50, 50, 0, 360);
//telinga kiri
g.fillArc(getWidth()/2 + 40-20, getHeight()/2 - 50-20, 50, 50, 0, 360);
//mata
g.setColor(0x000000);
//kanan
g.fillArc(getWidth()/2 - 20-10, getHeight()/2 - 20-10, 20, 20, 0, 360);
//kiri
g.fillArc(getWidth()/2 + 20-10, getHeight()/2 - 20-10, 20, 20, 0, 360);
//mulut
g.fillArc(getWidth()/2 - 20, getHeight()/2 -20, 50, 50, 180, 180);
}
}
MyCanvas.java
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
public MyCanvas() {
setFullScreenMode(true);
}
//kotak hijau
g.setColor(0x00ff00);
g.fillRect(5, 5, getWidth()-50, getHeight()-50);
g.fillRect(0, 0, getWidth()/2, getHeight());
//lingkaran
g.setColor(0x0000ff);
g.fillArc(getWidth()/2 - 50, getHeight()/2 - 50, 100, 100, 0, 360);
g.setColor(0,0,0);
g.drawRect(15, 15, getWidth()-30, getHeight()-30);
g.setColor(0,0,0);
g.drawString("Bola", 20, 20, 0);
g.setFont(Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_UNDERLINED,
Font.SIZE_LARGE));
g.setColor(200,0,0);
g.drawString("dicoba", 40, 40, 0);
}
}
MyForm.java
SplashScreen.java
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;