到顶部
Android API
公众的摘要

广播接收器

延伸对象
java.lang.Object(java.lang.对象)
   ↳ android内容。广播接收器
已知的直接子类

课程概述

将接收sendBroadcast()发送的意图的代码的基类。

如果不需要跨应用程序发送广播,请考虑使用这个班有本地广播相反下面描述的更通用的设施。这会给你很多更高效的实施(无需跨进程通信)并允许避免考虑与其他应用程序相关的任何安全问题能够接收或发送您的广播。

您可以使用动态注册此类的实例上下文.registerReceiver()或通过<接收器>在您的Android清单.xml.

注:如果在您的Activity.onResume()实现,您应该在中注销它Activity.onPause().(暂停时您不会收到意图,这将减少不必要的系统开销)。不要在中注销Activity.onSaveInstanceState()因为如果用户在历史记录中向后移动,则不会调用此函数堆栈。

可以接收的广播有两大类:

  • 正常广播(与一起发送上下文.发送广播)完全异步。所有接收器广播通常同时以未定义的顺序运行。这是效率更高,但意味着接收者无法使用结果或中止此处包含API。
  • 有序广播(与一起发送上下文.sendOrdered广播)一次发送给一个接收者。当每个接收器依次执行时,它可以将结果传播到下一个接收器,否则它可以完全中止广播,使其无法通过发送给其他接收者。可以使用android:优先级匹配意向滤波器的属性;接收机相同的优先级将以任意顺序运行。

即使在正常广播的情况下,系统也可能情况恢复为每次发送一个接收器的广播。特别是,对于可能需要创建进程的接收者,只有一次运行一个,以避免新进程使系统过载。然而,在这种情况下,无序语义仍然有效:这些接收者仍然无法返回结果或中止其广播。

注意,尽管Intent类用于发送和接收这些广播,这里的Intent广播机制是完全独立的从用于启动活动的意图上下文.startActivity().广播接收器是不可能的查看或捕获与startActivity()一起使用的Intent;同样,当如果您广播了一个Intent,您将永远无法找到或启动一个Activity。这两个操作在语义上非常不同:启动带有Intent的Activity是一个前台操作,用于修改用户当前正在与进行交互;广播意图是背景用户通常不知道的操作。

BroadcastReceiver类(作为组件启动时,通过舱单<接收器>标记)是应用程序的整个生命周期.

此处涵盖的主题:

  1. 安全
  2. 接收器生命周期
  3. 整个生命周期

开发人员指南

有关如何使用此类接收和解析意图的信息,请阅读意图和意图过滤器开发人员指南。

安全

与一起使用的接收器上下文API本质上是跨应用程序工具,因此您必须考虑其他应用程序如何可能会滥用它们。需要考虑的事项包括:

  • Intent命名空间是全局的。确保Intent操作名称和其他字符串是在您自己的命名空间中编写的,否则您可能会不小心与其他应用程序冲突。

  • 当您使用寄存器接收器(BroadcastReceiver,IntentFilter)任何应用程序可以向该注册接收器发送广播。你可以控制谁可以通过下面描述的权限向其发送广播。

  • 当您在应用程序的清单中发布接收方并指定意图过滤,任何其他应用程序都可以向其发送广播指定的筛选器。为了防止他人发送给它他们无法使用android:导出=“false”.

  • 当您使用发送广播(意图)或相关方法,通常,任何其他应用程序都可以接收这些广播。你可以控制谁可以通过下面描述的权限接收此类广播。或者,从开始ICE_CREAM_SANDWICH公司,你还可以使用Intent.set包

使用时不存在这些问题本地广播,因为意图广播永远不会超出当前进程。

访问权限可以由发送方或接收方强制执行广播节目。

要在发送时强制执行权限,请提供一个非null许可的参数sendBroadcast(意向,字符串)sendOrderedBroadcast(意向、字符串、BroadcastReceiver、android.os.Handler、int、字符串、捆绑).仅限已被授予此权限的接收者(通过请求<使用权限>标签Android清单.xml)将能够接收广播。

若要在接收时强制执行权限,请提供非null许可在注册您的接收器时--或者在呼叫时registerReceiver(BroadcastReceivers、IntentFilter、String、android.os.Handler)或在静态<接收器>在您的Android清单.xml。只有拥有被授予此权限(通过使用<使用权限>标签Android清单.xml)将能够发送向接收人说明意图。

请参阅安全和权限有关权限和一般安全性的更多信息,请参阅文档。

接收器生命周期

BroadcastReceiver对象仅在调用期间有效onReceive(上下文、意图)。一旦代码从此函数返回,系统认为对象已完成且不再活动。

这对您在onReceive(上下文、意图)实现:任何需要异步的东西操作不可用,因为您需要从函数来处理异步操作,但此时BroadcastReceiver不再处于活动状态,因此系统可以自由终止异步操作完成之前的进程。

