Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android: escucha los mensajes SMS entrantes

Estoy tratando de crear una aplicación para el seguimiento de los mensajes SMS entrantes, y lanzar un programa a través de SMS entrantes, también debe leer el contenido del SMS.

Flujo de trabajo:

SMS enviado a Android dispositivo auto ejecutables Aplicación Leer la información de SMS

¡Si alguien me puede ayudar!

  • Cómo acceder a la bandeja de entrada de sms desde javascript en android (phonegap)
  • Cuando envío SMS, a veces código de resultado = 0. ¿Qué significa ese código?
  • Uso del nuevo proveedor de contenido de Telephony para leer SMS
  • Cómo obtener llamadas perdidas y recuento de SMS
  • Eliminación de SMS de Android mediante programación
  • ¿Bloquear SMS entrantes en Android con Android 4.4 o superior?
  • Android: Propuesta de mensaje
  • SMS raw pdu en Android
  • 4 Solutions collect form web for “Android: escucha los mensajes SMS entrantes”

    public class SmsListener extends BroadcastReceiver{ private SharedPreferences preferences; @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ Bundle bundle = intent.getExtras(); //---get the SMS message passed in--- SmsMessage[] msgs = null; String msg_from; if (bundle != null){ //---retrieve the SMS message received--- try{ Object[] pdus = (Object[]) bundle.get("pdus"); msgs = new SmsMessage[pdus.length]; for(int i=0; i<msgs.length; i++){ msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); msg_from = msgs[i].getOriginatingAddress(); String msgBody = msgs[i].getMessageBody(); } }catch(Exception e){ // Log.d("Exception caught",e.getMessage()); } } } } } 

    Nota: En su archivo de manifiesto, agregue el BroadcastReceiver-

     <receiver android:name=".listener.SmsListener"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> 

    Agregue este permiso:

     <uses-permission android:name="android.permission.RECEIVE_SMS" /> 

    Tenga en cuenta que en algunos dispositivos su código no funcionará sin android: priority = "1000" en el filtro de intenciones:

     <receiver android:name=".listener.SmsListener"> <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> 

    Y aquí hay algunas optimizaciones:

     public class SmsListener extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { if (Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(intent.getAction())) { for (SmsMessage smsMessage : Telephony.Sms.Intents.getMessagesFromIntent(intent)) { String messageBody = smsMessage.getMessageBody(); } } } } 

    Nota :
    El valor debe ser un entero, como "100". Los números más altos tienen una prioridad más alta. El valor predeterminado es 0. El valor debe ser mayor que -1000 y menor que 1000.

    Aquí hay un enlace.

    @Mike M. y yo encontramos un problema con la respuesta aceptada (ver nuestros comentarios):

    Básicamente, no tiene sentido pasar por el bucle for si no estamos concatenando el mensaje multipart cada vez:

     for(int i=0; i<msgs.length; i++){ msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); msg_from = msgs[i].getOriginatingAddress(); String msgBody = msgs[i].getMessageBody(); } 

    Observe que simplemente establecemos msgBody al valor de la cadena de la parte respectiva del mensaje sin importar el índice en el que se encuentre, lo que hace que el punto completo de realizar un bucle a través de las diferentes partes del mensaje SMS sea inútil, ya que sólo se establecerá en el Muy último valor de índice. En su lugar, deberíamos usar += , o como Mike anotó, StringBuilder :

    En general, aquí es lo que mi SMS recibiendo código se ve como:

     if (myBundle != null) { Object[] pdus = (Object[]) myBundle.get("pdus"); // pdus is key for SMS in bundle //Object [] pdus now contains array of bytes messages = new SmsMessage[pdus.length]; for (int i = 0; i < messages.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); //Returns one message, in array because multipart message due to sms max char Message += messages[i].getMessageBody(); // Using +=, because need to add multipart from before also } contactNumber = messages[0].getOriginatingAddress(); //This could also be inside the loop, but there is no need } 

    Sólo poniendo esta respuesta allí en caso de que alguien más tiene la misma confusión.

    ¡Esto es lo que usé!

     public class SMSListener extends BroadcastReceiver { // Get the object of SmsManager final SmsManager sms = SmsManager.getDefault(); String mobile,body; public void onReceive(Context context, Intent intent) { // Retrieves a map of extended data from the intent. final Bundle bundle = intent.getExtras(); try { if (bundle != null) { final Object[] pdusObj = (Object[]) bundle.get("pdus"); for (int i = 0; i < pdusObj.length; i++) { SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]); String phoneNumber = currentMessage.getDisplayOriginatingAddress(); String senderNum = phoneNumber; String message = currentMessage.getDisplayMessageBody(); mobile=senderNum.replaceAll("\\s",""); body=message.replaceAll("\\s","+"); Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + body); // Show Alert int duration = Toast.LENGTH_LONG; Toast toast = Toast.makeText(context, "senderNum: "+ mobile+ ", message: " + message, duration); toast.show(); } // end for loop } // bundle is null } catch (Exception e) { Log.e("SmsReceiver", "Exception smsReceiver" +e); } } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.