¿Cómo pasar datos a BroadcastReceiver?

Lo que estoy tratando de hacer es que los números a los que mi aplicación envía mensajes, se pasan a la BraodcastReceiver … pero hasta ahora o estoy recibiendo null o BroadcastReceiver simplemente se bloquea ..

Aquí está mi intención para BroadcastReceiver de la clase CreateMessage …

Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putString("phN", phoneNo); intent.putExtras(bundle); startActivity(intent); 

Y en BroadcastReceiver (clase SmsReceiver) estoy tratando de capturar la intención como esta ..

 public void onReceive(Context context, Intent intent) { //---get the SMS message passed in--- Bundle bundle = intent.getExtras(); try{ //receiveNumbers = intent.getExtras().get("phN").toString(); String receiveNumbers = intent.getStringExtra("phN"); Toast.makeText(context, receiveNumbers, Toast.LENGTH_LONG).show(); }catch(Exception e){ e.printStackTrace(); } 

Mi Manifiesto Archivo:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.AEM_n" android:versionCode="2" android:versionName="2.0"> <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.READ_SMS"/> <uses-permission android:name="android.permission.SEND_SMS"/> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> <activity android:name=".new_menu" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:label="@string/app_name" android:name=".SetEvent" > <intent-filter> <action android:name="com.AEM_n.SETEVENT" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:label="@string/app_name" android:name=".AddParticipants" /> <activity android:label="@string/app_name" android:name=".CreateMessage" /> <activity android:label="@string/app_name" android:name=".DataBaseClass" /> <activity android:label="@string/app_name" android:name=".IntentReceiver"/> <activity android:label="@string/app_name" android:name=".SmsReceiver" /> <receiver android:name=".SmsReceiver" android:exported="true"> <intent-filter android:priority="999"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> </application> </manifest> 

Ya he probado todas las respuestas dadas Stackoverflow … Pero no uso …

Por favor, los chicos me dicen que me voy mal … Gracias!

Registro de errores:

 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): FATAL EXCEPTION: main 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): java.lang.RuntimeException: Error receiving broadcast Intent { act=com.myapp.myaction (has extras) } in com.AEM_n.SmsReceiver@405a07c8 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:722) 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): at android.os.Handler.handleCallback(Handler.java:587) 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): at android.os.Handler.dispatchMessage(Handler.java:92) 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): at android.os.Looper.loop(Looper.java:123) 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): at android.app.ActivityThread.main(ActivityThread.java:3701) 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): at java.lang.reflect.Method.invokeNative(Native Method) 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): at java.lang.reflect.Method.invoke(Method.java:507) 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862) 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): at dalvik.system.NativeStart.main(Native Method) 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): Caused by: java.lang.NullPointerException 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): at com.AEM_n.SmsReceiver.onReceive(SmsReceiver.java:37) 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:709) 04-07 02:34:02.770: ERROR/AndroidRuntime(25593): ... 9 more 

Siguiendo el ejemplo de @Jason … hice esto …

En MainActivity o cualquier actividad desde la que desee enviar intenciones desde

 Intent intent = new Intent("my.action.string"); intent.putExtra("extra", phoneNo); \\ phoneNo is the sent Number sendBroadcast(intent); 

Y luego en mi SmsReceiver Clase He hecho esto

 public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Log.i("Receiver", "Broadcast received: " + action); if(action.equals("my.action.string")){ String state = intent.getExtras().getString("extra"); } } 

Y en manifest.xml "my.action.string" aunque era una opción.

 <receiver android:name=".SmsReceiver" android:enabled="true"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> <action android:name="my.action.string" /> <!-- and some more actions if you want --> </intent-filter> </receiver> 

Trabajó como encanto!

Su problema es muy simple. Es suficiente que el cambio onRecive () códigos como él:

 public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Log.i("Receiver", "Broadcast received: " + action); if(action.equals("my.action.string")){ String state = bundle.getString("phN"); } } 

Usted enviaría una emisión así:

 Intent intent = new Intent(action); intent.putExtra("phN", phoneNo); sendBroadcast(intent); 

El parámetro action es una String que se correlaciona con la acción con la que registró BroadcastReceiver . Así que si usted registró su receptor así:

 MyBroadcastReceiver receiver = new MyBroadcastReceiver(); registerReceiver( receiver, new IntentFilter( "com.myapp.myaction" ) ); 

Entonces la action sería "com.myapp.myaction"

Iniciando una Activity lugar de Intent de difusión. Trata de cambiar

 startActivity(intent); 

a

 sendBroadcast(intent); 

ACTUALIZACIÓN :

No establece ninguna acción ni nombre de componente en el Intent . Intente crear la intención de la siguiente manera:

 Intent intent = new Intent(context, YourReceiver.class); intent.putExtra("phN", phoneNo); sendBroadcast(intent); 

Use sendbroadcast en lugar de startactivity.it funcionará .. !!

  • Diferenciar los informes de entrega de dos SMS separados
  • Android: ¿Cómo enviar unicode sms programatically y recibirlo en el otro lado correctamente?
  • Cómo obtener todos los mensajes de ThreadID en android
  • Escucha SMS salientes o caja enviada en Android
  • ¿Cómo rastrear los mensajes en Android?
  • El envío de SMS mediante Intent no incluye destinatarios en algunos dispositivos
  • Recuperación de mensajes SMS desde Inbox
  • Uso de SMS para verificar el número de teléfono de un dispositivo
  • ¿Bloquear SMS entrantes en Android con Android 4.4 o superior?
  • ContentObserver en el contenido: // sms / in 1.6+?
  • Content: // mms-sms / conversations / return NullPointerException en Android ICS Samsung
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.