Question

J'ai trouvé projet source libre pour envoyer des sms en utilisant comm java: http://code.google.com/ p / find-ur-pal / source / browse / src /? r = 21

Fonction envoi sms ressemble à ceci:

  public void run(){

        boolean timeOut=false;
        long startTime=(new Date()).getTime();



        while ((step <7) && (!timeOut)){
//        log(""+((new Date()).getTime() - startTime);
          //check where we are in specified delay
          timeOut=((new Date()).getTime() - startTime)>delay;

          //if atz does not work, type to send cntrlZ and retry, in case a message was stuck
          if (timeOut && (step==1)) {
              step=-1;
              mySerial.send(        ""+cntrlZ);
          }

          //read incoming string
          String result=  mySerial.getIncommingString() ;

//      log ("<- "+result+"\n--------");
          int expectedResult=-1;

          try{
            //log ("Step:"+step);

            switch (step){
              case 0:

                mySerial.send("atz");
                delay=LONG;
                startTime=(new Date()).getTime();
                break;

              case 1:
                delay=STANDARD;
                mySerial.send("ath0");
                startTime=(new Date()).getTime();
                break;
              case 2:
                expectedResult=result.indexOf("OK");

                //log ("received ok ="+expectedResult);
                if (expectedResult>-1){
                  mySerial.send("at+cmgf=1");
                  startTime=(new Date()).getTime();
                }else{
                    step=step-1;
                }
                break;
              case 3:
                expectedResult=result.indexOf("OK");

               // log ("received ok ="+expectedResult);
                if (expectedResult>-1){
                  mySerial.send("at+csca=\""+csca+"\"");
                  startTime=(new Date()).getTime();
                }else{
                  step=step-1;
                }

                break;
              case 4:
                expectedResult=result.indexOf("OK");

               // log ("received ok ="+expectedResult);
                if (expectedResult>-1){
                  mySerial.send("at+cmgs=\""+recipient+"\"");
                  startTime=(new Date()).getTime();
                }else{
                  step=step-1;
                }

                break;
              case 5:
                expectedResult=result.indexOf(">");

               // log ("received ok ="+expectedResult);
                if (expectedResult>-1){
                  mySerial.send(message+cntrlZ);
                  startTime=(new Date()).getTime();
                }else{
                  step=step-1;
                }
                delay=VERYLONG;//waitning for message ack

                break;

              case 6:
                expectedResult=result.indexOf("OK");
                //read message number
                if (expectedResult>-1){
                  int n=result.indexOf("CMGS:");
                  result=result.substring(n+5);
                  n=result.indexOf("\n");
                  status=0;
                  messageNo=Long.parseLong(result.substring(0,n).trim() );

                  log ("sent message no:"+messageNo);


                }else{
                  step=step-1;
                }

              break;
            }
            step=step+1;

            aThread.sleep(100);

          }catch (Exception e){
              e.printStackTrace();
          }
        }

        mySerial.closeConnection() ;

        //if timed out set status

        if (timeOut ) {
            status=-2;
            log("*** time out at step "+step+"***");
        }
      }

commandes AT envoient conforme. Et cela fonctionne parfaitement, mais maintenant j'ai lu sms à partir de la boîte de réception. Je fonction écriture semblable à ceci:

public void receiveMessage() throws Exception
      {
          int expectedResult = 0;

          SerialParameters params = defaultParameters;

            mySerial =new SerialConnection (params);

            mySerial.openConnection();

            // step 1
            mySerial.send("atz");
            delay=LONG;

            Thread.sleep(100);
            //aThread.sleep(100);

            String result=  mySerial.getIncommingString() ;

            // step 2
            delay=STANDARD;
            mySerial.send("ath0");
            Thread.sleep(100);

            // step 3
            result=  mySerial.getIncommingString() ;
            expectedResult=result.indexOf("OK");

            //log ("received ok ="+expectedResult);
            if (expectedResult>-1){
              mySerial.send("at+cmgf=1");
              //startTime=(new Date()).getTime();
            }

            // step 4
            result=  mySerial.getIncommingString() ;
            expectedResult=result.indexOf("OK");

            //log ("received ok ="+expectedResult);
            if (expectedResult>-1){
              //mySerial.send("at+cmgl=\"ALL\"");
                mySerial.send("at+cmgr=1");
              //startTime=(new Date()).getTime();
            }

            Thread.sleep(100);
            result=  mySerial.getIncommingString() ;

      }

Dans l'étape 1 Je ATZ commande et je suis OK de réponse puis commande ath0 et OK de réponse et commande à + CMGL = \ « ALL \ » et encore OK de réponse, mais où sont mes messages? Je pensais alors la dernière réponse (getIncommingString) doit contenir des messages lus dans la boîte de réception.

Je sais que sont SMSLib et d'autres bibliothèques. Mais utiliser que les bibliothèques que je dois ajouter beaucoup d'autres bibliothèques (pour l'enregistrement). Je veux avoir une application simple d'envoyer et recevoir des SMS.

Merci

Était-ce utile?

La solution

Si vous lisez des SMS de la carte SIM, vous devez d'abord exécuter AT + CMGL pour connaître les indices de SMS de tout (le SMS-DIFFUSE) stockés. Ensuite, vous devez utiliser AT + CMGR pour lire un SMS spécifique. Travaillez-vous en mode mode ou texte PDU?

Tout comme une note de côté. Pourquoi envoyez-vous des commandes ATZ et ath0? Ce sont des commandes liées à profil et appel.

Pour voir tous les statuts de messages possibles à partir de votre modem:

AT+CGML=?

Une réponse typique serait:

+CMGL: ("REC UNREAD","REC READ","STO UNSENT","STO SENT","ALL")

Donc, pour regarder tous les messages sur votre carte SIM:

AT+CGML="ALL"

Pour voir tous les messages non lus (nouveaux) sur votre carte SIM:

AT+CGML="REC UNREAD"

Il y a une autre option où vous pouvez éviter que les messages SMS stockés sur votre carte SIM. Ceci est contrôlé en utilisant la commande AT + CNMI pour configurer des messages non sollicités pour être activé. Ensuite, chaque fois qu'un SMS est reçu, vous recevrez un message + CMT de manière asynchrone. Si vous voulez en savoir plus sur que l'on vient de me faire savoir.

Il y a quelques avantages qui font usage de l'approche non sollicitée. Le principal étant que vous n'avez pas gérer vos cartes SIM mémoire (pas de risque de se plein). De plus avec de grandes quantités de SMS est votre carte SIM peut effectivement devenir inutilisable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top