关闭

android BroadcastReceiver详解2 无序广播和有序广播

标签: androidbroadcastreceiver
450人阅读 评论(0) 收藏 举报
分类:

无序广播

无序广播不可以被拦截,如果被拦截的话会报错:

所有接收无序广播的广播接收者在此广播被发送时均能接收到此广播
无序广播使用sendBroadcast方法来发送
下面我们来写一个例子
1 我们新建一个广播UnlessReceiver接收器

public class UnlessReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //接受发送的数据
        Object object =intent.getExtras().get("data");
        //String resultData = getResultData();
        String string = object.toString();
        System.out.println(string);
        Toast.makeText(context, "我收到了一个无序广播"+string, 1).show();

    }

}

2 注册广播
其中action是你自定义的一个名称

  <receiver android:name="UnlessReceiver" >
            <intent-filter>
                <action android:name="com.itheima.broadcast" >
                </action>
            </intent-filter>
        </receiver>

3 在activity中发送广播
intent.putExtra(“data”, “我是无序广播”);
在第1 步中接受广播数据
//发送的数据带有KEY
Object object =intent.getExtras().get(“data”);

public void senBroadcast(View v) {
        // 定义一个intent
        Intent intent = new Intent();
        // 设置Action
        intent.setAction("com.itheima.broadcast");
        // 绑定数据
        intent.putExtra("data", "我是无序广播");
        // 发送无序广播
        sendBroadcast(intent);
    }

有序广播

有序广播可以被拦截,且优先级高的接收者可以拦截优先级低的
广播接收者的优先级的取值范围是: 1000(最高) ~ -1000(最低)
相同优先级下,接收的顺序要看在清单文件中声明的顺序,先声明的接收者比后声明的要先收到广播
有序广播使用sendOrderedBroadcast方法来发送,使用abortBroadcast方法拦截
广播接收者的优先级在清单文件中声明接收者时,在标签下通过设置”android:property”属性来设置。

学会了无序广播,有序广播也很简单,这里就介绍一下核心代码

public void sendBroadcast(View v){
        Intent intent=new Intent();
        intent.setAction("com.data.broadcast");
        /**
         *  第一个参数 Intent类型:意图
         * 第二个参数 String类型 receiverPermission,接收器需要的权限
         * 第三个参数BroadcastReceiver类型,自己定义的接收器作为最终接收器
         * 第四个参数Handler类型,用于执行接收器的回调,如果为null则在主线程中执行
         * 第五个参数int类型,结果代码的初始码
         * 第六个参数初始化参数
         * 第七个参数Bundle类型,额外的数据
         */
        sendOrderedBroadcast(intent, null, new MyBroadcast2(), null, RESULT_OK, "10块钱", null);
    }
    //主要是弄清楚sendOrderedBroadcast()方法的参数

接受广播

@Override
    public void onReceive(Context context, Intent intent) {
        String actionString = intent.getAction();
        String data = getResultData();
        Toast.makeText(context,
                "接收到" + actionString + "发送的广播数据" + data, 1).show();
        System.out.println("接收到" + actionString + "发送的广播数据" + data);
        //abortBroadcast();//终止广播

    }
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:28968次
    • 积分:766
    • 等级:
    • 排名:千里之外
    • 原创:49篇
    • 转载:5篇
    • 译文:0篇
    • 评论:1条
    欢迎来Star
    博客专栏