码迷,mamicode.com
首页 > 其他好文 > 详细

学习 BroadcastReceiver

时间:2015-05-05 00:06:07      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:android   android开发   

广播分2种 sendBroadcast,sendOrderedBroadcast分别 为有序广播和无序广播。
广播是四大组件之一需要在清单文件中配置。

使用无序广播

发广播:

    public void click(View view){
        //发送一个自定义的广播.
        Intent intent = new Intent();
        intent.setAction("com.lxcay.mybroadcast.xxx");
        sendBroadcast(intent);//发送一条无序广播
    }

接收广播:
在需要接受广播的应用对应的 AndroidManifest.xml中的组件节点下

        <receiver android:name="com.lxcay.myreceiver.MyReceiver" >
            //配置广播过滤器,只接受某种类型的广播
            <intent-filter android:priority="1000"> // android:priority 是优先级,1000代表最高
                //配置广播过滤条件
                <action android:name="com.lxcay.mybroadcast.xxx" />
            </intent-filter>
        </receiver>

使用有序广播

发广播:

    public void click(View view){
        //发送一个自定义的广播.
        Intent intent = new Intent();
        intent.setAction("com.lxcay.mybroadcast.xxx");
        sendOrderedBroadcast(intent, null);//发送一条有序广播
    }

接受广播:
在需要接受广播的应用对应的AndroidManifest.xml中的组件节点下

        <receiver android:name="com.lxcay.myreceiver.MyReceiver" >
            //配置广播过滤器,只接受某种类型的广播
            <intent-filter android:priority="1000"> // android:priority 是优先级,1000代表最高
                //配置广播过滤条件
                <action android:name="com.lxcay.mybroadcast.xxx" />
            </intent-filter>
        </receiver>

这种在 AndroidManifest.xml 使用广播的方式是全局(整个手机)有效的。

有序广播和无序广播的区别:
有序广播可以中断广播 abortBroadcast(),可以修改广播的值 setResultData(),
无序广
播不可以使用这个2个函数。

eg: 有序广播
public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("我是自定义的广播接受者 , 我接收到了广播事件");
        System.out.println("习大大说:举国同庆,放假3天");//原广播内容
        setResultData("习大大说:放假3天");//在接受广播后,修改广播内容
    }
}
public class MyReceiver1 extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("我是自定义的广播接受者 , 我接收到了广播事件");
        String message = getResultData();//接受广播,的内容
        System.out.println(message);//因为优先级的缘故,这里打印的是“习大大说:放假3天”
        setResultData("放假3天");//在接受广播后,修改广播内容

        abortBroadcast();//中断广播(有序广播在中断广播后,后面的广播是接收不了广播的,后面值得是android:priority=""更低的优先级)
    }
}

发送广播必须接收广播有权限

eg: 发送方
    public void sendOrdered(View v) {
        Intent intent = new Intent("lxcay.broadcast.ORDERED");
        //启动从没有启动过的广播
        intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);  
        intent.putExtra("data", "ordered");     // 接收者之间不能修改
        Bundle bundle = new Bundle();
        bundle.putString("name", "张三");
        //第二个参数,是限定接受广播的要这个权限,如果没有是接受不到
        sendOrderedBroadcast(intent, "lxcay.permission.BROADCAST", new ResultReceiver(), null, 1, "MainActivity", bundle);
    }
eg:接受方
    //接收方,需要在清单文件中配置,不然接受不到广播
    <uses-permission android:name="lxcay.permission.BROADCAST"/>

接收放需要发送方需要权限


eg:接收方

        <receiver android:name="com.lxcay.areceiver.A_Receiver" 
          //这个是需要发送方需要的权限,没有的话,这个广播是不会受理发送的广播                           android:permission="lxcay.permission.BROADCAST">
            <intent-filter>
                <action android:name="lxcay.broadcast.NORMAL" />
            </intent-filter>
                //这个是优先级
                <intent-filter android:priority="1">
                <action android:name="lxcay.broadcast.ORDERED" />
            </intlter>
        <receiver>

学习 BroadcastReceiver

标签:android   android开发   

原文地址:http://blog.csdn.net/lxcay9/article/details/45488319

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!