Frage

Ich fand Projekt frei source sms mit Java comm senden: http://code.google.com/ p / find-ur-pal / Quelle / browse / src /? r = 21

Funktion Senden von SMS sieht wie folgt aus:

  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+"***");
        }
      }

AT-Befehle senden, gemäß den Spezifikationen. Und es funktioniert perfekt, aber jetzt habe ich sms aus dem Posteingang lesen. Ich habe Schreib ähnliche Funktion wie folgt aus:

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() ;

      }

In Schritt 1 I ATZ-Befehl senden, und ich bekam Antwort OK dann Befehl ath0 und Antwort OK und Befehl dann bei + CMGL = \ „ALLE \“ und wieder Antwort OK, aber wo sind meine Nachrichten? Ich dachte dann die letzte Antwort (getIncommingString) sollte enthalten Nachrichten aus Posteingang lesen.

Ich weiß, dass SMSLib und andere Bibliotheken sind. Aber dass die Bibliotheken verwenden ich hinzugefügt eine Menge anderer Bibliotheken (für Logging). Ich mag einfache Anwendung hat SMS zu senden und empfangen.

Danke

War es hilfreich?

Lösung

Wenn Sie SMS die von der SIM-Karte lesen, dann müssen Sie zuerst AT + CMGL ausführen, um die Indizes der ANY (SMS-LIEFERT) der SMS, um herauszufinden, gespeichert. Dann brauchen Sie AT + CMGR verwenden, um eine bestimmte SMS zu lesen. Sind Sie arbeiten im PDU-Modus oder Textmodus?

So wie eine Randnotiz. Warum senden Sie ATZ und ATH0 Befehle? Dies sind Profil und anrufbezogene Befehle.

alle Nachrichtenstatus von Ihrem Modem erlaubt sehen:

AT+CGML=?

Eine typische Antwort wäre:

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

So bei allen Meldungen auf dem SIM-Karte aussehen:

AT+CGML="ALL"

Um zu sehen, alle ungelesenen (neu) Nachrichten auf der SIM-Karte:

AT+CGML="REC UNREAD"

Es gibt eine andere Möglichkeit, wo Sie SMS verhindern können Nachrichten auf der SIM-Karte gespeichert werden. Dies wird gesteuert, indem die AT + CNMI Befehl unerwünschte Nachrichten zu konfigurieren, aktiviert werden. Dann, wenn eine SMS empfangen wird, dann werden Sie eine + CMT Nachricht asynchron empfangen. Wenn Sie mehr über das man wissen wollen, lassen Sie es mich wissen.

Es gibt ein paar Vorteile Verwendung des unverlangten Ansatzes zu machen. Die wichtigste davon ist, Sie nicht über Ihre SIM-Karten-Speicher verwalten müssen (keine Gefahr der es immer voll ist). Auch mit großen Mengen von SMS ist Ihre SIM-Karte kann tatsächlich unbrauchbar werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top