finalize a function in Android Studio

0

I have a problem with a function. In fact what I do is read the SMS inbox and when you enter a new text message it is executed. The problem comes from the second time I call the same function because it is not updated but it reads the same message and from there it is delaying a sms.

I have two files. the SmsReceiver that listens to the SMS inbox.

public class SmsReceiver extends BroadcastReceiver {
private static  SmsListener mListener;

Boolean b;
String abcd,xyz;



@Override
public void onReceive(Context context,Intent intent) {
    Bundle data  = intent.getExtras();
    Object[] pdus =  (Object[]) data.get("pdus");
    System.out.println("************************************************");
    System.out.println("ESTO TRAE EL MESSENGERAddress DE SMS RECEIVER "+ pdus.length);
    for(int i= 0;i<pdus.length;i++){
        SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
        String sender = smsMessage.getDisplayOriginatingAddress();
         b=sender.endsWith("WNRCRP");

        String messageBody = smsMessage.getMessageBody();
        String messageAddress = smsMessage.getOriginatingAddress();  // TRAE EL NUMERO DEL REMITENTE SMS
       // String messageBody = smsMessage.getDisplayMessageBody();
        System.out.println("ESTO TRAE EL MESSENGERAddress DE SMS RECEIVER "+ messageAddress);
        System.out.println("ESTO TRAE EL MESSENGERBOCY DE SMS RECEIVER "+ messageBody);

        mListener.messageReceived(messageAddress); //LE ENVIO A MessengeReceive QUE ESTA EN MAINACTIVITY EL NUMERO EL REMITENTE

    }
}
public static void bindListener(SmsListener listener) {
    mListener = listener;

}

public interface SmsListener{
    public void messageReceived(String messageText);
}

}

and then the MainActivity

in the onCreate calls the function when it receives the call of a new SMS

SmsReceiver.bindListener(new SmsReceiver.SmsListener() {

        @Override
        public void messageReceived(String messageText) {
            if (messageText.trim().equals(getString(R.string.numeroemisorGPS).trim())) { //COMPARO SI EL NUMERO DEL CUAL ME ENVIAN EL SMS ES IGUAL AL NUMERO DEL GPSESPERADO
                System.out.println("******* INGRESO A BUSCAR UBICACION ACTUALIZACION *******");
                //buscarUbicacionActualizacion(); //EN CASO DE QUE EL EMISOR SEA EL QUE ESPERO MANDO A LEER EL MENSAJE Y ACTUALIZAR EL MAPA

               buscarUbicacionNueva();


            }
        }
    });

