Senin, 23 Maret 2009

Perencanaan Aplikasi Chatting pada Hp beserta Script

Dengan Menggunakan Protokol L2CAP Pada Bluetooth
Adanya teknologi Bluetooth pada telepon selular membuka kesempatan
bagi pengembangan aplikasi telepon selular menuju arah yang baru. Salah satu
aplikasi Bluetooth pada telepon selular tersebut adalah aplikasi chatting pada
telepon selular.

Aplikasi tersebut dibuat dengan menggunakan bahasa pemrograman
Java 2 Micro Edition ( J2ME ), serta ditunjang dengan Java API untuk Bluetooth
(JSR-82), Java API untuk MIDP (JSR-37) dan Java API untuk CLDC (JSR-30).
Koneksi pada aplikasi chatting ini dibuat hanya antar 2 telepon selular,
satu telepon selular berfungsi sebagai server yang menyediakan service untuk
chatting dan telepon selular yang lain berfungsi sebagai client yang mengadakan
koneksi ke server. Protokol komunikasi yang dipakai untuk pertukaran data pada
aplikasi ini adalah protokol komunikasi Bluetooth, yaitu protokol L2CAP.

Pengujian aplikasi chatting pada telepon selular dengan menggunakan
Bluetooth dilakukan pada 2 buah telepon selular Nokia 6600. Pengujian tersebut
berjalan dengan baik, dengan hasil baik yaitu pengadaan service dan penerimaan
koneksi oleh sever dapat dilakukan, mengadakan koneksi pada server serta service
oleh client dapat dilakukan dan data antar kedua telepon selular dapat
dipertukarkan.

Kesimpulan yang dicapai adalah bahwa aplikasi Java untuk chatting
pada telepon selular dengan menggunakan Bluetooth dapat diwujudkan.




