× Aktuálně z oboru

Programátoři po celém světě dnes slaví Den programátorů [ clanek/2018091300-programatori-po-celem-svete-dnes-slavi-den-programatoru/ ]
Celá zprávička [ clanek/2018091300-programatori-po-celem-svete-dnes-slavi-den-programatoru/ ]

Odesílání SMS zpráv pomocí J2ME

[ http://programujte.com/profil/733-alan-fuks/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/118-zdenek-lehocky/ ]Google [ ?rel=author ]       21. 2. 2007       22 439×

Možná, že v nějaké vaší mobilní aplikaci budete potřebovat dát uživateli možnost odeslat SMS zprávu. Zde vám ukážu, jak na to.

K odesílání SMS zprávy budeme potřebovat balík WMA (Wireless Messaging API). Krom něj budeme potřebovat standardní balíky lcdui, midlet a io (vstup/výstup).


import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.wireless.messaging.*;

Vytvoříme veřejnou třídu a jako extends nastavíme MIDlet a jako implements CommandListener. Upozorňuji, že třída musí mít stejný název jako soubor (v tomto případě sms.java).


public class sms extends MIDlet implements CommandListener{

Nyní je třeba vytvořit proměnné, které budeme potřebovat. K čemu je budeme potřebovat, je napsáno v komentářích:


Display display; //promenna predstavujici display mobilniho telefonu
Form fCislo; //formular
TextBox txtText; //pro text vasi zpravy
TextField txtCislo; //textove pole pro zadaní tel. cisla
MessageConnection conn = null; //promenna k otevreni spojeni
String sCislo; //telefoni cislo prijemce
     
Command cOdeslat = new Command("Odeslat",Command.OK,1); //tlacitko pro prepnuti obrazovky
Command cOk = new Command("OK",Command.OK,1); //tlacitko pro odeslani SMS zpravy
Command cKonec = new Command("Konec",Command.EXIT,0); //tlacitko pro ukonceni aplikace

Teď přichází na řadu definice proměnných ve funkci sms():


public sms(){
    display = Display.getDisplay(this); //definovani promenne display
    fCislo = new Form("Cislo"); //vytvoreni Formulare
    txtText = new TextBox("Text vaší zptávy","",160,TextField.ANY); //vytvoreni TextBoxu
    txtCislo = new TextField("Telefoni cislo:","",13,TextField.PHONENUMBER); //T.P. do ktereho pujde zadavat pouze cisla a +
  }

Ve funkci startApp přiřadíme tlačítka formulářům a nastavíme formulář, který se má zobrazit při zapnutí aplikace.


public void startApp(){
    txtText.addCommand(cOdeslat); //pridani tlacitka cOdelsat
    txtText.addCommand(cKonec);
    txtText.setCommandListener(this); //nastavit "poslouchani" tlacitek u txtText
    
    fCislo.append(txtCislo); //pridat textove pole na formular fCislo
    fCislo.addCommand(cOk);
    fCislo.addCommand(cKonec);
    fCislo.setCommandListener(this); //nastavit "poslouchani" tlacitek u formulare fCislo
    
    display.setCurrent(txtText); //zobrazit na displayi txtText
  }

A ještě nezbytné funkce:


  public void pauseApp(){ } //f-ce pro pauznutí aplikace - povinna           
  public void destroyApp(boolean b){ } //f-ce pro ukonceni aplikace - povinna

A teď funkce, ve které budou všechny akce po stisknutí jednotlivých tlačítek:


  public void commandAction(Command c,Displayable d){
    if(c == cOdeslat){ //pokud bylo stisknuto tlacitko cOdeslat
      display.setCurrent(fCislo); //nastavit na displayi formular fCislo
      
    }

A teď přichází na řadu to nejdůležitější, pokud bylo stisknuto tlačítko Ok pro odeslání SMS zprávy, přiřadíme proměnné sCislo důležitý prefix sms:// a telefonní číslo příjemce z textového pole. Poté otevřeme spojení, vytvoříme SMS zprávu a vložíme do ní text z TextBoxu a poté již můžeme zprávu odeslat. Nakonec jenom ošetříme některé výjimky a je to.


    if(c == cOk){
      sCislo = "sms://"+txtCislo.getString(); //prefix sms:// + telefoni cislo prijemce
      
      try{
        conn = (MessageConnection) Connector.open(sCislo); //otevreni spojeni
        TextMessage zprava = (TextMessage)conn.newMessage(conn.TEXT_MESSAGE); //vytvoreni SMS zpravy
        zprava.setPayloadText(txtText.getString()); //pridame do SMS zpravy nas text
        conn.send(zprava); //a posleme ji..
      }
      catch(Exception e){
        destroyApp(true); //pri vyjimce ukoncime aplikaci
        notifyDestroyed();
      } finally {
        if(conn != null){
          try{
            conn.close(); // pokud nebylo spojeni ukonceno, tak jej ukoncime
            
          }
          catch(Exception e){
            destroyApp(true); //pri vyjimce ukoncime aplikaci
            notifyDestroyed();
          } 
        }
      }
    
    }

A pokud uživatel zvolil tlačítko Konec, ukončíme aplikaci.


    if(c == cKonec){
      destroyApp(true); //ukoncime aplikaci
      notifyDestroyed();
    
    }
  
  }

Zdrojový kód celé aplikace:


import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.wireless.messaging.*;

public class sms extends MIDlet implements CommandListener{
  Display display; //promenna predstavujici display mobilniho telefonu
  Form fCislo; //formular
  TextBox txtText; //pro text vasi zpravy
  TextField txtCislo; //textove pole pro zadaní tel. cisla
  MessageConnection conn = null; //promenna k otevreni spojeni
  String sCislo;
     
  Command cOdeslat = new Command("Odeslat",Command.OK,1); //tlacitko pro prepnuti obrazovky
  Command cOk = new Command("OK",Command.OK,1); //tlacitko pro odeslani SMS zpravy
  Command cKonec = new Command("Konec",Command.EXIT,0); //tlacitko pro ukonceni aplikace
  
  public sms(){
    display = Display.getDisplay(this); //definovani promenne display
    fCislo = new Form("Cislo"); //vytvoreni Formulare
    txtText = new TextBox("Text vaší zptávy","",160,TextField.ANY); //vytvoreni TextBoxu
    txtCislo = new TextField("Telefoni cislo:","",13,TextField.PHONENUMBER); //T.P. do ktereho pujde zadavat pouze cisla a +
  }
  public void startApp(){
    txtText.addCommand(cOdeslat); //pridani tlacitka cOdelsat
    txtText.addCommand(cKonec);
    txtText.setCommandListener(this); //nastavit "poslouchani" tlacitek u txtText
    
    fCislo.append(txtCislo); //pridat textove pole na formular fCislo
    fCislo.addCommand(cOk);
    fCislo.addCommand(cKonec);
    fCislo.setCommandListener(this); //nastavit "poslouchani" tlacitek u formulare fCislo
    
    display.setCurrent(txtText); //zobrazit na displayi txtText
  }
  
  public void pauseApp(){ } //f-ce pro pauznutí aplikace - povinna
  public void destroyApp(boolean b){ } //f-ce pro ukonceni aplikace - povinna
  
  public void commandAction(Command c,Displayable d){
    if(c == cOdeslat){ //pokud bylo stisknuto tlacitko cOdeslat
      display.setCurrent(fCislo); //nastavit na displayi formular fCislo
      
    }
    if(c == cOk){
      sCislo = "sms://"+txtCislo.getString(); //prefix sms:// + telefoni cislo prijemce
      
      try{
        conn = (MessageConnection) Connector.open(sCislo); //otevreni spojeni
        TextMessage zprava = (TextMessage)conn.newMessage(conn.TEXT_MESSAGE); //vytvoreni SMS zpravy
        zprava.setPayloadText(txtText.getString()); //pridame do SMS zpravy nas text
        conn.send(zprava); //a posleme ji..
      }
      catch(Exception e){
        destroyApp(true); //pri vyjimce ukoncime aplikaci
        notifyDestroyed();
      } finally {
        if(conn != null){
          try{
            conn.close(); // pokud nebylo spojeni ukonceno, tak jej ukoncime
            
          }
          catch(Exception e){
            destroyApp(true); //pri vyjimce ukoncime aplikaci
            notifyDestroyed();
          } 
        }
      }
    
    }
    
    if(c == cKonec){
      destroyApp(true); //ukoncime aplikaci
      notifyDestroyed();
    
    }
  
  }
}

To je vše. Nakonec jenom dodám, že tato SMS stojí stejně jako normální SMS! Doufám, že se po mně po zveřejnění nebudete dožadovat dobití kreditu :-).


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2007011306-odesilani-sms-zprav-pomoci-j2me/ ].