当前位置: 首页 > 知识库问答 >
问题:

显式意图广播接收器-动作过滤器行为

南宫泓
2023-03-14

声明(AndroidMANIFEST.xml)一个广播接收器:

html prettyprint-override"><receiver android:name=".BcastReceiver">
  <intent-filter>
    <action android:name="com.example.app.WAKE_UP" />
  </intent-filter>
</receiver>

让我困惑的是通过adb shell调用意图的结果:

A)匹配动作

am broadcast -n "com.example.app/.BcastReceiver" -a "com.example.app.WAKE_UP"
am broadcast -n "com.example.app/.BcastReceiver" -a "nonsense"
am broadcast -n "com.example.app/.BcastReceiver"
<receiver android:name=".BcastReceiver"/>

共有1个答案

酆翔宇
2023-03-14

我今天找到原因了。它与Android:exported标志有关。正如正式文件所述:

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

如果缺少一个意图过滤器,则不会导出广播接收器,因此无法从应用程序外部调用。如果有意图筛选器,则默认导出广播接收器。它既适用于服务,也适用于广播接收器--还有一个额外的限制,即后台应用程序的后台服务不会启动。

 类似资料:
  • 通知广播接收机: 谁能帮帮我吗?我不知道我做错了什么

  • 我有一个很奇怪的问题。 我正在发送广播并设置一些额外内容,但接收者没有收到: 发送: 并收到: 由于某些原因,downloadID为空。有什么提示吗? 谢谢

  • 根据谷歌提供的AndroidO迁移指南,大部分隐含的广播意图不应该在清单中注册(除了这里发现的一些例外),但显式广播意图保持不变。 我们希望将任何需要的广播从舱单上移开。但我们如何识别接收者是否是隐性的呢?有一般规则吗? 下面是我们在清单中注册的广播示例。我们是否应该只查看“action”标记,并查看它是否被列入白名单以将其保留在清单中? 例如,“com.android.vending.INSTA

  • 问题内容: 有人可以解释和之间的确切区别吗? 在什么情况下我们必须使用每个Receiver类? 问题答案: 和之间只有一个区别。 当您收到内部广播方法时, 假设, BroadcastReceiver : 它 不保证 该 CPU将保持清醒 ,如果你启动一些长时间运行的进程。CPU可能会立即回到睡眠状态。 WakefulBroadcastReceiver : 这是 保证 该 CPU将保持清醒 ,直到你

  • 我目前正在使用SharedReferences跟踪通过AlarmManager启动的BroadcastReceiver中要执行工作的项列表。除了一个特定的场景外,一切都很好。当我触发一个新项目来执行工作时,让它完成工作,然后删除该项目(全部通过SharedReferences编辑),它在应用程序运行时工作得很好。当列表中没有任何内容,我打开任务管理器并终止应用程序时,该项突然出现在Broadcas