LAMPIRAN 1 : Script ChatController.Java

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import javax.bluetooth.*;
import java.io.*;
/* Sebagai pengontrol seluruh program, baik sebagai server ataupun client*/
public class ChatController extends MIDlet implements CommandListener {
private static final String UUID_STRING =
"11112233445566778899AABBCCDDEEFF";
public static ChatController instan;
public static Display display;
public Form mainUI;
public StringItem status = new StringItem("status:", null);
public MessageUI terima;
public InputUI tulis;
public ChoiceGroup devices = new ChoiceGroup(null, Choice.EXCLUSIVE);
public Command exitCommand = new Command("Exit", Command.EXIT, 2);
public Command startCommand = new Command("Start server", Command.SCREEN,
1);
public Command connectCommand = new Command("Connect to server",
Command.SCREEN, 2);
public Command selectCommand = new Command("Select", Command.SCREEN, 1);
private LocalDevice localDevice;
private DiscoveryAgent agent;
private L2CAPConnection conn;
private RemoteDevice[ ] remoteDevices;
private boolean running = false;
public ChatController( ) {
instan = this;
}
public void startApp( ) {
running = true;
tulis = new InputUI( );
terima = new MessageUI( );
display = Display.getDisplay(this);
mainUI = new Form("Chat");

mainUI.append(status);
mainUI.setCommandListener(this);
mainUI.addCommand(exitCommand);
mainUI.addCommand(startCommand);
mainUI.addCommand(connectCommand);
display.setCurrent(mainUI);
try{
localDevice = LocalDevice.getLocalDevice( );
agent = localDevice.getDiscoveryAgent( );
} catch(BluetoothStateException bse) {
status.setText("Bluetooth Exception: " + "Unable to start");
try{
Thread.sleep(2000);
} catch(InterruptedException ie) { }
notifyDestroyed( );
}
}
public void pauseApp( ) {
running = false;
releaseResources( );
}
public void destroyApp(boolean unconditionally) {
running = false;
releaseResources( );
}
public void commandAction(Command c, Displayable d) {
if (c == exitCommand) {
running = false;
releaseResources( );
notifyDestroyed( );
}
else if (c == startCommand) {
new Thread( ){
public void run( ){

startServer( );
}
}.start( );
}
else if (c == connectCommand) {
status.setText("Searching for devices...");
mainUI.removeCommand(connectCommand);
mainUI.removeCommand(startCommand);
mainUI.append(devices);
DeviceDiscoverer discoverer = new DeviceDiscoverer(ChatController.this);
try {
//non-blocking
agent.startInquiry(DiscoveryAgent.GIAC, discoverer);
}
catch(BluetoothStateException bse){
status.setText("BSException: " + bse.getMessage());
}
}
else if (c == selectCommand) {
status.setText("Searching device for service");
int index = devices.getSelectedIndex( );
mainUI.delete(mainUI.size()-1); //menghapus group pilihan
mainUI.removeCommand(selectCommand);
ServiceDiscoverer serviceDiscoverer = new
ServiceDiscoverer(ChatController.this);
int[ ] attrSet = {0x0100}; //mengembalikan nama service attribute
UUID[ ] uuidSet = new UUID[1];
uuidSet[0] = new UUID(UUID_STRING, false);
try {
//non-blocking
agent.searchServices(attrSet, uuidSet, remoteDevices[index],
serviceDiscoverer);
} catch(BluetoothStateException bse) {
status.setText("Bluetooth Exception: " + bse.getMessage( ));
}
}

else if ( d== tulis && c.getLabel( ).equals("Back"))
{
//kembali ke console
display.setCurrent(terima);
}
else if ( d== terima && c.getLabel( ).equals("Write"))
{
//menulis pesan
display.setCurrent(tulis);
tulis.showUI(); //membersihkan form
}
else if ( d== terima && c.getLabel( ).equals("Clear"))
{
//clear screen
terima.msgs.removeAllElements( );
terima.repaint( );
}
else if ( d== tulis && c.getLabel( ).equals("Send"))
{
new Thread( ){
public void run( ){
sendMessage( );
}
}.start( );
}
}
/** Memanggil dari DeviceDiscoverer inquiryCompleted ketika unit inquiry selesai */
public void deviceInquiryFinished(RemoteDevice[] remoteDevices, String message){
this.remoteDevices = remoteDevices;
String[] names = new String[remoteDevices.length];
for(int i = 0; i < remoteDevices.length; i++) {
try {
String name = remoteDevices[i].getFriendlyName(false);
names[i] = name;
}catch(IOException ioe){
status.setText("IOException: " + ioe.toString());

}
}
for(int i = 0; i < names.length; i++) {
devices.append(names[i], null);
}
mainUI.addCommand(selectCommand);
status.setText(message);
}
/** Memanggil dari ServiceDiscover serviceSearchCompleted ketika service search
selesai */
public void serviceSearchFinished(ServiceRecord serviceRecord, String message){
status.setText(message);
String url =
serviceRecord.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT,
false);
try{
conn = (L2CAPConnection)Connector.open(url);
status.setText("connected");
new Thread(){
public void run(){
startReceiver();
}
}.start();
}catch(IOException ioe){
status.setText("IOException: " + ioe.getMessage());
}
}
/** Memulai server chat dengan server mode */
public void startServer(){
status.setText("Server starting...");
mainUI.removeCommand(connectCommand);
mainUI.removeCommand(startCommand);

try{
localDevice.setDiscoverable(DiscoveryAgent.GIAC);
L2CAPConnectionNotifier notifier =
(L2CAPConnectionNotifier)Connector.open("btl2cap://localhost:" + UUID_STRING +
";name=BTL2Chat");
status.setText("Server running");
conn = notifier.acceptAndOpen( );//record disimpan pada SDDB
new Thread( ){
public void run( ){
startReceiver( );
}
}.start();
} catch(IOException ioe) {
status.setText("IOException: " + ioe.toString( ));
}
}
/** memulai untuk menerima pesan */
public void startReceiver( ){
display.setCurrent(terima);
while(running){
try{
if(conn.ready()){
int receiveMTU =conn.getReceiveMTU( );
byte[ ] data = new byte[receiveMTU];
int length = conn.receive(data);
String message = new String(data, 0, length);
String name = new String ("receive : ");
ChatPacket packet = new ChatPacket (name, message);
terima.msgs.addElement(packet);
terima.repaint();
}
}catch(IOException ioe){
String name = new String ("Status : ");
String status = new String("IOException: " + ioe.getMessage( ));
ChatPacket packet = new ChatPacket (name, status);
terima.msgs.addElement(packet);

terima.repaint( ); }
}
}
/** Mengirim Pesan */
public void sendMessage() {
display.setCurrent(tulis);
byte[] data = null;
int index = 0;
byte[] temp = null;
try {
String message = new String (tulis.getString());
String name = new String ("send : ");
data = message.getBytes();
int transmitMTU = conn.getTransmitMTU();
temp = new byte[transmitMTU];
while (index < data.length)
{
if ((data.length - index) < transmitMTU)
{
temp = new byte[data.length-index];
System.arraycopy(data, index, temp, 0, data.length-index);
} else {
temp = new byte[transmitMTU];
System.arraycopy(data, index, temp, 0, transmitMTU);
}
conn.send(temp);
index += transmitMTU;
}
ChatPacket packet = new ChatPacket(name, message);
terima.msgs.addElement(packet);
display.setCurrent(terima);
terima.repaint();
} catch(IOException ioe) {
String name = new String ("Status : ");
String status = new String("IOException: " + ioe.getMessage());
ChatPacket packet = new ChatPacket(name, status);

terima.msgs.addElement(packet);
display.setCurrent(terima);
terima.repaint();
}
}
/** menutup koneksi */
public void releaseResources(){
try{
if(conn != null)
conn.close();
}catch(IOException ioe){
status.setText("IOException: " + ioe.getMessage());
}
}
}

