Android-是否可以在清单文件中声明本地广播接收器?
我已在我的清单中声明我的接收人:Android-是否可以在清单文件中声明本地广播接收器?,android,broadcastreceiver,android-broadcast,android-broadcastreceiver,localbroadcastmanager,Android,Broadcastreceiver,Android Broadcast,Android Broadcastreceiver,Localbroadcastmanager,我已在我的清单中声明我的接收人: <receiver android:name=".MyTestReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.example.ACTION_TEST"/> </intent-filter> </recei
<receiver
android:name=".MyTestReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.ACTION_TEST"/>
</intent-filter>
</receiver>
但当我从我的应用程序中的其他地方执行此代码时:
Intent intent = new Intent("com.example.ACTION_TEST");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
…未接收到本地广播(即未显示祝酒词)
问题:
应用程序子类中声明它,那么它是否具有与清单中声明的接收器相同的“作用域”?(我的意思是,它是否会在所有相同的条件/情况下接收广播,就像它在舱单中声明一样?)
应用程序子类中指定接收者之间存在差异,我是否需要使用常规(非本地)广播而不是本地广播?(在实际应用中,本地广播将在my IntentService完成其工作时发送。IntentService将由FCM推送消息触发。)
LocalBroadcastManager.registerReceiver(BroadcastReceiver,
IntentFilter)
…它没有解决是否可以在清单中指定接收者这一主要问题
是否可以在舱单中注册本地广播接收器
没有
我在我的应用程序子类中声明了它,它是否具有与清单中声明的接收者相同的“作用域”?(我的意思是,它是否会在所有相同的条件/情况下接收广播,就像它在舱单中声明一样?)
不,清单注册接收者用于系统广播,来自任何进程LocalBroadcastManager
是本地的,用于在您自己的进程中进行“广播”
欢迎您在应用程序中向LocalBroadcastManager
注册接收器(例如,在其onCreate()
中),但我怀疑对于您试图解决的任何问题都有更好的解决方案
在实际应用中,本地广播将在my IntentService完成其工作时发送
然后,接收者应该在需要知道正在完成的工作的活动或片段中注册。您的应用程序
不太可能需要知道正在完成的工作,就好像它需要知道一样,您的IntentService
可以调用应用程序
上的一个方法,绕过所有这些广播内容。在我的接收器的onReceive()方法中实际发生的情况是,它只会显示一个通知。因此,它与任何活动都没有关联(在用户打开通知之前,但无论如何,在稍后的时间点之前,不会创建活动)。那么,我的应用程序是否是注册接收器的最佳/唯一位置?@ban geoengineering:“我的接收器的onReceive()方法实际上会发生什么,它只会显示一个通知。”——从IntentService
中执行此操作,并清除所有广播内容。“那么,我的应用程序是注册接收者的最佳/唯一的地方吗?”--最好的做法是完全删除接收者。谢谢,是的,这很有意义。我采用了这种方法,因为本地广播也被其他组件使用(例如,用于更新其UI的活动),所以我一直在寻找另一种方法,在应用程序范围内始终收听相同的本地广播。另外,使用应用程序
子类收听本地广播的另一个想法是允许IntentService
只做它自己的事情(即,只从服务器获取数据),然后让另一个组件做UI工作(即显示通知的应用程序
子类)。“那会是糟糕的设计吗?”班地球工程学:“那会是糟糕的设计吗?”——我认为这是矫枉过正。我不知道为什么你认为应用程序
比IntentService
更适合显示通知
。我只想将我的工作(IntentService
)代码与我的UI代码分开。应用程序
将仅用于注册本地广播接收器(因为我无法在清单中注册它)。本地广播接收器本身可以是一个单独的类,从那里显示通知。来自清单的广播接收器和本地广播用于两个不同的目的。在查看清单声明时,您似乎也在尝试从应用程序外部侦听操作。所以在这里,你不能这样做。可能是重复的
Intent intent = new Intent("com.example.ACTION_TEST");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);