私がやろうとしているのは、アプリケーションがメッセージを送信する先の番号がBraodcastReceiverに渡されるということです...
これがCreateMessageクラスのBroadcastReceiverの私の意図です...
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("phN", phoneNo);
intent.putExtras(bundle);
startActivity(intent);
そしてBroadcastReceiver(SmsReceiverクラス)では、このような意図をキャッチしようとしています。
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();
}
マニフェストファイル:
<?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>
Stackoverflowを与えられたすべての答えをすでに試しました...しかし、無駄です...
私が間違っているところを教えてください...ありがとう!
エラーログ:
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
@Jasonの例に従って...私はこれをしました...
MainActivityまたはインテントの送信元のアクティビティ
Intent intent = new Intent("my.action.string");
intent.putExtra("extra", phoneNo); \\ phoneNo is the sent Number
sendBroadcast(intent);
そして、私のSmsReceiverクラスでこれを行いました
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");
}
}
そしてmanifest.xmlに"my.action.string"
を追加しましたが、それはオプションでした。
<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>
魅力的に働いた!!
Activity
をブロードキャストする代わりに、Intent
を開始します。変えよう
startActivity(intent);
に
sendBroadcast(intent);
[〜#〜]更新[〜#〜]:
Intent
にアクションとコンポーネント名を設定していません。次のようにインテントを作成してみてください。
Intent intent = new Intent(context, YourReceiver.class);
intent.putExtra("phN", phoneNo);
sendBroadcast(intent);
次のようにブロードキャストを送信します。
Intent intent = new Intent(action);
intent.putExtra("phN", phoneNo);
sendBroadcast(intent);
action
パラメータは、String
を登録したアクションに関連するBroadcastReceiver
です。したがって、次のようにレシーバーを登録した場合:
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
registerReceiver( receiver, new IntentFilter( "com.myapp.myaction" ) );
action
は"com.myapp.myaction"
あなたの問題は実際には非常に簡単です。それと同じようにonReceive()コードを変更するだけで十分です:
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");
}
}