Lampiran 2 : Script ChatPacket.Java
//untuk tempat sementara dari pesan sebelum ditampilkan/

public class ChatPacket
{
public String sender;
public String msg;
public ChatPacket(String sender, String msg)
{
this.sender = sender;
this.msg = msg;
}
}

Lampiran 3 : Script DeviceDiscoverer.Java

import javax.bluetooth.*;
import java.util.*;
/** Implementasi sebuah DiscvoveryListener untuk device discovery */
public class DeviceDiscoverer implements DiscoveryListener {
private ChatController controller;
private Vector remoteDevices;
public DeviceDiscoverer(ChatController controller) {
this.controller = controller;
remoteDevices = new Vector();
}
public void servicesDiscovered(int transID, ServiceRecord[] servRecord){}
public void serviceSearchCompleted(int transID, int respCode) {}
/** Dipanggil oleh aplikasi ketika sebuah unit ditemukan */
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
remoteDevices.addElement(btDevice);
}
/** Dipanggil oleh aplkasi ketika device inquiry selesai */
public void inquiryCompleted(int discType) {
String message = null;
if (discType == INQUIRY_COMPLETED) {
message = "Inquiry completed";
} else if (discType == INQUIRY_TERMINATED) {
message = "Inquiry terminated";
} else if (discType == INQUIRY_ERROR) {
message = "Inquiry error";
}
RemoteDevice[] devices = new RemoteDevice[remoteDevices.size()];
for(int i = 0; i < remoteDevices.size(); i++) {
devices[i] = (RemoteDevice)remoteDevices.elementAt(i);
}
controller.deviceInquiryFinished(devices, message);
remoteDevices = null;
controller = null;
}
}

Lampiran 4 : Script ServiceDiscoverer.Java

import javax.bluetooth.*;
import java.io.*;
/** Implementasi sebuah DiscvoveryListener untuk service discovery */
public class ServiceDiscoverer implements DiscoveryListener {
private static final String SERVICE_NAME = "BTL2Chat";
private ChatController controller;
private ServiceRecord serviceRecord;
public ServiceDiscoverer(ChatController controller) {
this.controller = controller;
}
/* Dipanggil oleh aplikasi ketika services specified oleh uuidSet lolos pada
method DiscoveryAgent.searchServices ditemukan*/
public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
for(int i = 0; i < servRecord.length; i++) {
DataElement serviceNameElement =
servRecord[i].getAttributeValue(0x0100);//get the Service Name
String serviceName = (String)serviceNameElement.getValue();
if(serviceName.equals(SERVICE_NAME)){
serviceRecord = servRecord[0];
}
}
}
/* Dipanggil oleh aplikasi ketika pencarian selesai */
public void serviceSearchCompleted(int transID, int respCode) {
String message = null;
if (respCode ==
DiscoveryListener.SERVICE_SEARCH_DEVICE_NOT_REACHABLE) {
message = "Device not reachable";
}
else if (respCode == DiscoveryListener.SERVICE_SEARCH_NO_RECORDS) {
message = "Service not available";
}
else if (respCode == DiscoveryListener.SERVICE_SEARCH_COMPLETED) {
message = "Service search completed";
}
else if (respCode == DiscoveryListener.SERVICE_SEARCH_TERMINATED) {
message = "Service search terminated";
}
else if (respCode == DiscoveryListener.SERVICE_SEARCH_ERROR) {
message = "Service search error";
}
controller.serviceSearchFinished(serviceRecord, message);
controller = null;
serviceRecord = null;
}
public void inquiryCompleted(int discType){}
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod){}
}

