Jun 3, 2010

Mengirim dan Menerima SMS Dengan J2ME

Lama nih gak posting tutorial pemrograman, nah kali ini saya mau memposting tentang Tutorial J2ME. Bukan karena apa-apa saya memilih posting tentang tutorial j2me, hanya sejak dua minggu ini saya memang disibukkan dengan proyek berhubungan dengan j2me. sekalian belajar dan biar tidak lupa maka saya tulis aja script j2me yang telah saya coba.


Baik, langsung saja kita buat aplikasi j2me. aplikasi kali ini adalah aplikasi paling favorit di hapir seluruh tutorial j2me yang pernah saya baca di internet. Mari kita bikin, aplikasi mengirim dan menerima sms dengan j2me.
Untuk yang pertama, mari kita buat aplikasi j2me  untuk mengiriim sms

import javax.microedition.io.Connector;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.TextMessage;

public class kirimSMS extends MIDlet implements CommandListener,Runnable {
 
 private Form sendMessageForm;
 private TextField number, msg;
 private Command cmdOK,cmdExit;
 private String telpNum, isiPesan = "";
 
 public SendMidlet(){
  cmdExit = new Command("Back", Command.EXIT, 2);
  cmdOK = new Command("Send", Command.SCREEN, 2);
  sendMessageForm = new Form("Send Message");
  msg = new TextField("Message:", null, 50, TextField.ANY);
  number = new TextField("Telepon:", null, 15, TextField.PHONENUMBER);
  
  sendMessageForm.append(number);
  sendMessageForm.append(msg);
  sendMessageForm.addCommand(cmdOK);
  sendMessageForm.addCommand(cmdExit);
  sendMessageForm.setCommandListener(this);
 }

 protected void destroyApp(boolean arg0) {
  notifyDestroyed();
 }

 protected void pauseApp() {
 }

 protected void startApp() throws MIDletStateChangeException {
  Display.getDisplay(this).setCurrent(sendMessageForm);
 }

 public void commandAction(Command arg0, Displayable arg1) {
  if(arg0==cmdOK){
   telpNum = number.getString();
   isiPesan = msg.getString(); 
   new Thread(this).start();
   number.setString("");
   msg.setString("");
   Display.getDisplay(this).setCurrent(sendMessageForm);
  }else if(arg0==cmdExit){
   destroyApp(true);
  }
 }

 public void run() {
  try{
   String nomorTelp = "sms://" + telpNum + ":1234";
   MessageConnection conn = (MessageConnection)Connector.open(nomorTelp);
   TextMessage msg = (TextMessage) conn.newMessage(MessageConnection.TEXT_MESSAGE);
   msg.setPayloadText(isiPesan);
   conn.send(msg);
   conn.close();
  }catch(Exception e){
   e.printStackTrace();
  }
  
 }

} 

Dan ini adalal hasil penampakan script j2me diatas

Berikutnya adalah membuat listener penerima sms diatas, sama gampangnya. Kawan isa copy paste script dibawah ini pasti jalan

import javax.microedition.io.Connector;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.wireless.messaging.Message;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.TextMessage;


public class terimaSMS extends MIDlet implements Runnable, CommandListener {

 private TextBox tb;
 private String text = "Menunggu pesan...";
 private Command okComand;

 public terimaSMS() {

  tb = new TextBox("Hello MIDlet", text, 150, 0);

 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
 }

 protected void pauseApp() {
 }

 protected void startApp() throws MIDletStateChangeException {
  Display.getDisplay(this).setCurrent(tb);
  new Thread(this).start();

 }

 public void changeScreen() {
  tb = new TextBox("SMS MIDlet", text, 150, 0);
  Display.getDisplay(this).setCurrent(tb);
 }
 
 public void addConfirmation(String msg) {
  tb = new TextBox("SMS MIDlet", text, 150, 0);
  tb.setString(msg);
  okComand = new Command("OK",Command.OK,1);
  tb.addCommand(okComand);
  tb.setCommandListener(this);
  Display.getDisplay(this).setCurrent(tb);
 }

