Posts Tagged ‘J2ME’

Membuat Aplikasi JavaME/J2ME menggunakan LWUIT di Netbeans

Langsung saja. Download addons LWUIT disini atau disini.

Membuat Project baru dan instalasi LWUIT.

  1. Buat Project baru:
    • Klik icon ‘New Project’ (atau Ctl+Shift+N)
    • Di categories, pilih ‘Java ME’
    • Di project, pilih ‘Mobile Apication’
    • Next
    • Isi project Name, misal ‘LWUIT Contoh’
    • Centang ‘Set as Main Project’ dan hilangkan tanda centang ‘Create Hello MIDlet’
    • Pilih CLDC-1.0 dan MIDP 2.0 (HP spesifikasi ini yang banyak beredar)
    • Finish
  2. Di tab ‘Project’, klik kanan pada sub folder dari project yang kita buat (di contoh ini adalah LWUIT Contoh) yakni pada ‘Resources’ hingga keluar pilihan, dan pilihlah ‘Add Jar/Zip’.
  3. Carilah file addons LWUIT anda. Misalnya ada menaruh di ‘Home’, pilih file ‘LWUIT.jar’, tekan OK.
  4. Carilah file theme yang akan anda gunakan, misalnya ‘LWUITtheme.res.zip’, tekan OK.

Membuat MIDlet dan Menulis kode

  1. Di tab ‘Project’ yakni di project yang tadi telah dibuat, klik kanan, New -> MIDlet.
  2. Next
  3. Di ‘MIDlet Name’, ketik nama midlet anda, misalnya ‘HelloMidlet’.
  4. Finish
  5. Copy code berikut dan paste di source code anda.

import com.sun.lwuit.Display;
import com.sun.lwuit.Form;
import com.sun.lwuit.Label;
import com.sun.lwuit.layouts.BorderLayout;
import com.sun.lwuit.plaf.UIManager;
import com.sun.lwuit.util.Resources;

/**
* @author sapto
*/
public class HelloMidlet extends javax.microedition.midlet.MIDlet {

public void startApp() {
//init the LWUIT Display
Display.init(this);
// Setting the application theme is discussed
// later in the theme chapter and the resources chapter
try {
Resources r = Resources.open("/LWUITtheme.res");
UIManager.getInstance().setThemeProps(
r.getTheme(r.getThemeResourceNames()[0]));
} catch (java.io.IOException e) {
}
Form f = new Form();
f.setTitle("Hello World");
f.setLayout(new BorderLayout());
f.addComponent("Center", new Label("I am a Label"));
f.show();
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}
}

Tekan tombol Run (atau F6). Selesai sudah. Selamat mencoba.

Catatan:

  • File addons LWUIT jika anda menggunakan LWUIT 1.4 di folder ‘lib’
  • Tema yang anda gunakan jika anda menggunakan LWUIT 1.4 terletak di folder ‘LWUITtheme.res’, dan anda harus mejadikan file tersebut menjadi file ‘.zip’, jika anda menggunakan Ubuntu maka klik kanan di file ‘.res’ tersebut dan pilih compress, pilih tipe extensi ‘.zip’ -> create. Jika menggunakan windows, maka klik kanan di file ‘.res’ tersebut, kalau tidak salah ‘send to’, pilih ‘.zip’ (sy gak pake windows).

-= Sapto Sutardi =-

Mataram, 1 Juli 2011

Kamus HP J2ME/JME Bahasa Sasak/Lombok Indonesia

Berikut ini contoh aplikasi kamus sederhana pada J2ME/JME. Kamus ini hanya 7 kosa kata, yakni Sasak/Lombok <–> Indonesia.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

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

/**
 * @author Sapto Sutardi Fakultas Kedokteran Univ. Mataram
 */