特别是,您可以显示对话框或绑定到来自的服务在BroadcastReceiver中。对于前者,您应该使用通知管理器应用程序编程接口。对于后者,您可以使用上下文.startService()向服务发送命令。

整个生命周期

当前正在执行BroadcastReceiver的进程(即,当前正在其onReceive(上下文、意图)方法)是被视为前台进程,并将由系统,但在极端内存压力的情况下除外。

从onReceive()返回后,BroadcastReceiver不再活动,并且其托管过程仅与任何其他应用程序一样重要组件。这一点尤其重要,因为如果该进程仅托管BroadcastReceiver(这是一种常见的情况用户从未或最近没有交互过的应用程序),然后从onReceive()返回时,系统将考虑其进程清空并积极杀掉它,以便为其他人提供资源更重要的过程。

这意味着对于长时间运行的操作,您将经常使用服务与广播接收器共同保持包含进程在整个操作期间处于活动状态。

总结

内部类
广播接收器。未决结果 广播接收器挂起的结果的状态。 
公共建筑商
广播接收器()
公共方法
最终的空隙 中止广播()
设置标志,指示此接收器应中止当前广播;仅适用于通过发送的广播上下文发送有序广播.
最终的空隙 清除中止广播()
清除指示此接收器应中止电流的标志广播。
最终的布尔值 获取中止广播()
返回指示此接收器是否应中止当前广播。
最终的布尔值 获取调试注销()
返回给的最后一个值setDebugUnregister(布尔值).
最终的整数 获取结果代码()
检索前一个接收器设置的当前结果代码。
最终的字符串 获取结果数据()
检索前一个接收器设置的当前结果数据。
最终的捆绑 获取结果附加项(布尔makeMap)
检索前一个接收器设置的当前结果额外数据。
最终的广播接收器。未决结果 goAsync(异步)()
这可以由中的应用程序调用onReceive(上下文、意图)允许它在从该功能返回之后保持广播活动。
最终的布尔值 是初始粘滞广播()
如果接收器当前正在处理初始值,则返回true粘性广播的值,即最后一个值广播并当前保存在粘性缓存中,因此这是不是现在广播的直接结果。
最终的布尔值 isOrdered广播()
如果接收方当前正在处理订单,则返回true广播。
摘要空隙 onReceive(接收时)(上下文上下文,意图意图)
当BroadcastReceiver接收到Intent时调用此方法广播。
I指示器 peekService(预览服务)(上下文我的上下文,意图服务)
为已经运行的服务提供活页夹。
最终的空隙 设置调试注销(布尔调试)
控制包含不匹配的调试帮助呼叫上下文.registerReceiver().
最终的空隙 setOrderedHint(设置顺序提示)(布尔isOrdered)
对于内部使用,设置此BroadcastReceiver是否以有序模式运行。
最终的空隙 setResult(设置结果)(int代码,字符串数据,捆绑额外费用)
更改此广播返回的所有结果数据;只有作品通过发送广播上下文发送有序广播.
最终的空隙 设置结果代码(int代码)
更改此广播的当前结果代码;仅适用于通过发送的广播上下文发送有序广播.
最终的空隙 设置结果数据(字符串数据)
更改此广播的当前结果数据;仅适用于通过发送的广播上下文发送有序广播.
最终的空隙 setResultExtras(设置结果附加项)(捆绑额外费用)
更改此广播的当前结果附加项;仅适用于通过发送的广播上下文发送有序广播.
[展开]
继承的方法
来自班级java.lang.Object(java.lang.对象)

公共建筑商

公众的 广播接收器 ()

公共方法

公众最终的空隙 中止广播 ()

设置指示此接收器应中止当前广播;仅适用于通过发送的广播上下文发送有序广播。这将防止阻止任何其他广播接收机接收广播。它仍然会呼叫onReceive(上下文、意图)呼叫方的Broadcast Receiver上下文发送有序广播传入。

此方法不适用于这样的无序广播与发送的内容相同上下文.发送广播

公众最终的空隙 清除中止广播 ()

清除指示此接收器应中止电流的标志广播。

公众最终的布尔值 获取中止广播 ()

返回指示此接收器是否应中止当前广播。

退换商品
  • 如果应中止广播,则为True。

公众最终的布尔值 获取调试注销 ()

返回给的最后一个值setDebugUnregister(布尔值).

公众最终的整数 获取结果代码 ()

检索前一个接收器设置的当前结果代码。

退换商品
  • int当前结果代码。

公众最终的字符串 获取结果数据 ()

检索由先前接收器设置的当前结果数据。这通常为空。

退换商品
  • 字符串当前结果数据;可能为null。

公众最终的捆绑 获取结果附加项 (布尔makeMap)

检索前一个接收器设置的当前结果额外数据。您对返回的Map所做的任何更改都将传播到下一个接收器。

参数
makeMap(制作地图) 如果为true,则将为您创建一个新的空地图,如果当前Map为空;如果是假的,你应该做好准备接收空映射。
退换商品
  • 地图当前附加地图。

