Odesílání SMS zpráv pomocí J2ME
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

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

 

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

Google       Google       21. 2. 2007       17 960×

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.

Reklama
Reklama

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 :-).

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

4 názory  —  4 nové  
Hlasování bylo ukončeno    
0 hlasů
Google
Alan se věnuje programování webových aplikací a jazyku C++. Studuje na FEI-VŠB v Ostravě

Nové články

Obrázek ke článku Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

Reklama
Reklama
Obrázek ke článku ICT PRO školení zaměřené nejenom na ICT

ICT PRO školení zaměřené nejenom na ICT

Dovolte, abychom se představili. Jsme zaměstnanci společnosti ICT Pro, profesionálové v oblasti poskytování komplexních ICT služeb. Neboli služeb spojených s informačními a komunikačními technologiemi, které dnes - ve 21. století - tvoří  nedílnou součást běžného provozu všech moderních firem.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý