APP开发实战157-Ordered broadcast(有序广播)简介

来源:互联网 发布:平面设计需要什么软件 编辑:程序博客网 时间:2024/05/22 12:06

18.3.3有序广播(Orderedbroadcast)

有序广播的有序广播中的“有序”是针对广播接收者而言的,指的是发送出去的广播被BroadcastReceiver按照先后循序接收。有序广播的定义过程与普通广播无异,发送函数为:sendOrderedBroadcast。

有序广播的主要特点如下:

A多个当前已经注册且有效的BroadcastReceiver接收有序广播时,是按照AndroidManifest.xml文件中定义receiver时,intent-filter的 android:priority属性值从大到小排序,如果没有定义priority的数值,则按在AndroidManifest.xml文件中声明的顺序接收广播。

<receiverandroid:name=".EamBroadcastReceiver">
    <intent-filterandroid:priority="1000">
        <actionandroid:name="com.eam.read"/>
        <actionandroid:name="com.eam.write" />
    </intent-filter>
</receiver>

 

B当广播接收器收到广播后,广播会自动传递到下一个接收器,当前的接收器也可以使用setResultData函数添加数据传给下一个接收器;使用getStringExtra
函数获取广播的原始数据,通过getResultData函数取得上个广播接收器自己添加的数据,并可用abortBroadcast函数让系统丢弃该广播,使该广播不再被别的接收器接收到。
示例代码如下:
//AndroidManifest.xm文件中添加广播接收器声明

<receiverandroid:name="com.ruwant.eam.broadcast.EamOrderBroadcastReceiver">
    <intent-filter>
        <actionandroid:name="com.eam.read"/>
        <actionandroid:name="com.eam.write" />
    </intent-filter>
</receiver>

<receiver android:name="com.ruwant.eam.broadcast.EamSecondOrderBroadcastReceiver">
    <intent-filter>
        <actionandroid:name="com.eam.read"/>
        <actionandroid:name="com.eam.write" />
    </intent-filter>
</receiver>

 
//发送广播

public voidsendOrderBroadCast() {

        Intent intent = new Intent();
       intent.setAction("com.eam.read");
       intent.putExtra("data","test");
        sendOrderedBroadcast(intent,null);

}

//第一个广播接收器

public classEamOrderBroadcastReceiver extends BroadcastReceiver {
    private static final String TAG ="EamOrderBroadcastReceiver";
    @Override
    public void onReceive(Contextcontext, Intent intent) {
        // TODO Auto-generated methodstub
        String strMsg = intent.getStringExtra("data");//获取广播的原始数据
        setResultData("添加数据:"+strMsg); // 广播接收器自己添加的数据
    }
}

//第二个广播接收器

public classEamSecondOrderBroadcastReceiver extends BroadcastReceiver {
    private static final String TAG ="EamSecondOrderBroadcastReceiver";
    @Override
    public void onReceive(Contextcontext, Intent intent) {
        // TODO Auto-generated methodstub
        String strMsg =intent.getStringExtra("data"); //获取广播的原始数据
        strMsg = getResultData();//获取上个广播接收器添加的数据
        //通知系统丢弃该广播
        abortBroadcast();
   }
}

0 0