public class KamusSasakIndo extends MIDlet implements CommandListener {
    public Form frSasak, frIndo;
    public Display display;
    public Command cmTransSasak, cmTransIndo, cmExit, cmBackSasak, cmBackIndo, cmKeUtama;
    public TextField tfSasak, tfIndo;
    public TextBox tbSasak, tbIndo;
    public List lsUtama;
    public Alert alNotFound;
    public String[] sasak = {"uwah", "mangan", "side", "tidoq", "ende ne", "araq", "kepeng"};
    public String[] indo = {"sudah", "makan", "anda", "tidur", "tidak", "ada", "uang"};
    public KamusSasakIndo(){
        display = Display.getDisplay(this);
        alNotFound = new Alert("Maaf", "Kata yang Anda cari ndeq ne araq.", null, AlertType.INFO);
        alNotFound.setTimeout(3000);
    }
    public void startApp() {
        get_lsUtama();
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void exitMIDlet() {
        display.setCurrent(null);
        destroyApp(false);
        notifyDestroyed();
    }

    public void commandAction(Command c, Displayable d) {
        if(c == cmTransSasak){
            String sSasak = tfSasak.getString().toLowerCase();
            for(int i =0; i<sasak.length; i++){
                if(sSasak.equals(sasak[i])){
                    System.out.println("Posisi :"+i);
                get_vSasak();
                tbSasak.setString(indo[i]);
                break;
                } else {
                    display.setCurrent(alNotFound);
                }
            }
        }

        if(c == cmTransIndo){
            String sSasak = tfIndo.getString().toLowerCase();
            for(int i =0; i<indo.length; i++){
                if(sSasak.equals(indo[i])){
                    System.out.println("Posisi :"+i);
                get_vIndo();
                tbIndo.setString(sasak[i]);
                break;
                } else {
                    display.setCurrent(alNotFound);
                }
            }
        }

        else if(c == cmExit){
            destroyApp(false);
            notifyDestroyed();
        }

        else if (c == List.SELECT_COMMAND) {
            if (d == lsUtama){
                switch (lsUtama.getSelectedIndex()) {
                    case 0: {
                        get_Sasak();
                        break;
                    }
                    case 1: {
                        get_Indo();
                        break;
                    }
                }
            }
        }

        else if(c == cmBackSasak){
            display.setCurrent(frSasak);
        }

        else if(c == cmBackIndo){
            display.setCurrent(frIndo);
        }

        else if(c == cmKeUtama){
            get_Sasak();
            display.setCurrent(lsUtama);
        }
    }

    public List get_lsUtama(){
        lsUtama = new List("Kamus Sasak Indo", List.IMPLICIT);
        lsUtama.append("Sasak -> Indo", null);
        lsUtama.append("Indo -> Sasak", null);
        cmExit = new Command("Keluar", Command.EXIT, 1);
        lsUtama.addCommand(cmExit);
        lsUtama.setCommandListener(this);
        display.setCurrent(lsUtama);
        return lsUtama;
    }

    public Form get_Sasak(){
        frSasak = new Form("Sasak -> Indo");
        tfSasak = new TextField("Kata Sasak", null, 20, TextField.ANY);
        cmTransSasak = new Command("Terjemah", Command.SCREEN, 1);
        cmKeUtama = new Command("Kembali", Command.SCREEN, 2);
        frSasak.append(tfSasak);
        frSasak.addCommand(cmTransSasak);
        frSasak.addCommand(cmKeUtama);
        frSasak.setCommandListener(this);
        display.setCurrent(frSasak);
        return frSasak;
    }

    public Form get_Indo(){
        frIndo = new Form("Indo -> Sasak");
        tfIndo = new TextField("Kata Indo", null, 20, TextField.ANY);
        cmTransIndo = new Command("Terjemah", Command.SCREEN, 1);
        cmKeUtama = new Command("Kembali", Command.SCREEN, 2);
        frIndo.append(tfIndo);
        frIndo.addCommand(cmTransIndo);
        frIndo.addCommand(cmKeUtama);
        frIndo.setCommandListener(this);
        display.setCurrent(frIndo);
        return frIndo;
    }

    public TextBox get_vSasak(){
        tbSasak = new TextBox(tfSasak.getString(), "", 100, 1);
        cmBackSasak = new Command("Kembali", Command.SCREEN, 1);
        tbSasak.addCommand(cmBackSasak);
        tbSasak.setCommandListener(this);
        display.setCurrent(tbSasak);
        return tbSasak;
    }

    public TextBox get_vIndo(){
        tbIndo= new TextBox(tfIndo.getString(), "", 100, 1);
        cmBackIndo = new Command("Kembali", Command.SCREEN, 1);
        tbIndo.addCommand(cmBackIndo);
        tbIndo.setCommandListener(this);
        display.setCurrent(tbIndo);
        return tbIndo;
    }
}

Bisa dikembangkan:

