【问题标题】:Android BroadcastReceiver with no intent-filter没有意图过滤器的 Android BroadcastReceiver
【发布时间】:2012-02-22 00:38:27
【问题描述】:

我在 AndroidManifest.xml 中遇到过这样的事情:

<receiver android:name="com.testco.test.TestReceiver"/>

以上是TestReceiver扩展了BroadcastReceiver类。我认为接收器会收到所有意图,但显然它没有,除非我在其中添加意图过滤器标签,否则它不起作用。那么如果它没有意图过滤器,它会做什么呢?是错字还是真的有什么作用?

更新:我在此链接 Trying to have a Broadcast Receiver with No filter 的帮助下解决了这个问题

您可以为意图设置一个操作字符串,然后广播它,而不是使用通常的字符串标识符调用广播。示例代码供参考:

Intent notifyIntent = new Intent(getApplicationContext(), TestReceiver.class);
notifyIntent.setAction("RECEIVE");
sendBroadcast(notifyIntent);

BroadcastReceiver 处的处理是一样的。

【问题讨论】:

  • 编写该代码的人,告诉他们他们的操作风格不符合标准。它应该遵循 com.packagename.intent.messagehere ,这是放置的标准,因此应该遵循。

标签: android


【解决方案1】:

在隐式意图的情况下需要意图过滤器,如果未指定意图过滤器,则必须显式调用它。所以要调用这个接收器,你需要调用:

Intent intent = new Intent(getApplicationContext(), com.testco.test.TestReceiver.class);
sendBroadcast(intent);`

【讨论】:

  • 嘿,亚历克斯,有一段时间了。我有一个关于你的回答的快速问题。当您说隐式时,这是否意味着可能需要采取多种不同的行动?
  • 隐式Intents是我们没有明确指定目标组件的意图,目标组件由系统通过意图过滤器决定。
【解决方案2】:

来自documentation

android:exported:广播接收器是否可以接收 来自其应用程序外部来源的消息 - 如果可以,则为“true”,并且 如果不是,则为“假”。如果为“false”,则广播接收器的唯一消息 可以接收的是由同一应用程序的组件发送的那些,或者 具有相同用户 ID 的应用程序。

默认值取决于广播接收器是否包含意图过滤器。没有任何过滤器意味着它只能由指定其确切类名的 Intent 对象调用。这意味着接收器仅用于应用程序内部使用(因为其他人通常不知道类名)。所以在这种情况下,默认值为“false”。另一方面,至少存在一个过滤器意味着广播接收器旨在接收系统或其他应用程序广播的意图,因此默认值为“true”。

因此接收器只会捕获您的应用程序广播的 Intents。

【讨论】:

    【解决方案3】:

    &lt;receiver android:name="com.testco.test.TestReceiver"/&gt; 标签会告诉 android os 我是接收者,就是这样。它不会说它打算听什么事件。您的意图过滤器将定义您正在监听的事件。例如,

    <receiver android:name="com.testco.test.TestReceiver"/>
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    

    这段代码告诉 android 操作系统,我是接收者,我正在列出启动事件。所以当用户重启手机时,会调用这个广播接收器。

    【讨论】:

      【解决方案4】:

      您需要注册您的接收器,指定您想要接收的意图,如果您想要接收所有意图,请提及它。

      API 中明确提到了 Intent 和 Intent Filter 的功能。公共 API 不支持所有意图概念。

      注意:您仍然可以通过在您的应用中发送广播来在您的应用中使用这种类型的接收器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-21
        • 2012-03-26
        • 1970-01-01
        相关资源
        最近更新 更多