放送受信機を動かそうとしています。できるだけシンプルにする必要があります。マニフェストは次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.mytest.intentRec" Android:versionCode="1"
Android:versionName="1.0">
<application Android:icon="@drawable/icon" Android:label="@string/app_name"
Android:debuggable="true">
<activity Android:name=".mainAct" Android:label="@string/app_name">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver Android:name="com.mytest.intentRec.MyIntentRec"
Android:enabled="true" >
</receiver>
</application>
<uses-sdk Android:minSdkVersion="7" />
</manifest>
ご覧のとおり、メインアクティビティmainActがあります。これは、開始後にブロードキャストを送信するだけです。
public class mainAct extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.sendBroadcast(new Intent());
}
}
myIntentRecクラスがあります。これは可能な限り単純です。
public class MyIntentRec extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.v("IntentRec", "got it");
}
}
私が期待しているのは、アプリを起動すると、ブロードキャストが送信されてピックアップされ、ログエントリが書き込まれることです。そのログエントリが表示されず、エラーも表示されません。マニフェストまたはブロードキャストの送信にエラーがあるのではないかと疑っています。そこで空のインテントを作成しましたが、特定のプロパティを持つインテントである必要がありますか?
あなたの意図のためにsetClass
してください、
例:
public class mainAct extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent i=new Intent("any string");
i.setClass(this, MyIntentRec.class);
this.sendBroadcast(i);
}
}
これは、「フィルターがないということは、正確なクラス名を指定するIntentオブジェクトによってのみ呼び出すことができることを意味します」という意味です。
[古い答え]
マニフェストに必要なアクションの種類を登録する必要があります。
例:
<receiver Android:name="com.mytest.intentRec.MyIntentRec" Android:enabled="true" >
<intent-filter>
<action Android:name="your.intent" />
</intent-filter>
</receiver>
それを送る、
this.sendBroadcast(new Intent("your.intent"));
BroadcastReceiverのマニフェストでインテントフィルターを定義していません。カスタムアクションタイプに1つ指定します。また、起動時にブロードキャストしたインテントでこのカスタムアクションタイプを定義する必要があります。
受信者がマニフェストでキャッチする必要のあるアクションを指定してみてください。あなたはそのようにこれを行うことができます:
<receiver Android:name="com.mytest.intentRec.MyIntentRec">
<intent-filter>
<action Android:name="Android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>