AplikasiSMS – Mengirim USSD dengan SMSLib

Posting kali ini adalah pembahasan terakhir dari pembuatan AplikasiSMS, yaitu tentang mengirim USSD menggunakan smslib.

Untuk mengirim ussd dengan smslib sebenernya sudah disediakan method tersendiri, yaitu sendUssdCommand(). Tetapi dalam praktiknya, method tersebut tidak berfungsi normal saat menggunakan hp merk Sony Ericson seperti K310, W200. Jika modem yang digunakan adalah modem wavecom, dengan method ini sudah berjalan normal. Agar AplikasiSMS ini dapat berjalan lebih banyak modem, maka pengiriman ussd menggunakan method sendCustomATCommand().

/**
     * Method untuk mengirim USSD
     * @param tujuan
     * @param ussd
     * @return
     * @throws Exception 
     */
    public String sendUssd(String tujuan, String ussd) throws Exception{
        if(service.getServiceStatus()==Service.ServiceStatus.STARTED){
            if(!sendUssdManual.trim().isEmpty()){
                sendUssdManual="";
            }
            lblStatus.setText("PROSES");
            tulisLayar(3, "["+tujuan+"]", ussd, calendar.getTime(), "USSD SENT");
            
            try{
                tempString3 = gateway.sendCustomATCommand("at+cusd=1,\""+ussd+"\",15\r");
                tempString3 = tempString3.trim();
            }catch(Exception exception){
                exception.printStackTrace();
            }
            
            if(tempString3==null || tempString3.isEmpty()){
                tempString3 = "ERROR1";
            }
        }else{
            tempString3 = "ERROR2";
        }
        
        return tempString3;
    }

Untuk menangkap pesan dari proses ussd, kita akan memanfaatkan fasilitas callback dari smslib. Berikut inner class yang digunakan.

/**
     * Class yang akan dijalankan saat aplikasi menerima pesan USSD dari USSD yang telah dikirim
     */
    class USSDInboundNotification implements IUSSDNotification{

        @Override
        public void process(AGateway ag, USSDResponse ussdr) {
            System.out.println(ussdr);
            if(ussdr.getContent()!=null){
                if(trxDial!=null && !trxDial.isEmpty()){
                    tulisLayar(2, "["+trxDial+"]", ussdr.getContent(), calendar.getTime(), "USSD INBOUND READ");
                    trxDial="";
                }else{
                    tulisLayar(2, "[-]", ussdr.getContent(), calendar.getTime(), "USSD INBOUND READ");
                }
            }else{
                tulisLayar(2, "[-]", ussdr.getSessionStatus().toString(), calendar.getTime(), "USSD INBOUND ERROR");
            }
            if(ussdr.getSessionStatus().equals(USSDSessionStatus.FURTHER_ACTION_REQUIRED)){
                try{
                    Thread.sleep(1000);
                        System.out.println("Hasil AT1 : "+gateway.sendCustomATCommand("at\r"));
                        System.out.println("Hasil AT2 : "+gateway.sendCustomATCommand("at+cusd=2\r"));
                    }catch(Exception ex){
                        ex.printStackTrace();
                    }
            }
        }
        
    }

Pesan ussd yang diterima akan ditampilkan dalam layar aplikasi dengan memanfaatkan method tulisLayar(). Didalam aplikasi ini tidak mendukung ussd yang interaktif, jadi setelah menerima pesan sesi ussd akan dihapus.

, , , , , ,

  1. #1 by resa on August 10, 2016 - 6:24 pm

    boleh minta projectnya gan

    • #2 by Achmad Lutfi on August 11, 2016 - 12:32 pm

      Silahkan download di menu Project

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: