学习Android开发5:Broadcast Receiver

Broadcast Receiver翻译成中文是“广播接收者”,它本质上是一种全局的监听器,用于监听系统全局的广播消息。它可以接收来自系统和应用的的广播。

BroadcastReceiver用于接收程序(包括系统程序和一般应用)通过sendBroadcast()方法发出的消息。这些消息有时被称为 event 或 intent。例如,某个应用程序在下载完文件之后广播一个消息,通知其他应用程序使用-这个应用收到这个消息然后执行恰当的操作。系统广播的消息有 ACTION_BOOT_COMPLETED(系统启动完成)、BATTERY_LOW(电量低)、CALL(来电话)等等。

使用 BroadcastReceiver 需要两个基本步骤:

  1. 创建 Broadcast Receiver
  2. 注册 Broadcast Receiver

如果你要实现自定义的 intent,你还需要创建广播这些 intent。

创建Broadcast Receiver

继承BroadcastReceiver类并 Override onReceive()方法,参数Intent做为接收每个消息的对象。

注册Broadcast Receiver

应用程序在 AndroidManifest.xml 文件中注册要接收的消息。例如,我要为 MyReceiver 注册系统消息BOOT_COMPLETED-在系统启动完成时广播的消息。

现在,当你的Android系统启动时,MyReceiver会接收到这个消息并执行 onReceive() 方法中的代码。

在Intent类中定义了很多系统消息(类型final static),重要的系统消息如下:

学习Android开发5:Broadcast Receiver

  • android.intent.action.BOOT_COMPLETED:它只在系统启动完成后广播一次
  • android.intent.action.BATTERY_CHANGED:广播电池状态
  • android.intent.action.BATTERY_LOW:电量低
  • android.intent.action.BATTERY_OKAY:电池从低电量中恢复
  • android.intent.action.CALL_BUTTON
  • android.intent.action.DATE_CHANGED
  • android.intent.action.REBOOT
  • android.intent.action.BUG_REPORT
  • 查看文档获得更多信息

广播自定义消息

如果你要发送自定义的消息,你需要在activity中调用 sendBroadcast()方法。你也可以使用sendStickyBroacat()方法,这个intent是“粘性广播”。

这两个方法的区别:通过sendBroadcast中发出的intent在ReceverActivity不处于onResume状态是无法接受到的,即使后面再次使其处于该状态也无法接受到。而sendStickyBroadcast发出的Intent当ReceverActivity重新处于onResume状态之后就能重新接受到其Intent。这就是the Intent will be held to be re-broadcast to future receivers这句话的意思。就是说sendStickyBroadcast发出的最后一个Intent会被保留,下次当Recevier处于活跃的时候,又会接受到它。在wifi中就是发送的粘性广播。

发送广播消息:

在AndroidManifest.xml注册的方法同上。

例子

下面的例子以自定义消息为例。

创建一个新项目:Hello World

MainActivity.java

创建MyReceiver.java文件:

AndroidManifest.xml 文件:

修改布局文件activity_main.xml:

运行:

学习Android开发5:Broadcast Receiver

点击按钮:

学习Android开发5:Broadcast Receiver

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注