Lampiran 5 : Script InputUI.Java

import javax.microedition.lcdui.*;
public class InputUI extends TextBox {
/**Membangun form untuk menulis pesan*/
public InputUI() {
super("Enter Message", "", 50, TextField.ANY);
addCommand(new Command("Send", Command.SCREEN, 1));
addCommand(new Command("Back", Command.SCREEN, 2));
setCommandListener(ChatController.instan);
}
public void showUI()
{
this.setString("");
}
}

Lampiran 6 : Script MessageUI.Java

import javax.microedition.lcdui.*;
import java.util.*;
// untuk form console
public class MessageUI extends Canvas
{
// mendata pesan yang ada untuk ditampilkan
Vector msgs = new Vector();
// nilai idx pesan
int midx = 0;
// lebar dan panjang gambar
int w, h;
// panjang font
int fh;
// font untuk ditampilkan di layar
Font f;
int x0=0, y0=0;
public MessageUI()
{
addCommand(new Command("Write", Command.SCREEN, 1));
addCommand(new Command("Clear", Command.SCREEN, 2));
setCommandListener(ChatController.instan);
}
protected void paint(Graphics g)
{
if ( f == null )
{
// mengambil nilai font and lebar,panjang
// ketika digunakan pertama kali
f = Font.getFont( Font.FACE_MONOSPACE, Font.STYLE_PLAIN,
Font.SIZE_SMALL );
w = this.getWidth();
h = this.getHeight();
fh = f.getHeight();
}
//
// menentukan midx berdasarkan panjang layar dan banyak pesan
int y = fh;
// pesan ditampilkan dgn warna hitam dan background hitam
g.setColor( 255, 255, 255 );
g.fillRect( 0, 0, w, h );
g.setColor( 0, 0, 0 );
g.setFont( f );
g.translate(-x0, -y0);
// menampilkan pesan dilayar
for ( int i= midx; i< msgs.size(); i++ )

{
ChatPacket p = (ChatPacket)msgs.elementAt(i);
String s = p.sender+p.msg;
g.drawString( s, 0, y, Graphics.BASELINE | Graphics.LEFT );
y += fh;
}
}
public void keyPressed( int key )
{ // kett: nilai 50 sampai 100 untuk kecepatan scroll layar
if ( getGameAction( key ) == Canvas.RIGHT )
{
x0+=50;
} else if ( getGameAction( key ) == Canvas.LEFT )
{
x0-=50;
} else if ( getGameAction( key ) == Canvas.UP )
{
y0-=50;
} else if ( getGameAction( key ) == Canvas.DOWN )
{
y0+=50;
}
repaint();
}
}

LAMPIRAN 7 : Instalasi J2ME Toolkit