  1. Bahasa lain (misalnya Jawa –> Inggris), karena saya orang Sasak-Lombok jadi saya buat Sasak-Indonesia saja.
  2. Data kosa kata bisa ditaruh pada file terpisah dengan “getResourceAsStream”
  3. Menambah kosa kata dengan RMS.
  4. Pencarian dengan similiar text
  5. dll

-= Sapto Sutardi =-

Mataram, 19 Januari 2011

Membuat Kamus Menggunakan J2ME

Membuat kamus menggunakan java untuk diterapkan di mobile (J2ME/JME) sebenarnya tidak terlalu sulit. Perinsipnya kita mencari kesamaan dari input dengan baris kata yang dicari. Berikut ini sourcecode-nya yang sederhana.

String indo[] = {"makan", "minum", "tidur"};
String ing[] = {"eat", "drink", "sleep"}
String a = TextFieldInput.getString();
String a2 = a.toLowerCase(); // agar inputnya diubah menjadi huruf kecil semua&lt;
    for (int i = 0; i<ing.length; i++){
    if(a2.equals(indo[i])){
         TextBoxHasil = ing[i];
         break; // menghentikan pencarian
    } else {
         TextBoxHasil = "Kata yang anda cari nedeqn araq!";
    }
}

Modifikasi dari sistem ini banyak. Tapi baiknya Anda saja.

-= Sapto Sutardi =-
Mataram, 22 November 2010

-= Sapto Sutardi =-
Mataram, 22 Agustus 2010

Transfer Text HP (Mobile) ke PC (Komputer)

Pertama lakukan instalasi Bluecove di Eclipse atau Netbeans. Lalu buat sorce code berikut ini:

1. Aplikasi di PC (Komputer) Anda:

 import java.io.*;
import javax.bluetooth.*;
import javax.microedition.io.*;

public class EchoServer {
    public final UUID uuid = new UUID(                              //the uid of the service, it has to be unique,
			"27012f0c68af4fbf8dbe6bbaf7aa432a", false); //it can be generated randomly
    public final String name = "Echo Server";                       //the name of the service
    public final String url  =  "btspp://localhost:" + uuid         //the service url
                                + ";name=" + name
                                + ";authenticate=false;encrypt=false;";
    LocalDevice local = null;
    StreamConnectionNotifier server = null;
    StreamConnection conn = null;

    public EchoServer() {
        try {
            System.out.println("Setting device to be discoverable...");
            local = LocalDevice.getLocalDevice();
            local.setDiscoverable(DiscoveryAgent.GIAC);
            System.out.println("Start advertising service...");
            server = (StreamConnectionNotifier)Connector.open(url);
            System.out.println("Waiting for incoming connection...");
            conn = server.acceptAndOpen();
            System.out.println("Client Connected...");
            DataInputStream din   = new DataInputStream(conn.openInputStream());
            while(true){
                String cmd = "";
                char c;
                while (((c = din.readChar()) &gt; 0) &amp;&amp; (c!='\n') ){
                    cmd = cmd + c;
                }
                System.out.println("Received " + cmd);
            }

        } catch (Exception  e) {System.out.println("Exception Occured: " + e.toString());}
    }

