SMS Broadcast Receiver no funciona después de reiniciar

Estoy tratando de obtener el número de teléfono y el nombre de la agenda de un mensaje de texto. Cuando lo ejecuto de la aplicación, y la aplicación de cierre, funciona, pero, cuando reinicio mi móvil, no funciona. ¿Nadie?

public class IncomingSMSReceiver extends BroadcastReceiver { private static final String queryString = "@zovi"; private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; public void onReceive(Context _context, Intent _intent) { if (_intent.getAction().equals(SMS_RECEIVED)) { Intent intent = new Intent(_context, IncomingSMSService.class); _context.startService(intent); Bundle bundle = _intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < pdus.length; i++) messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); for (SmsMessage message : messages) { String msg = message.getMessageBody(); Log.i("Poruka", msg); String to = message.getOriginatingAddress(); String contactName = TelefonUtils.getContact(_context, to); Log.i("Od", contactName + "\n" + to); } } } } } 

Mi XML:

 <receiver android:name=".telefon.receivers.IncomingSMSReceiver" android:permission="android.permission.BROADCAST_SMS"> <intent-filter android:priority="500"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> 

En tu AndroidManifest.xml intenta agregar <action android:name="android.intent.action.BOOT_COMPLETED" /> en la etiqueta del receptor IncomingSMSReceiver .

Para iniciar Services o BroadcastReceiver automáticamente después de reiniciar o iniciar el sistema Android, puede registrar un BroadcastReceiver en el evento android.intent.action.BOOT_COMPLETED sistema Android.

Pruebe este código.

 <receiver android:name=".telefon.receivers.IncomingSMSReceiver" android:permission="android.permission.BROADCAST_SMS"> <intent-filter android:priority="500"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> 

Si ha intentado android.intent.action.BOOT_COMPLETED entonces no funcionará en su caso porque se le olvidó agregar intención BOOT_COMPLETED en su
IncomingSMSReceiver y funcionará sólo en caso de android.provider.Telephony.SMS_RECEIVED debido a si la condición que ha utilizado en IncomingSMSReceiver . así que cambia si la condición de

 if (_intent.getAction().equals(SMS_RECEIVED)) { 

a

 if (_intent.getAction().equals(SMS_RECEIVED) || _intent.getAction().equals(BOOT_COMPLETED)) { 

y también definir private static final String BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED"; en IncomingSMSReceiver . A continuación se muestra el código completo de IncomingSMSReceiver .

Cambie su código IncomingSMSReceiver a esto:

 public class IncomingSMSReceiver extends BroadcastReceiver { private static final String queryString = "@zovi"; private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; private static final String BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED"; public void onReceive(Context _context, Intent _intent) { if (_intent.getAction().equals(SMS_RECEIVED) || _intent.getAction().equals(BOOT_COMPLETED)) { Intent intent = new Intent(_context, IncomingSMSService.class); _context.startService(intent); Bundle bundle = _intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < pdus.length; i++) messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); for (SmsMessage message : messages) { String msg = message.getMessageBody(); Log.i("Poruka", msg); String to = message.getOriginatingAddress(); String contactName = TelefonUtils.getContact(_context, to); Log.i("Od", contactName + "\n" + to); } } } } } 

Así que cuando el teléfono se reinicie, recibirá android.intent.action.BOOT_COMPLETED y llamará a su receptor IncomingSMSReceiver para que inicie su IncomingSMSService .

Espero que te ayude.

Asegúrese de que el receptor se inicia después de reiniciar el teléfono.

Añadir <action android:name="android.intent.action.BOOT_COMPLETED" /> en intent-filter

Utilicé esto en mi proyecto, encontrar esto desde Android SMS Receive Listener

 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import java.util.ArrayList; /** * @@author Chathura Wijesinghe <[email protected]> * * <receiver android:name=".SMSReceiver" > <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> */ public class SMSReceiver extends BroadcastReceiver { private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; private static ArrayList<SMSReceivedListner> smsListner = new ArrayList<SMSReceivedListner>(); @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); final Bundle extras = intent.getExtras(); if (action.equals(SMSReceiver.SMS_RECEIVED)) { final boolean smsValid = extras != null; if (smsValid) { //Create SMSMessages from PDUs in the Bundle final Object[] pdus = (Object[])extras.get("pdus"); final SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < pdus.length; i++) messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]); //Assemble final ArrayList<Long> vibrations = new ArrayList<Long>(); for (SmsMessage message : messages) { for (SMSReceivedListner smsReceivedListner : smsListner ) smsReceivedListner.message(message); } } } } public static void addSMSListner(SMSReceivedListner listner){ smsListner.add(listner); } public static void removeSMSListner(SMSReceivedListner listner){ smsListner.remove(listner); } public interface SMSReceivedListner{ public void message(SmsMessage message); } } 

Usted tiene que quitar el androide: permission = "android.permission.BROADCAST_SMS" de la declaración del receptor. No se requiere BOOT_COMPLETED u otro permiso.

explícitamente exported a true en su manifiesto como un elemento para el Receiver

  android:exported="true" 

y asegúrese de que tanto el elemento de aplicación como el elemento receptor están habilitados

 android:enabled="true" 

El código de difusión parece estar bien y Asegúrese de que está utilizando otras aplicaciones de SMS en su dispositivo (Puede que esta transmisión de SMS pueda interrumpir la transmisión de sus aplicaciones). Si no está utilizando ninguna otra aplicación de SMS, entonces debería funcionar de lo contrario desinstalar esa aplicación de SMS y probar una vez.

y también comprueba que hayas añadido los siguientes permisos en tu AndroidManifest.xml

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

Espero que esto funcione.

Lo ideal sería que hubiera trabajado. Es extraño que no funciona.

Eliminar android: permission = "android.permission.BROADCAST_SMS" del receptor de difusión. No es necesario.

Intente aumentar la prioridad android:priority="2147483647" al máximo. Puede ser que otra aplicación esté consumiendo el evento o pruebe la siguiente solución.

Agregue <action android:name="android.intent.action.BOOT_COMPLETED" /> en su filtro de intenciones y ver si funciona.

Algo como esto:

 <receiver android:name=".telefon.receivers.IncomingSMSReceiver" android:permission="android.permission.BROADCAST_SMS"> <intent-filter android:priority="500"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> 

y agregar permiso:

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission> 
  • Transmitir datos de la clase BroadcastReceiver a una actividad de Android
  • Enviar SMS a través de ADB al teléfono
  • SMS reciben sin notificación
  • Establecer sms como leídos en Android
  • Envío y recepción de SMS y MMS en Android (pre Kit Kat Android 4.4)
  • ¿Cuál es la longitud máxima de sms concatenados en smpp?
  • Cómo guardar SMS en la bandeja de entrada en android?
  • Obtener mensajes SMS desde la tarjeta SIM
  • Android: recibe SMS largos (multipart)
  • Iniciar una intención de mensaje SMS ya no funciona para el nuevo sistema operativo RAZR ICS de Droid
  • Android: obtenga la hora de la fecha de la marca de tiempo de SMS en milisegundos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.