 public void run() {
  try {
   MessageConnection rconn = (MessageConnection) Connector
     .open("sms://:1234");

   while (true) {
    Message msg = rconn.receive();
    if (msg instanceof TextMessage) {
     TextMessage tmsg = (TextMessage) msg;
     String msgOut = tmsg.getPayloadText();
     
     addConfirmation(msgOut);
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public void commandAction(Command arg0, Displayable arg1) {
 }
}

dan penampakannya akan sperti berikut


Trus, cara coba kirim sms gimana? Ini lebih gampang lagi
1. Jalakan aplikasi kirimSMS dan terimaSMS
2. Pada aplikasi kirim sms nomer tujaannya disusaikan dgn port dimana aplikasi terima sms di jalankan. pada aplikasi diatas, apalikasi j2me terimaSMS jalan di port +5550000. maka di aplikasi kirimSMS nomer tujuannya adalah +5550000
hasilnya seperti dibawah ini

26 comments:

Sonic said...

Sori mas ganggu
saya masih bru bljar java tepatnya J2ME ini, yang sysingin tanyankan, anda menggunakan program apa?NetBean?apa J2ME Wireless Toolkit?
bisa kasih tutor dari awal buka project mas?
terima kasih

anakberbakti said...

Sama , saya juga barus saja belajar. program diatas saya tulis dengan ECLIPSE. skrng baru tau klo dengan netbean lebih mudah.
nanti akan saya porting bagai mana membuat program j2me step by step nya

Sonic said...

iy mas saya tunggu tutornya :D
senang bisa berkunjung disini

Anonymous said...

malem, wah saya juga baru latihan buat apps sms nih.. mohon bantuan plis..
sori, lgsung nanya 2 p'tnyaan ya..

pertama
":1234" di method run() buat apa ya..?
ini nih=> String nomorTelp = "sms://" + telpNum + ":1234";

kedua
di class terimaSMS, disitu TextBox tb di instance 2 kali di method changeScreen() sama addConfirmation(String msg, kalo satu aja bisa gak ya..?

trims buat jawabannya..

anakberbakti said...

@anonim
:1234 adalah listening port. jadi komunikasi sms tersebut menguunakan port 1234.
Pada kenyataan jika digunakan pada hp, hilangkan ":1234". Kecuali jika anda memang membuat aplikasi khusus yang menggunakan port untuk menerima sms.

Anonymous said...

kl listenng port bwt aplikasi MMS gmn y kak?? lg bikin aplikasi ni..

xeonx said...

kalo d guanakan di HP beneran bisa g ya? padahal sudah saya install di hp SONER k320i, tp kok tkok g bisa ngirim ya...??
mohon bantuaanya donk....

Suhaya Komarudin said...

Jadi nambah ilmu nih, makasih ..

Teguh Santoso said...

public sendmidlet ketika dipindah ke netbeans ko error, yg dikelas kirimsms.
bagaimana solusinya??

Anonymous said...

ko midletnya kirimSMS, constructornya SendMIDlet ?

Anonymous said...

iya, konstruktornya diganti tuh, jadi kirimSMS, klo tetep itu, nantinya ga bisa jalan dan akan ada 1 error pada baris konstruktornya,,
ohh iya mas, saya udah praktekan source code dr mas, tapi pada saat saya kirim, kenapa di terimaSMS tidak ada sms yang masuk ya mas? mohon penjelasannya
terima kasih

anakberbakti said...

Iya bener harusnya sama, untuk di eclipse masih bisa jalan. tapi jika menggunakan netbeans gak jalan.

kebetulan saya pake eclipse

jika tidak sampai ke penerima perhatikan point ini

" Pada aplikasi kirim sms nomer tujaannya disusaikan dgn port dimana aplikasi terima sms di jalankan. pada aplikasi diatas, apalikasi j2me terimaSMS jalan di port +5550000."

biasanya masalahnya disini

Anonymous said...

mas, aku nyoba yang kirimSMS kok g muncul tampilanya y waktu d run?
aku baru nyoba pakai eclipse sih, n ud baca postingan mas yg "Step By Step J2ME Menggunakan ECLIPSE" jg...

oya mas, itu kirim n terima smsnya dalam 1 aplikasi atau jadi 2 aplikasi yg berbeda y?
terima kasih

anakberbakti said...

@anonim, sampean harus bikin 2 aplikasi. 1 untuk kirim, 1 lagi untuk terima ( ini hanya untuk testing )

jika real nya, anda cuma harus bikin 1 aplikasi kirim

anakberbakti said...

1 lagi untuk yang ingin belajar j2me. Saran ya!! perhatikan

"DARIPADA ANDA BUANG WAKTU BELAJAR J2ME, MEDING LSG BELAJAR BAHASA KETURUNANNYA SAJA"

Misal, anda mau belajar bikin aplikasi android, lsg belajarlah pemrograman android. http://developer.android.com

mau bikin aplikasi BB, ya lsg saja ke pemrograman BB.

Jika anda programer java, tentu lebih mudah paham.

j2me sudah ketinggalan jaman

Angga 11007719 said...

om kok pas ane coba run. ada pesan error " aplication may have done an illegal poperation".
padahal di sintak udah gk ada error.
dibantu ya om.. hhe

Anonymous said...

permisi..
saya mhasiswa tingkat akhir dari Sanata Dharma mau tnya,,
klo kita membuat aplikasi dari pc menggunakan bantuan library SMSLib dan AT-Commands lalu dikirim ke port-sms J2ME yg sudah ditentukan, ketika saya kirim dengan setingan encoding 7-bit ato 8-bit SMS dpat terkirim dan masuk pada inbox default HP,
gimana agar SMS yg dikirm dari PC bisa diterima oleh port-sms aplikasi J2ME yg saya buat???

bagaimana cara kirim SMS dari J2SE ke J2ME?
saya mencoba slalu masuk pada inbox bawan HP bukan inbox dari J2ME yg saya buat..
terima kasih,,,
mohon bimbingannya…

tlg yaa,,
andriyudha@ymail.com

anakberbakti said...

@anonim yang lagi bikin tugas akhir.
Setahu saya, dari perintah at-command GSM tidak pernah berjumpa mengirimkan ke port tertentu.
Jika lewat j2me, ada.
Dari curhatnya, sepertinya bingung bikin aplikasi sms container.
Ada gambaran yang mungkin bisa membantu.

Anda bikin 2 aplikasi 1 listener port 1234, dan 1 untuk send sms ke port 1234 .(jelas ini bukan masalah bagi anda)
Lalu bagaimana jika sms tersebut dikirim tanpa aplikasi send sms port 1234?
Caranya, copy saja inbox anda lalu simpan ke RMS, dan RMS dibaca oleh container.

Anonymous said...

mas mau nanya nih, kan saya udah buat aplikasi sms nya udh ada inbox sama outbox nya jg tuh, psan kluarnya udh bisa kesimpan d outbox tpi pesannya masuknya malahan gak kesimpan, gmn ya it? jadi bingung nih, saya kn newbi jg nih, mnta bntuan nya mas :)

Anonymous said...

numpang tanya, kalau sms berbasis gprs caranya gimana?! ada solusi.. (buat T.A)
Jazakumullah khairan :)

Anonymous said...

untuk sms berbasis gprs, ada solusi gan..?!
buat tugas akhir, jazakumullah khairan..

anakberbakti said...

@anonim, tidak pernah ada sms berbasis gprs.
tapi jika seperti ini bisa, "app j2me kirim data ke server (web service), lalu server ngirim sms pada nomer yang dimaksud"

Anonymous said...

mau nanya mas...masih baru di j2me
satu halaman sms kan kena 160 karakter
letak programnnya dimana y????supaya kita tau berapa jumlah sms yg sudah qt kirim 1 atau 2 halaman sms

miar said...

mas mau tanya klo buat inbox sms bagaimana ? :D
Makasi mas

hanum said...

terkait dengan penerapan J2ME, bisa diunduh artikel berikut http://repository.gunadarma.ac.id/bitstream/123456789/1219/1/17110075.pdf

Anonymous said...

bisa ditolong kirim listing rms-nya gan buat simpan sms yg diterima dikotak masuk dan sms yg dikirim dikotak keluar ???
trims