Recibir SMS en la aplicación para Android

He seguido un tutorial para recibir SMS en mi aplicación y leerlo para pasar el SMSbody a Toast. Que es la clase Destinatario.

public class SmsReciever extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent){ Bundle bundle= intent.getExtras(); SmsMessage[] msgs= null; String str=""; if(bundle != null ){ 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]); str+= msgs[i].getMessageBody(); } Toast.makeText(context, str, Toast.LENGTH_LONG).show(); } } } 

El archivo de manifiesto

  <receiver android:name="com.msoft.masrooq.SmsReciever"> <intent-filter> <action android:name="android.provider.telephony.SMS_RECIEVED"></action> </intent-filter> </receiver> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-permission android:name="android.permission.READ_SMS" /> 

La aplicación comienza bien, pero no responde a la recepción de sms no hace nada.

Esta es mi implementación de recibir mensajes SMS. Mensaje SMS puede ser dividido en muchos, observe cómo se trata. También compruebe el atributo android:priority .

 public class SmsReceiver extends BroadcastReceiver { private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(SMS_RECEIVED)) { Bundle bundle = intent.getExtras(); if (bundle != null) { // get sms objects Object[] pdus = (Object[]) bundle.get("pdus"); if (pdus.length == 0) { return; } // large message might be broken into many SmsMessage[] messages = new SmsMessage[pdus.length]; StringBuilder sb = new StringBuilder(); for (int i = 0; i < pdus.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); sb.append(messages[i].getMessageBody()); } String sender = messages[0].getOriginatingAddress(); String message = sb.toString(); Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); // prevent any other broadcast receivers from receiving broadcast // abortBroadcast(); } } } } 

AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.smsreceiver" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="4" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".SmsLoggerActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.example.smsreceiver.SmsReceiver" android:enabled="true"> <intent-filter android:priority="2147483647"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> </application> </manifest> 

Pocas notas: Si usted declara su receptor en xml que el sistema puede utilizar su receptor sin importar si su aplicación fue lanzada alguna vez. Dado que las notificaciones de Android 1.6 sobre mensajes SMS recibidos se envían como emisiones ordenadas, puede utilizar el atributo android:priority de <intent-filter> para indicar al sistema que envíe los sms primero a su aplicación (también puede llamar a abortBroadcast () 'T recibir el sms, por ejemplo, la app sms nativos). No olvide que el receptor de difusión tiene unos 10 segundos para ejecutar su operación, de lo contrario puede terminar prematuramente antes de terminar su trabajo.

Las emisiones distinguen entre mayúsculas y minúsculas. Utilice "android.provider Telefonía .SMS_RECEIVED" no "android.provider. Telefonía .SMS_RECEIVED"

Además, también tengo un conjunto de categorías, pero no estoy seguro de que sea obligatorio:

 <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 
  • Android enviar SMS que es visible en el hilo de SMS (sin GUI)
  • SMS no se puede prevenir usando abortBroadcast ()?
  • Selecciona los primeros SMS en la bandeja de entrada de la base de datos de Android
  • Interceptar mensaje SMS entrante y modificarlo
  • ¿Cómo funciona "deliveryIntent" en el marco de Android SMS?
  • Receptor de radiodifusión sigue funcionando después de cerrar la aplicación - Android
  • Escribir sms enviados al contenido: // sms / tabla enviada
  • Android: escucha los mensajes SMS entrantes
  • Android - Consultando el ContentProvider de SMS?
  • Caracteres especiales en sms de Android
  • ¿Abre la aplicación de Android enviando un mensaje de texto?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.