《深入理解Android:Telephony原理剖析与最佳实践》一3.4 广播

3.4 广播

广播(Broadcast),看字面意思可以联想到车站、商场等都有广播,对于广播来说,发送方并不需要知道广播接收方的数量及接收到广播如何反应,这些都是接收方的事。那么,在Android 平台中的广播是否与生活中的广播相似呢?答案是肯定的,发送方仅需要将广播内容完成发送,而接收方过滤自己需要的广播信息和内容,然后进行处理,接收方信息是发送方不知道的。

3.4.1 Android 系统中的广播

Android 系统中有非常多的广播,当系统启动或应用运行时便会向 Android 注册各种广播,Android 系统接收到广播后,会判断哪种广播需要哪种事件。广播事件的筛选由Android 系统完成,在接收广播时,程序员仅需要定义广播的过滤器,即接收什么样的广播内容。
从定义来讲,广播主要分发送方和接收方,Android中的广播也是如此。Android中广播的接收方处理逻辑相对复杂一些,首先要注册广播过滤器并继承abstract class BroadcastReceiver实现广播接收的onReceive方法。

3.4.2 Broadcast接收

首先创建自己的Broadcast广播接收类MyRecvBroadcast,可以不依赖Activity,其代码详情如下:

public class MyRecvBroadcast extends BroadcastReceiver {
    //Android工程中的任何类,继承BroadcastReceiver类,并覆盖onReceiver方法
    @Override
    public void onReceive(Context context, Intent intent) {
        StringBuffer str = new StringBuffer("Recive Broadcast action:");
        str.append(intent.getAction());
        str.append(", Message:");
        str.append(intent.getStringExtra("message"));
        System.out.println(str);
    }
}

Android中主要采用两种方式增加广播过滤器。
1)在广播接收方应用的AndroidManifest.xml配置信息文件中增加过滤信息和内容,在application节点中加入如下XML配置信息:

<receiver android:name="com.myandroid.MyRecvBroadcast">
    <intent-filter>
        <action android:name="static_broadcast" />
    </intent-filter>
</receiver>

2)在程序中通过代码增加广播过滤信息和内容,这些代码可以在Application或Activity的onCreate增加广播过滤器的注册,但同时需要注意在对应的生命周期里注销Broadcast的广播过滤器,可参考如下代码内容:

IntentFilter intentfilter = new IntentFilter();//Intent过滤器
intentfilter.addAction("dynamic_broadcast");//过滤器增加Intent过滤内容
MyRecvBroadcast mrb = new MyRecvBroadcast();
registerReceiver(mrb, intentfilter);//向系统注册MyRecvBroadcast广播接收器及Intent过滤器
3.4.3 Broadcast发送

广播发送有三种形式,即sendBroadcast ()、sendOrderedBroadcast()、sendStickyBroadcast()。我们重点看sendBroadcast方式,发送广播的代码如下:

Intent intent = new Intent();             //广播均通过Intent进行发送
intent.setAction("dynamic_broadcast");    //Action类型,接收方可通过Action类型进行过滤
intent.putExtra("message", "send broadcast");//广播数据
sendBroadcast(intent);            //发送广播
intent.setAction("static_broadcast");
intent.putExtra("message", "send broadcast");
sendBroadcast(intent);

Broadcast相比Handler异步消息处理、AIDL跨应用服务访问要简单得多,这是由广播的特性决定的。广播只管发,不管接收方及相关处理,并且在Android中广播的具体实现已经交给了系统来完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值