Pregunta

He encontrado proyecto de código libre para enviar sms usando Java comm: http://code.google.com/ p / find-ur-PAL / fuente / Navegar / src /? r = 21

envío de SMS se ve como esto Función:

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

comandos AT están enviando acuerdo con las especificaciones. Y funciona perfectamente, pero ahora He leído sms desde la bandeja de entrada. Tengo función similar escritura como esto:

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

      }

En el paso 1 envío de comandos ATZ y me dieron respuesta OK entonces ath0 de comando y respuesta OK y luego comando en CMGL + = \ "all \" y otra vez respuesta OK, pero ¿dónde están mis mensajes? Estaba pensando que la última respuesta (getIncommingString) debe contener mensajes leídos de la bandeja de entrada.

Yo sé que son SMSLib y otras bibliotecas. Sin embargo, para utilizar las bibliotecas que tengo que añadir una gran cantidad de otras bibliotecas (para el registro). Quiero tener sencilla aplicación para enviar y recibir SMS.

Gracias

¿Fue útil?

Solución

Si está leyendo SMS de la tarjeta SIM a continuación, debe ejecutar primero AT + CMGL para averiguar los índices de cualquiera de SMS (SMS-ofRECE) almacenado. Luego hay que utilizar AT + CMGR a leer un tipo SMS. ¿Estás trabajando en modo texto o el modo PDU?

Así como una nota al margen. ¿Por qué estás enviando comandos ATZ y ATH0? Estos son el perfil y los comandos relacionados con la llamada.

Para ver todos los estados de mensajes permitidos de su módem:

AT+CGML=?

Una respuesta típica sería:

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

Así que mirar a todos los mensajes en la tarjeta SIM:

AT+CGML="ALL"

Para ver todos los (nuevos) los mensajes no leídos en la tarjeta SIM:

AT+CGML="REC UNREAD"

Hay otra opción donde se puede evitar que los mensajes SMS almacenados en la tarjeta SIM. Esto se controla mediante el comando AT + CNMI para configurar mensajes no solicitados esté habilitado. Entonces cada vez que se recibe un SMS con lo que recibirá un mensaje + CMT de forma asíncrona. Si desea saber más acerca de eso, házmelo saber.

Hay algunas ventajas que hacen uso de la aproximación no solicitada. La principal es que usted no tiene que manejar su memoria tarjetas SIM (sin riesgo de que se está llenando). También con grandes cantidades de SMS de la tarjeta SIM en realidad puede llegar a ser inutilizable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top