Domanda

Ho trovato progetto libero fonte per inviare sms utilizzando Java comm: http://code.google.com/ p / find-ur-pal / source / browse / src /? r = 21

la funzione di invio SMS aspetto simile a questo:

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

comandi AT sono l'invio secondo le norme. E funziona perfettamente, ma ora ho letto sms da Posta in arrivo. Ho funzione simile scrittura in questo modo:

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

      }

Nel passaggio 1 mando ATZ di comando e ho ottenuto risposta OK, allora il comando ath0 e risposta OK e poi il comando a + CMGL = \ "ALL \" e ancora una volta la risposta OK, ma dove sono i miei messaggi? Stavo pensando poi l'ultima risposta (getIncommingString) dovrebbe contenere i messaggi letti dalla posta in arrivo.

Lo so che sono SMSLib e altre librerie. Ma per utilizzare che le biblioteche devo aggiunto un sacco di altre librerie (per la registrazione). Voglio avere semplice applicazione per inviare e ricevere sms.

Grazie

È stato utile?

Soluzione

Se stai leggendo SMS di dalla SIM, allora è necessario prima eseguire AT + CMGL per scoprire gli indici di qualsiasi di SMS (SMS-Trasporta) memorizzati. Allora avete bisogno di utilizzare AT + CMGR di leggere uno specifico SMS. Stai lavorando in modalità modalità o Testo PDU?

Proprio come una nota a margine. Perché si sta inviando comandi ATZ e ath0? Si tratta di profilo e comandi correlati alla chiamata.

Per vedere tutti gli stati dei messaggi consentite dal vostro modem:

AT+CGML=?

Una risposta tipica potrebbe essere:

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

Quindi, per guardare tutti i messaggi sulla carta SIM:

AT+CGML="ALL"

Per vedere tutti i (nuovi) messaggi non letti nella scheda SIM:

AT+CGML="REC UNREAD"

C'è un'altra opzione in cui è possibile evitare che i messaggi SMS di essere memorizzati sulla carta SIM. Questo è controllato utilizzando il comando AT + CNMI per configurare messaggi non richiesti da abilitare. Poi ogni volta che si riceve uno SMS quindi si riceverà un messaggio + CMT in modo asincrono. Se vuoi sapere di più su quello fammelo sapere.

Ci sono alcuni benefici che si avvalgono del metodo non richiesti. Il principale dei quali non si dispone di gestire la memoria schede SIM (nessun rischio di esso ottenere pieno). Anche con grandi quantità di SMS della carta SIM può effettivamente diventare inutilizzabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top