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);