私は私のマニフェストで私の受信機を宣言している:Android - マニフェストファイルにローカルブロードキャスト受信機を宣言できますか?
public class MyTestReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if ("com.example.ACTION_TEST".equals(action)) {
Toast.makeText(context, "Test!", Toast.LENGTH_SHORT).show();
}
}
}
しかし、私は私のアプリ内の他の場所からこのコードを実行します:
<receiver
android:name=".MyTestReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.ACTION_TEST"/>
</intent-filter>
</receiver>
そして、ここでは私のMyTestReceiverクラスです
Intent intent = new Intent("com.example.ACTION_TEST");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
...ローカル放送は受信されませんd(すなわち、トーストは示されていない)。
質問:
- それはマニフェスト内のローカル放送受信機を登録することは可能ですか?
- もしそうなら、地元の放送受信機を間違って宣言したことがありますか?
- ローカルブロードキャストレシーバをマニフェストで宣言できず、代わりに
Application
サブクラスで宣言すると、マニフェストで宣言された受信者と同じ 'スコープ'を持ちますか? (つまり、マニフェストで宣言されているのと同じ条件/状況でブロードキャストを受信しますか?) - マニフェストで受信者を指定するときに、
Application
サブクラスと異なる場合は、ローカルブロードキャストではなく、一般的な(非ローカル)ブロードキャストを使用する必要がありますか? (私のIntentServiceが作業を完了すると、実際のアプリでは、ローカル放送が送信されますIntentServiceは、FCMのプッシュメッセージによってトリガーされます。)
NB - 私はthe documentationにこのことについて見つけるように見えることができますすべてであります:
注:ではなく
LocalBroadcastManager.registerReceiver(BroadcastReceiver, IntentFilter)
を呼び出して、ローカル放送のために登録します。
...マニフェストで受信者を指定できるかどうかの主な問題には対処しません。
マニフェストおよびローカルブロードキャストからのBroadcastReceiverは、2つの異なる目的のために使用されています。あなたのマニフェスト宣言を調べているうちに、アプリケーション外からのアクションも聴こうとしているようです。だから、ここでそれをすることはできません。 –