我已在清单:
中声明了我的接收器<receiver
android:name=".MyTestReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.ACTION_TEST"/>
</intent-filter>
</receiver>
这是我的 MyTestReceiver 类:
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();
}
}
}
但是当我从我的app中的其他地方执行此代码时:
Intent intent = new Intent("com.example.ACTION_TEST");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
...未收到本地广播(即未显示吐司)。
问题:
Application
子类中声明它,它是否具有相同的范围&#39;作为清单中声明的接收者? (我的意思是,它会在与清单中宣布的情况相同的条件/情况下接收广播吗?)Application
子类中指定接收者之间存在差异,我是否需要使用普通(非本地)广播而不是本地广播? (在实际应用中,当我的IntentService完成其工作时,将发送本地广播.InntService将由FCM推送消息触发。)注意 - 我在the documentation似乎能找到的所有内容是:
注意:要注册本地广播,请致电 而是
LocalBroadcastManager.registerReceiver(BroadcastReceiver, IntentFilter)
。
...它没有解决您是否可以在清单中指定接收方的主要问题。
答案 0 :(得分:3)
是否可以在清单中注册本地广播接收器?
没有
我在我的Application子类中声明它,它是否与清单中声明的接收器具有相同的“范围”? (我的意思是,它会在与清单中宣布的情况相同的条件/情况下接收广播吗?)
嗯,不。清单注册的接收器用于源自任何进程的系统广播。 LocalBroadcastManager
是本地的,用于您自己流程中的“广播”。
欢迎您在LocalBroadcastManager
注册一个Application
的接收者(例如,在其onCreate()
中),但我怀疑对于您尝试的任何问题都有更好的解决方案解决。
在实际应用中,当我的IntentService完成其工作时,将发送本地广播
然后接收者应该在需要了解正在完成的工作的活动或片段中注册。您的Application
不太可能需要知道正在完成的工作,就像它已经完成一样,您的IntentService
可以在Application
上调用方法并绕过所有这些广播内容。