Sebelum menginstal J2ME Toolkit, terlebih dahulu pada komputer telah
terinstal Java 2 SDK versi 1.4. Untuk menginstal J2ME Toolkit, dibutuhkan
instaler yang dinamakan J2MEWTK dan disarankan pada versi yang terbaru
(pada saat ini versi yang terbaru adalah J2ME Wireless Toolkit Versi 2.2 beta).
Pada contoh ini, J2MEWTK yang digunakan adalah versi 2.1 dan file yang
diperlukan adalah j2me_wireless_toolkit-2_1-windows.exe.
Langkah-langkah instalasi adalah sebagai berikut :
1. Klik ganda pada file j2me_wireless_toolkit-2_1-windows.exe untuk
memulai instalasi.
2. Selanjutnya pada tampilan berikutnya, tekan tombol “Next >”
3. Pada tampilan License Agreement, tekan tombol “Yes”.
4. selanjutnya, secara otomatis aplikasi instaler akan mencari lokasi dari
Java Virtual Machine yang terinstal pada komputer dengan default lokasi
c:\jdk1.4. , jika tidak ada, maka dapat dicari dengan menekan tombol
“Browse”.
5. Kemudian, tentukan dimana program akan diinstal, dengan default lokasi
adalah c:\J2MEWTK 2.1. tekan tombol “Next >”
6. Pilih tipe setup, apakah terintergrasi atau berdiri sendiri. Untuk aplikasi
pada umunya dipilih pilihan berdiri sendiri atau Stand alone.
7. Lalu pilih folder untuk Start menu, tekan tombol “Next >”.
8. Selanjutnya, akan ditampilkan pemberitahuan pengaturan yang dipilih,
tekan tombol “Next >”.
9. Tunggu sampai proses instalasi selesai, setelah itu tekan tombol “Finish”
Diposkan oleh maulana di 06:24 0 komentar
Kamis, 2009 Maret 19
contoh implementasi java yang lain
IMPLEMENTASI JAVA 2 MICRO EDITION UNTUK PEMBUATAN KAMUS BAHASA INGGRIS - INDONESIA PADA HANDPHONE NOKIA STUDI KASUS SERI 6600 DAN N-GAGE

Tahun 2006

Kode 0810017

Perkembangan teknologi informasi semakin hari semakin pesat. Salah satunya yaitu penggunaan handphone. Handphone adalah suatu alat komunikasi wireless yang dapat juga digunakan untuk mengirim pesan dan membuka software aplikasi yang dibuat oleh suatu perusahaan ponsel. Salah satu contoh aplikasi handphone adalah ultraMp3 yang fungsinya untuk mendengarkan musik, disini penulis mencoba membuat aplikasi handphone berupa Kamus bahasa Inggris-Indonesia. Kamus sendiri tidak asing lagi terdengar di telinga kita, kamus merupakan alat bantu yang digunakan untuk menerjemahkan suatu bahasa. Pada saat sekarang penggunaaan kamus sangat diperlukan akan tetapi yang tidak mempersulit user dengan kata lain praktis dalam penggunaannya, oleh karena itu penulis berusaha mengimplementasikan pemikirannya dengan mencoba membuat aplikasi perangkat mobile / handphone berupa kamus.

Kamus mobile yang di pasangkan pada perangkat handphone, dapat dijadikan sebagai jalan alternatif dalam penerjemahan bahasa inggris ke bahasa indonesia maupun sebaliknya.

Metode pembuatan software aplikasi handphone menggunakan software Java. Sun Microsystem telah mendefinisikan tiga paltform java, yang masing-masing diarahkan untuk tujuan tertentu dan untuk lingkungan komputasi yang berbeda-beda :
a.Standard Edition (J2SE): Didesain untuk jalan pada komputer desktop dan komputer workstations.
b.Enterprise Edition (J2EE): Dengan built-in mendukung untuk servlets, JSP, dan XML, edisi ini ditujukan untuk aplikasi berbasis server.
c.Micro Edition (J2ME): Didesain untuk piranti dengan memori terbatas, layar display terbatas dan power pemrosesan yang juga terbatas.

4 komentar:

  1. Mas saya mau bikin aplikasi chatting antara PC to PC via Bluetooth,......kalo boleh minta script'nya tolong ya mas butuh banget nih ... tolong kirimin ke E-mail saya saifulanwar2606@yahoo.com "makasi"

    BalasHapus
  2. mas saya mau bikin kamus bisa dibantu??
    sederhana aja mas, kata per kata mas bukan kalimat..
    saya bingung scriptnya mau dimulai dari mana??
    semoga amal ibadahnya diterima tuhan yang maha esa..
    maya_281008@yahoo.com

    BalasHapus
  3. mas.. ini programnya gimana cara kerjanya bisa tolong dijelaskan gak?
    saya udah coba.. tapi agak bingung mengoprasikannya..??

    BalasHapus
  4. cara nya ya di ikuti ja coding di atas...
    itu program yag udah jln. tp desain ny amat sangat sederhana

    BalasHapus