IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Mobile en Java Discussion :

Traitement de la réception d'un SMS


Sujet :

Développement Mobile en Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Par défaut Traitement de la réception d'un SMS
    Bonjour,

    Dans le cadre d'un stage en deuxieme année d'informatique,
    je dois créer une application qui envoie les message et les receptionne,

    J'ai appris à communiquer avec le Port com et l"utilisation des buffers avec le tuto javax.comm de Christophe Jollivet
    ici -> http://christophej.developpez.com/tu...java/javacomm/

    L'envoie c'est OK, elle est en prod pour la notification SMS sur l'onduleur des serveurs.

    Cependant il faudrait que lorsque j'envoie un code sur le GSM branché dans la salle serveur en fonction du code reçu il y est un traitement.

    J'arrive à lister les messages dans la memoire du téléphone.
    J'arrive à communiquer sur le port COM.

    Voici le resultat de la commande AT du CGML (listage) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    +CMGL: 0,"REC READ","33681*0*6*4",,"09/04/08,16:16:19-08"
    Premier message
     
    +CMGL: 1,"REC READ","33681*0*6*4",,"09/04/08,16:35:47-08"
    Deuxieme message
    Comment puis-je extraire le numero et le message pour pouvoir faire le traitement?
    J'ai pensé a utilise un Pattern mais le message et sur une autre ligne donc l'index de l'array ne peut etre definis en dur. ensuite une regex mais je ne vois pas ou je pourrais couper...

    Pour créer cette affichage voici ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    try{
    			out = port.getOutputStream();
    			in2 = new Scanner(new InputStreamReader(port.getInputStream()));
     
    		}catch(IOException e){
    			System.out.println(e.getMessage());
    		}
    		byte[] theBytes= (command+"\n").getBytes();
    		for (int i=0; i<theBytes.length;i++){
    			char newCharacter = (char)theBytes[i];
    			if ((int)newCharacter==10) newCharacter = '\r';
    			try{
    				out.write((int)newCharacter);
    			}catch(IOException e){
    				System.out.println(e);
    			}
    		}
    		int i = 0;
    		String text = ""; 
    		String tmp = "";
     
    		while(in2.hasNext()){
    			tmp = in2.nextLine();
     
    			if(tmp.compareTo("OK")==0){
    				i++;
    			}else if(tmp.compareTo(command)==0){
    			}else if(tmp.contains("+CMS ERROR: ")==true){
    				break;
    			}else{
    				text=text+"\n"+tmp;
    			}
    			if(i>=2){
    				System.out.println(text);
    				break;
    			}
    		}
    Merci d'avance.

    Xenogaz

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Par défaut
    Personne ne peux me répondre....

    est-ce que quelqu'un peux m'aider a faire une expression reguliere : tuto exemple ...

  3. #3
    Membre averti
    Inscrit en
    Février 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 11
    Par défaut reception /envoi sms
    Voici une Midlet qui permet l'envoi et la réception de sms.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
     
    import javax.microedition.midlet.*;
    import javax.microedition.io.*;
    import javax.microedition.lcdui.*;
    import javax.wireless.messaging.*;
    import java.io.IOException;
     
    public class SMSMIDlet
    extends MIDlet
    implements CommandListener, Runnable {
    private Sender mSender = null;
    private Thread mReceiver = null;
    private Command mExitCommand = new Command("Exit", Command.EXIT, 2);
    private Command mRedCommand = new Command("Send Red", Command.SCREEN, 1);
    private Command mBlueCommand = new Command("Send Blue", Command.SCREEN, 1);
    private Display mDisplay = null;
    protected ImageItem mColorSquare = null;
    protected Image [] mImages = new Image[2];
    protected Image waitImage = null;
    private String mPort = "1234";
    private TextField mNumberEntry= null;
    private Form mForm = null;
    private String mSenderAddress = null;
    public SMSMIDlet() {
    mSender = Sender.getInstance();
    }
    public void commandAction(javax.microedition.lcdui.Command c,
    javax.microedition.lcdui.Displayable d) {
    if (c == mExitCommand) {
    if (!mSender.isSending()) {
    destroyApp(true);
    notifyDestroyed();
    }
    } else if (c == mRedCommand) {
    String dest = mNumberEntry.getString();
    if (dest.length() > 0)
    mSender.sendMsg(dest, mPort, "red");
    } else if (c == mBlueCommand) {
    String dest = mNumberEntry.getString();
    if (dest.length() > 0)
    mSender.sendMsg(dest, mPort, "blue");
    }
    }
     
    protected void destroyApp(boolean param) {
    try {
    mEndNow = true;
    conn.close();
    } catch (IOException ex) {
    System.out.println("destroyApp caught: ");
    ex.printStackTrace();
    }
    }
    protected void pauseApp() {
    }
    protected void startApp() {
    if (mForm == null) {
    mForm = new Form("SMSMIDlet");
    mNumberEntry = new TextField("Connect to:",
    null, 256, TextField.PHONENUMBER);
    try {
    mImages[0] = Image.createImage("/red.png");
    mImages[1] = Image.createImage("/blue.png");
    waitImage = Image.createImage("/wait.png");
    } catch (Exception ex) {
    System.out.println("startApp caught: ");
    ex.printStackTrace();
    }
    mColorSquare = new ImageItem(null, waitImage,ImageItem.
    LAYOUT_DEFAULT, "colored square");
    mForm.append(mNumberEntry);
    mForm.append(mColorSquare);
    mForm.addCommand(mExitCommand);
    mForm.addCommand(mRedCommand);
    mForm.addCommand(mBlueCommand);
    mForm.setCommandListener(this);
    }
    Display.getDisplay(this).setCurrent(mForm);
    startReceive();
    }
    private void startReceive() {
    if (mReceiver != null)
    return;
     
    // Start receive thread
    mReceiver = new Thread(this);
    mReceiver.start();
    }
    private boolean mEndNow = false;
    private MessageConnection conn = null;
    public void run() {
    Message msg = null;
    String msgReceived = null;
    conn = null;
    mEndNow = false;
    /** Check for sms connection. */
    try {
    conn = (MessageConnection) Connector.open("sms://:" + mPort);
    msg = conn.receive();
    while ((msg != null) && (!mEndNow)) {
    if (msg instanceof TextMessage) {
    msgReceived = ((TextMessage)msg).getPayloadText();
    if (msgReceived.equals("red")) {
    Display.getDisplay(this).callSerially(new SetRed());
    } else if (msgReceived.equals("blue")) {
    Display.getDisplay(this).callSerially(new SetBlue());
    }
    }
    msg = conn.receive();
    }
    } catch (IOException e) {
    // Normal exit when connection is closed
    }
    }
    class SetRed implements Runnable {
    Display disp = null;
    public void run() {
    mColorSquare.setImage(mImages[0]);
    }
    }
    class SetBlue implements Runnable {
    public void run() {
    mColorSquare.setImage(mImages[1]);
    }
    }
    }



    Comment tester l'envoi de SMS :

    Vous pouvez facilement tester SMSMIDlet, ou toute application SMS, à l'aide d'un utilitaire appelé le WMA présent dans WTK 2.x. .Pour accéder à la console de WMA, sélectionnez "files" puis "utilities" . Cliquez ensuite la console WMA, puis sélectionnez "launch".

    Pour tester SMSMIDlet, d'abord démarrer une instance dans l' émulateur.
    Quand il démarre. Notez que sur la barre de titre de l'émulateur un numéro de téléphone apparait, ce dernier commence par Un "+" , Par défaut, c'est le +5550000, C'est le numéro de l'émulateur.
    Maintenant, lancez la console de WMA, Sélectionnez le numéro de l'émulateur, cliquez sur le bouton "send SMS".

  4. #4
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Par défaut Errreur à la Class Sender
    Bonjour, moi j'ai essayé d'exécuter cette application mais , c'est pas possible car la classe Sender est inexistante, dans le programme,... Si vous m'aider ...
    Merci.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Par défaut
    Voici la methode qui permet d'envoyer le SMS

    public void sendAssms(String message,String num)
    {
    try {

    final MessageConnection mc = (MessageConnection) Connector.open("sms://"+num+":1234");
    TextMessage tm= (TextMessage)mc.newMessage(MessageConnection.TEXT_MESSAGE);
    tm.setPayloadText(message);
    mc.send(tm);
    mc.setMessageListener(new MessageListener() {

    public void notifyIncomingMessage(MessageConnection arg0) {

    System.out.println("=============AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaaa");

    }
    });




    } catch (IOException ex) {

    System.out.println("===========Error d envoie par sms"+ex.toString());
    }
    }

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/04/2015, 17h45
  2. Ouvrir une URL à la réception d'un SMS
    Par blacktigris dans le forum Android
    Réponses: 8
    Dernier message: 07/02/2014, 15h37
  3. Traitement de la réception d'un SMS provenant d'un mobile
    Par mhamed.b dans le forum Général Java
    Réponses: 4
    Dernier message: 03/10/2012, 14h50
  4. Réception d'un SMS
    Par hello_world88 dans le forum Java ME
    Réponses: 5
    Dernier message: 06/09/2011, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo