Android开发实践 BroadcastReceiver

Posted 一叶知秋V

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发实践 BroadcastReceiver相关的知识,希望对你有一定的参考价值。

BroadcastReceiver用于监听系统全局的广播消息,接受程序所发出的Broadcast Intent。

1.Broadcast和BroadcastReceiver

Broadcast被分为两种:Normal Broadcast(普通广播);Ordered Broadcast(有序广播);
Context提供了对应的方法发送广播这两种广播:
sendBroadcast():发送Normal Broadcast
sendOrderedBroadcast():发送Ordered Broadcast(对于Ordered Broadcast,系统会根据接受者声明的优先级别按顺序逐个执行接受者,优先接受到的Broadcast可以终止Broadcast,调用BroadcastReceiver的abortBroadcast()方法即可终止Broadcast)。

程序启动BroadcastReceiver需要两步:
第1步:创建需要启动的BroadcastReceiver的Intent
第2步:调用Context的sendBroadcast()或者sendOrderedBroadcast()方法来启动指定的BroadcastReceiver

注意:OnXxxListener只是程序级的监听器,BroadcastReceiver只是一个系统级的监听器且拥有自己的进程。

2.发送Broadcast、并使用BroadcastReceiver接受广播

下面简单实现了如何发送Broadcast、使用BroadcastReceiver接受广播:

(1)在Activity中创建一个Intent,并使用该Intent对象对外发送一条广播

// 创建Intent对象
Intent intent = new Intent();
// 设置Intent的Action属性
intent.setAction("com.gc.action.CRAZY_BROADCAST");
intent.putExtra("msg", "Test Message");
// 发送广播
sendBroadcast(intent);

(2)该程序使用到的BroadcastReceiver代码如下:

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("接受到的Intent的Action:" + intent.getAction());
        System.out.println("消息内容是:" + intent.getStringExtra("msg")");
    }
}

(3)配置上面的BroadcastReceiver应该监听的Action字符串的Intent
有两种方式进行配置:
第一种:在代码中配置:

IntentFilter filter = new IntentFilter("com.gc.action.CRAZY_BROADCAST");
MyReceiver receiver = new MyReceiver();
registerReceiver(receiver, filter);

第二种:在androidManifest.xml文件中配置

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="com.gc.action.CRAZY_BROADCAST" />
    </intent-filter>        
</receiver>

3.接受系统广播消息

下面是常见Action常量,更多的请参考官方文档中关于Intent的说明(docs/reference/android/content/Intent.html)。

Action常量 对应字符串 简单说明
ACTION_TIME_CHANGED android.intent.action.TIME_SET 系统时间被改变
ACTION_DATE_CHANGED android.intent.action.DATE_CHANGED 系统日期被改变
ACTION_BOOT_COMPLETED android.intent.action.BOOT_COMPLETED 系统启动完成
ACTION_SHUTDOWN android.intent.action.ACTION_SHUTDOWN 系统被关闭
ACTION_BATTERY_LOW android.intent.action.BATTERY_LOW 电池电量低
ACTION_POWER_CONNECTED android.intent.action.ACTION_POWER_CONNECTED 系统连接电源
ACTION_POWER_DISCONNECTED android.intent.action.ACTION_POWER_DISCONNECTED 系统与电源断开

以上是关于Android开发实践 BroadcastReceiver的主要内容,如果未能解决你的问题,请参考以下文章

Android开发:Translucent System Bar 的最佳实践

Android开发实践 BroadcastReceiver

Android开发实践 Service

Android开发实践 数据存储

Android开发实践 Intent

Android开发最新实践(译文)