Ce que j'essaie de faire, c'est que les numéros auxquels mon application envoie des messages sont transférés au BraodcastReceiver ... mais jusqu'à présent, je suis devenu nul ou BroadcastReceiver se bloque simplement.
voici mon intention pour BroadcastReceiver de la classe CreateMessage ...
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("phN", phoneNo);
intent.putExtras(bundle);
startActivity(intent);
Et dans BroadcastReceiver (classe SmsReceiver), je tente d’attraper une telle intention.
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();
}
Mon fichier manifeste:
<?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>
J'ai déjà essayé toutes les réponses données à Stackoverflow ... Mais pas d'utilisation ...
S'il vous plaît, les gars, dites-moi où je me trompe ... Merci!
Journal des erreurs:
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
En suivant l’exemple de @Jason ... j’ai fait cela ...
Dans MainActivity ou toute activité à partir de laquelle vous souhaitez envoyer une intention
Intent intent = new Intent("my.action.string");
intent.putExtra("extra", phoneNo); \\ phoneNo is the sent Number
sendBroadcast(intent);
puis dans ma classe SmsReceiver, je l'ai fait
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");
}
}
Et dans manifest.xml, j’ai ajouté "my.action.string"
même si c’était une option ..
<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>
travaillé comme un charme !!
Vous commencez une Activity
au lieu de diffuser Intent
. Essayez de changer
startActivity(intent);
à
sendBroadcast(intent);
METTRE &AGRAVE; JOUR:
Vous définissez aucune action et aucun nom de composant sur Intent
. Essayez de créer une intention comme suit:
Intent intent = new Intent(context, YourReceiver.class);
intent.putExtra("phN", phoneNo);
sendBroadcast(intent);
Vous enverriez une émission comme ceci:
Intent intent = new Intent(action);
intent.putExtra("phN", phoneNo);
sendBroadcast(intent);
Le paramètre action
est une String
qui correspond à l'action avec laquelle vous avez enregistré BroadcastReceiver
. Donc, si vous avez enregistré votre récepteur comme suit:
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
registerReceiver( receiver, new IntentFilter( "com.myapp.myaction" ) );
alors action
serait "com.myapp.myaction"
Votre problème est en réalité très simple. Il suffit que le code onReceive () change comme ça:
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");
}
}