and this is the function itself.

 private void buscarUbicacionNueva() {   //SE USA AL COMENZAR LA APLICACION PARA VER CUAL FUE LA ULTIMA UBICACIÓN EN SMS
    Integer cantmensaje = 1;
    Integer mensajesErroneos  = 0;
    Cursor cursor = getContentResolver().query(Uri.parse(INBOX),null,null,null,null);
    cursor.moveToFirst();
    if (cursor.isFirst()) {

        while ( cantmensaje == 1) {
            //int inicio, fin = 0;
            System.out.println("CANTIDADD DE VUELTAS --> " + mensajesErroneos);
            int iniciolatitud, finlatitud, iniciolongitud, finlongitud, finlongitudS = 0;
            String longitud = "";
            String latitud = "";
            String cuerpo = "";

            cuerpo = cursor.getString(cursor.getColumnIndexOrThrow("body")); //TOMA EL CUERPO DE LOS SMS
            String emisor = cursor.getString(cursor.getColumnIndexOrThrow("address")); //TOMA EL NUMERO EMISOR DEL MENSAJE

            char[] caracteres = cuerpo.toCharArray();
            System.out.println("INGRESÒ A BUSCAR UBICACIÓN -->  ");
            System.out.println("posicion de SMS -->  " + emisor);

            System.out.println("ESTE ES EL MENSAJE  -->  "+cuerpo);
            if (emisor.equals(getString(R.string.numeroemisorGPS)) ) {    // consulto que el numero de emisor que quiero se encuentre en la bandeja de entrada y tomo la partes del mensaje que me interesan.
                iniciolatitud = cuerpo.indexOf("lat:") + 4;
                finlatitud = cuerpo.indexOf("long");
                iniciolongitud = cuerpo.indexOf("long") + 5;
                finlongitud = cuerpo.indexOf(",T:");
                finlongitudS = cuerpo.indexOf("speed");
                System.out.println("posicion de inicio LATITUD -->  " + iniciolatitud);
                System.out.println("Posicion final LATITUD --> " + finlatitud);
                System.out.println("posicion de inicio LONGITUD -->  " + iniciolongitud);
                System.out.println("Posicion final LONGITUD --> " + finlongitud);
                System.out.println("Posicion final LONGITUDS --> " + finlongitudS);
                Log.e("ya viene","Esto trae el CUERPO DEL MENSAJE   " + cuerpo);


                if (finlongitudS > finlongitud) {

                    latitud = cuerpo.substring(iniciolatitud,finlatitud);
                    longitud = cuerpo.substring(iniciolongitud,finlongitudS);
                } else if ((finlongitudS < finlongitud)) {
                    latitud = cuerpo.substring(iniciolatitud,finlatitud);
                    longitud = cuerpo.substring(iniciolongitud,finlongitud);
                }

                if (iniciolatitud > 4) {
                    final WebView webView = (WebView) findViewById(R.id.webView);
                    webView.getSettings().setJavaScriptEnabled(true);
                    webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
                    webView.setWebViewClient(new WebViewClient());
                    // webView.loadUrl(""+latitud);
                    webView.loadUrl("http://maps.google.com/maps?f=q&q=" + latitud.trim() + "," + longitud.trim() + "&z=17");

                    //webView.setWebViewClient(new WebViewClient() {
                    //    @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                    //    webView.loadUrl("file:///android_asset/erroryaviene.html");
                    //          } });
                    Log.e("ya viene","http://maps.google.com/maps?f=q&q=" + latitud.trim() + "," + longitud.trim() + "&z=16");
                    //   Log.e("ya viene",""+latitud);
                    Log.e("PERMISOS","ingresa al mapa");
                    cantmensaje = cantmensaje + 1;
               return;
                }
                mensajesErroneos = mensajesErroneos +1;
                //System.out.println("CANTIDADD DE VUELTAS --> " + mensajesErroneos);
                cursor.moveToNext();
            }
            else {//No hay SMS
                if (mensajesErroneos > 50) { //BUSCA ENTRE LOS ULTIMOS 50 SMS PARA VER SI HUBO UN PEDIDO DE GEOLOCALIZACIÓN
                    break;
                }
                Log.e("PERMISOS","no ingreso a view ");
                mensajesErroneos = mensajesErroneos +1;

                cursor.moveToNext();

            }

        }

    }
}
    
asked by Luis 21.11.2018 в 14:06
source

1 answer

1

You must validate that the message has been received

@Override
public void messageReceived(String messageText) {
    if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            Object[] pdus = (Object[])bundle.get("pdus");
            for (int i = 0; i < pdus.length; i++) {
                SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
                String sender = smsMessage.getDisplayOriginatingAddress();
                b=sender.endsWith("WNRCRP");

                String messageBody = smsMessage.getMessageBody();
                String messageAddress = smsMessage.getOriginatingAddress(); // TRAE EL NUMERO DEL REMITENTE SMS
                // String messageBody = smsMessage.getDisplayMessageBody();
                System.out.println("ESTO TRAE EL MESSENGERAddress DE SMS RECEIVER "+ messageAddress);
                System.out.println("ESTO TRAE EL MESSENGERBOCY DE SMS RECEIVER "+ messageBody);

                mListener.messageReceived(messageAddress); //LE ENVIO A MessengeReceive QUE ESTA EN MAINACTIVITY EL NUMERO EL REMITENTE
            }
        }
    }
}
    
answered by 21.11.2018 в 14:36