Come passare i dati a BroadcastReceiver?

Quello che sto cercando di fare è che i numbers a cui la mia domanda invia messaggi, sono passati al BraodcastReceiver … ma finora o sta diventando nullo o BroadcastReceiver semplicemente crolla.

ecco la mia intenzione per BroadcastReceiver dalla class CreateMessage …

  • Titanio api.info non mostra mai nulla nella console
  • Programmaticamente, come identificare se un faro appartiene a Eddystone o iBeacon?
  • Come possono le applicazioni utilizzare le mappe Google Offline da Android 4+?
  • Come get il formato di image delle immagini dalla Galleria
  • Come posso condividere più file tramite un intento?
  • Quanto male è Android SoundPool? Quale alternativa da utilizzare?
  • Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putString("phN", phoneNo); intent.putExtras(bundle); startActivity(intent); 

    E in BroadcastReceiver (class SmsReceiver) sto cercando di prendere intenzione come questo.

     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(); } 

    Il mio file manifesto:

     <?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> 

    Ho già provato tutte le risposte date Stackoverflow … Ma non uso …

    Per favore, ragazzi dimmi where sto andando male … Grazie!

    Registro errori:

     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 

  • MongoDB + Azure + Android: Errore: com.mongodb.MongoException: non parlare con master e ripetizioni utilizzate
  • Come rilevare il movimento di un dispositivo android?
  • aggiungendo le tabs dynamicmente in android
  • Come passare dal ConstraintLayout predefinito a RelativeLayout in Android Studio 2.3.3
  • Come get UnderlineSpan con un altro colore in Android?
  • Come fa Facebook aggiungere numbers di badge sull'icona app in Android?
  • 5 Solutions collect form web for “Come passare i dati a BroadcastReceiver?”

    Seguendo l'esempio di Jason … ho fatto questo …

    In MainActivity o qualsiasi attività da where si desidera submit l'intento

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

    e poi nella mia class SmsReceiver ho fatto questo

     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"); } } 

    E in manifest.xml ho aggiunto "my.action.string" anche se era un'opzione.

     <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> 

    lavorato come fascino !!

    Il tuo problema è molto semplice. Basta cambiare i codici onRecive ():

     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"); } } 

    Vorresti submit una trasmissione come così:

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

    Il parametro di action è una String correlata all'azione con cui è stato registrato BroadcastReceiver . Quindi, se hai registrato il tuo ricevitore come così:

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

    allora l' action sarebbe "com.myapp.myaction"

    Si inizia un'attività anziché la trasmissione di Intent . Cercate di cambiare

     startActivity(intent); 

    a

     sendBroadcast(intent); 

    UPDATE :

    Non hai impostato alcuna azione e nessun nome di componente Intent . Prova a creare intenti come segue:

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

    utilizzare sendbroadcast invece di startactivity.it functionrà .. !!

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.