公众最终的广播接收器。未决结果 goAsync(异步) ()

这可以由中的应用程序调用onReceive(上下文、意图)允许从该功能返回后保持广播活动。这是真的改变相对的期望响应广播(在10秒内完成),但允许将相关工作转移到另一个线程的实现以避免主UI线程因磁盘IO而出现故障。

退换商品

公众最终的布尔值 是初始粘滞广播 ()

已在中添加API级别5

如果接收器当前正在处理初始值,则返回true粘性广播的值,即最后一个值广播并当前保存在粘性缓存中,因此这是不是现在广播的直接结果。

公众最终的布尔值 isOrdered广播 ()

已在中添加API级别5

如果接收方当前正在处理订单,则返回true广播。

公众摘要空隙 onReceive(接收时) (上下文上下文,意图意图)

当BroadcastReceiver正在接收Intent时调用此方法广播。在此期间,您可以使用其他方法BroadcastReceiver查看/修改当前结果值。这个方法始终在其进程的主线程内调用,除非您显式要求在不同的线程上使用registerReceiver(BroadcastReceiver、IntentFilter、String、android.os.Handler).当它在主管道上运行时你应该穿线永远不要在其中执行长时间运行的操作(超时为在考虑接收器被阻止,候选人被杀)。无法启动弹出对话框在onReceive()的实现中。

如果此BroadcastReceiver是通过<receiver>标记启动的,则该对象从此返回后不再活动功能。这意味着您不应该执行任何异步返回结果,特别是用于交互对于服务,您应该使用startService(意向)而不是bindService(Intent,ServiceConnection,int).如果你愿意要与已经运行的服务交互,可以使用peekService(上下文、意图).

中使用的Intent筛选器寄存器接收器(BroadcastReceiver,IntentFilter)在应用程序清单中保证是独家的。他们向操作系统提示如何找到合适的收件人。它是发件人可以绕过筛选器强制传递给特定收件人分辨率。因此,onReceive()实现应该只响应已知的操作,忽略任何意外的操作他们可能收到的意图。

参数
上下文 接收器运行的上下文。
意图 收到意向书。

公众的I指示器 peekService(预览服务) (上下文我的上下文,意图服务)

已在中添加API级别3

为已经运行的服务提供活页夹。此方法是同步的如果目标服务不存在,则不会启动该服务,因此它是安全的从呼叫onReceive(上下文、意图).

参数
我的上下文 传递给的上下文onReceive(上下文、意图)
服务 指示您希望使用的服务的意向。请参阅startService(意向)了解更多信息。

公众最终的空隙 setDebugUnregister(设置调试注销) (布尔调试)

控制包含不匹配的调试帮助呼叫上下文.registerReceiver().如果使用true调用,则在将其传递给registerReceiver()之前下面的调用堆栈上下文.unregisterReceiver()保留呼叫,稍后打印进行了错误的未注册呼叫。请注意,这样做需要保持应用程序生命周期内有关BroadcastReceiver的信息,导致泄漏——这只应用于调试。

公众最终的空隙 setOrderedHint(设置顺序提示) (布尔isOrdered)

对于内部使用,设置此BroadcastReceiver是否以有序模式运行。

公众最终的空隙 setResult(设置结果) (int代码,字符串数据,捆绑额外费用)

更改此广播返回的所有结果数据;只有作品通过发送广播上下文发送有序广播.替换所有当前结果数据根据此方法的给定值。

此方法不适用于这样的无序广播与发送的内容相同上下文.发送广播

参数
代码 新的结果代码。经常使用活动结果取消(_C)结果_确定常量,尽管该值的实际含义最终取决于广播公司。
数据 新的结果数据。这是武断的由广播公司负责解释的字符串;可能为null。
额外费用 新的额外数据映射。这是一个捆绑包持有任意数据,其解释取决于广播公司。可以设置为null。这完全是替换当前地图(如果有)。

公众最终的空隙 设置结果代码 (int代码)

更改此广播的当前结果代码;仅适用于通过发送的广播上下文发送有序广播。经常使用活动结果_取消结果_确定常量,尽管该值的实际含义最终取决于广播公司。

此方法不适用于这样的无序广播与发送的内容相同上下文.发送广播

参数
代码 新的结果代码。

公众最终的空隙 设置结果数据 (字符串数据)

更改本次广播的当前结果数据;仅适用于通过发送的广播上下文发送有序广播。这是一种武断由广播公司负责解释的字符串。

此方法不适用于这样的无序广播与发送的内容相同上下文.发送广播

参数
数据 新结果数据;可能为null。

公众最终的空隙 设置结果附加项 (捆绑额外费用)

更改此广播的当前结果附加项;仅适用于通过发送的广播上下文发送有序广播。这是一个捆绑包持有任意数据,其解释取决于广播公司。可以设置为null。完全调用此方法替换当前地图(如果有)。

此方法不适用于这样的无序广播与发送上下文.发送广播

参数
额外费用 新的额外数据地图;可能为null。