    public static void main (String args[]){
        EchoServer echoserver = new EchoServer();
    }

}

2. Aplikasi di HP Anda:


 
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import javax.bluetooth.*;
import java.io.*;
public class EchoClient extends MIDlet
   implements CommandListener,DiscoveryListener  {
    List main_list,dev_list;
    Command exit,ok;
    TextBox cmd;
    Display display;
    java.util.Vector devices,services;
    LocalDevice local;
    DiscoveryAgent agent;
    DataOutputStream dout;
    int currentDevice = 0;       //used as an indicator to the device queried for
                                 //the echo server

public void startApp() {
    main_list = new List("Echo Server",Choice.IMPLICIT);   //the main menu
    dev_list  = new List("Select Device",Choice.IMPLICIT); //the list of devices
    cmd       = new TextBox("Text to echo","",120,TextField.ANY);
    exit      = new Command("Exit",Command.EXIT,1);
    ok        = new Command("Send",Command.OK,1);
    display   = Display.getDisplay(this);

    main_list.addCommand(exit);
    main_list.setCommandListener(this);
    dev_list.addCommand(exit);
    dev_list.setCommandListener(this);
    cmd.addCommand(ok);
    cmd.setCommandListener(this);

    main_list.append("Find Echo Server",null);
    display.setCurrent(main_list);

    }
public void commandAction(Command com, Displayable dis) {
    if (com == exit){                                              //exit triggered from the main form
        destroyApp(false);
        notifyDestroyed();
    }
    if (com == List.SELECT_COMMAND){
        if (dis == main_list){                                     //select triggered from the main from
            if (main_list.getSelectedIndex() &gt;= 0){                //find devices
                FindDevices();
                do_alert("Searching for devices...", Alert.FOREVER);
            }
        }
        if (dis == dev_list){                                      //select triggered from the device list
            StreamConnection conn = null;
            ServiceRecord service = (ServiceRecord)
                            services.elementAt(dev_list.getSelectedIndex());
            String url = service.getConnectionURL(
                                   ServiceRecord.NOAUTHENTICATE_NOENCRYPT,
                                   false);
            try {
                conn = (StreamConnection) Connector.open(url);       //establish the connection
                dout = new DataOutputStream(conn.openOutputStream());//Get the output stream
                display.setCurrent(cmd);                             //Show the textbox
            } catch (Exception e) {this.do_alert("Error Connecting" , 4000);}

        }
     }
    if(com == ok){                                                  //the user is sending a command
        try{
            dout.writeChars(cmd.getString() + "\n");
            dout.flush();
            cmd.setString("");
        } catch (Exception e) {this.do_alert("Error sending data" , 4000);}
    }
}

public void FindDevices(){
    try{
        devices              = new java.util.Vector();
        LocalDevice local    = LocalDevice.getLocalDevice();
        DiscoveryAgent agent = local.getDiscoveryAgent();
        agent.startInquiry(DiscoveryAgent.GIAC,this);
    }catch(Exception e){this.do_alert("Erron in initiating search" , 4000);}
 }

public void FindServices(RemoteDevice device){
    try{
        UUID[] uuids  = new UUID[1];
        uuids[0]      = new UUID("27012f0c68af4fbf8dbe6bbaf7aa432a",false);    //The UUID of the ech service
        local         = LocalDevice.getLocalDevice();
        agent         = local.getDiscoveryAgent();
        agent.searchServices(null,uuids,device,this);
    }catch(Exception e){this.do_alert("Erron in initiating search" , 4000);}
}

public void deviceDiscovered(RemoteDevice remoteDevice,DeviceClass deviceClass) {
    devices.addElement(remoteDevice);
}

public void servicesDiscovered(int transID,ServiceRecord[] serviceRecord) {
    for (int x = 0; x &lt; serviceRecord.length; x++ )
        services.addElement(serviceRecord[x]);
    try{
        dev_list.append(((RemoteDevice)devices.elementAt(currentDevice)).
                                            getFriendlyName(false),null);
    }catch(Exception e){this.do_alert("Erron in initiating search" , 4000);}
}
public void inquiryCompleted(int param){
    switch (param) {
        case DiscoveryListener.INQUIRY_COMPLETED:    //Inquiry completed normally
            if (devices.size() &gt; 0){                 //Atleast one device has been found
                services = new java.util.Vector();
                this.FindServices((RemoteDevice)
                         devices.elementAt(0));     //Check if the first device offers the service
            }else
                do_alert("No device found in range",4000);
        break;
        case DiscoveryListener.INQUIRY_ERROR:       // Error during inquiry
            this.do_alert("Inqury error" , 4000);
        break;
        case DiscoveryListener.INQUIRY_TERMINATED:  // Inquiry terminated by agent.cancelInquiry()
             this.do_alert("Inqury Canceled" , 4000);
        break;
       }
}

public void serviceSearchCompleted(int transID, int respCode) {
    switch(respCode) {
        case DiscoveryListener.SERVICE_SEARCH_COMPLETED:
            if(currentDevice == devices.size() -1){ //all devices have been searched
                if(services.size() &gt; 0){
                    display.setCurrent(dev_list);
                }else
                    do_alert("The service was not found",4000);
            }else{                               //search next device
                currentDevice++;
                this.FindServices((RemoteDevice)devices.elementAt(currentDevice));
            }
        break;
        case DiscoveryListener.SERVICE_SEARCH_DEVICE_NOT_REACHABLE:
             this.do_alert("Device not Reachable" , 4000);
        break;
        case DiscoveryListener.SERVICE_SEARCH_ERROR:
             this.do_alert("Service serch error" , 4000);
        break;
        case DiscoveryListener.SERVICE_SEARCH_NO_RECORDS:
            this.do_alert("No records returned" , 4000);
        break;
        case DiscoveryListener.SERVICE_SEARCH_TERMINATED:
            this.do_alert("Inqury Cancled" , 4000);
        break;
     }
}

public void do_alert(String msg,int time_out){
    if (display.getCurrent() instanceof Alert ){
        ((Alert)display.getCurrent()).setString(msg);
        ((Alert)display.getCurrent()).setTimeout(time_out);
    }else{
        Alert alert = new Alert("Bluetooth");
        alert.setString(msg);
        alert.setTimeout(time_out);
        display.setCurrent(alert);
    }
}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

}

Silakan anda juga membaca: http://www.miniware.net/articles/viewarticle.php?id=22

-= Sapto Sutardi =-
Mataram, 4 November 2009

Cek Bluetooth HP dll

1. Untuk melihat apakah HP anda mendukung jSR-82:

try{
Class.forName("javax.bluetooth.LocalDevice");
}
catch(Exception ex){
System.out.println("No support for JSR-82");
}

2. Mulai mencari HP/alat yang mendukung Bluetooth, maka  gunakan “DiscoveryAgent”:

LocalDevice localDevice = LocalDevice.getLocalDevice();
discoveryAgent = localDevice.getDiscoveryAgent();
discoveryAgent.startInquiry(DiscoveryAgent.GIAC, this);


3. Method “deviceDiscovered” dipanggil ketika HP/Alat ditemukan:

public void deviceDiscovered(RemoteDevice remoteDevice, DeviceClass cod) {
try{
remoteDevices.addElement(remoteDevice);
} catch(Exception e){
e.printStackTrace();
}
}

4. Ketika HP/Alat ditemukan maka untuk mencari servis/layanan maka kita menggunakan:

LocalDevice localDevice = LocalDevice.getLocalDevice();
DiscoveryAgent discoveryAgent = localDevice.getDiscoveryAgent();
discoveryAgent.searchServices(attrSet, uuidSet, remoteDevice, this);
And the servicesDiscovered method is called when a service is found:
public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
for(int i = 0; i &lt; servRecord.length; i++) {
DataElement serviceNameElement =
servRecord[i].getAttributeValue(0x0100);
String temp_serviceName =
(String)serviceNameElement.getValue();
String serviceName = temp_serviceName.trim();
}
}

Sumber: http://developer.sonyericsson.com/site/global/techsupport/tipstrickscode/java/p_bluetooth_probe_jsr82.jsp

-= Sapto Sutardi =-

Mataram, 17 Okt. 2009