学习 BroadcastReceiver

广播分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>
时间: 2024-10-23 19:43:34

学习 BroadcastReceiver的相关文章

Android 四大组件学习之BroadcastReceiver四

本节学习系统中特殊的广播接收者. 我们前面几节不是说了,当广播接受者一旦注册到系统中,当系统发送的广播和你注册的广播的action匹配时,系统就会启动广播接收者所在的进程.除非用户手动停止广播接收者所在的进程.但是生活中有这样一种情况,比如说:我在玩网络游戏,假设说游戏本身在系统电量低的情况下,会自动保存当前游戏的进度,也就是存档的.可以这么说,此广播接受者只有在用户玩游戏时才需要启动,别的时候用户是不需要的.如果此广播接收者一直常驻于系统,那不是很浪费系统资源.所以我们就需要动态的启动广播接收

Android 四大组件学习之BroadcastReceiver二

上节学习了如何创建一个广播,也尝试接受系统打电话的广播.本节课学习如何自定义广播.自定义广播实质上也就是创建一个发送广播者,创建一个接受该广播者. 那我们就开始行动吧. 先创建一个发送广播的应用: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCont

Anroid 四大组件学习之BroadcastReceiver三

本节学习广播的分类. 广播分为无序广播和有序广播 无序广播: 广播发送者的action与广播接收者的action都匹配的话,所以广播介绍者都可以收到这条广播,并且没有先后顺序,可以认为是同时收到 有序广播: 广播发送者的action与广播接收者的action都匹配的话,所以广播介绍者都可以收到这条广播,但是有先后顺序,高优先级的先收到 既然知道什么是无序广播和有序广播后, 那我们举例说明: 那我们模拟生活中一个例子说明. 某高校正在举行体操比赛.这时候我们伟大的计算机学院就开会了. 院长将几个班

Android 四大组件学习之BroadcastReceiver一

本节课学习四大组件最后一个, 广播接受者. 顾名思义广播接受者就是接受广播呗.比如在现实社会中,以前每个人家都有一台收音机,这可就可以去接受广播发出来的消息.大家都知道,程序世界也是参照的显示生活设计出来的,那在Android系统中也引入了广播这个概念.那在Android系统中广播有什么作用呢? 举个例子:比如你正在玩游戏或者看视频突然手机电量过低,这时候就会弹出一个框,提醒您手机电量过低,请充电的提示.其实电量改变就是一种广播类型,当电量过低时,系统就会发生一条广播,这时候正在运行的程序就会收

Android 学习笔记 BroadcastReceiver广播...

PS:不断提升自己,是件好事... 学习内容: 1.BroadcastReceiver的使用.. 2.通过BroadcastReceiver去启动Service... 1.BroadcastReceiver...   广播接收者,用来接收系统和应用中的广播...Android广播机制用的地方还是很多的,比如说:当网络状态发生改变的时候,通过接收这条广播就能及时做出相应的响应,然后完成一些操作..这就是广播的机制...它自身并不实现图形用户界面...只是一个触发性的操作...   使用广播是需要几

BroadcastReceiver学习笔记

1.在代码中注册与在AndroiManifest.xml注册的区别 (a)在代码中注册可以控制注册与注销的时间.比如在onCreate-onDestory, onStart-onStop, onResume-onPause里面去注册或者注销receiver. 在manifest.xml里面一经注册,那么receiver会一直运行,除非程序被删除. 比如希望接收到短信发来的广播,代码如下 <receiver android:name="MyBroadcastReceiver">

Android学习笔记(十一)BroadcastReceiver动态注册、注销示例

在上一篇博文中简单介绍了一下BroadcastReceiver的相关知识点,本篇举一个在代码中动态的注册.注销BroadcastReceiver的栗子. 1.首先创建一个MyReceiver并继承BroadcastReceiver,既然要动态注册该receiver的话,就无需在AndroidManifest.xml中配置它了: 1 public class MyReceiver extends BroadcastReceiver { 2 public static final String AC

Android学习笔记(十七) BroadcastReceiver

1.接收广播 创建一个类,继承BroadcastReceiver,复写其中的onReceive()方法 在AndroidManifest.xml文件中注册该BroadcastReceiver 设置完成之后如果有符合条件的广播发送出来,系统会自动生成一个对应的BroadcastReceiver对象,然后调用里面的onReceive()方法.执行完该方法,这个BoadcastReceiver对象即会被销毁.下次再触发时生成的是新的BroadcastReceiver对象. public class M

Android学习笔记--BroadcastReceiver

---恢复内容开始--- 过了一个没有假期的10.1,今天来把之前学的东西复习一下,BroadcastReceiver,Android四大组件之一,为什么这么说,百度一下,你就知道, BroadcastReceiver分为两种广播,一种是常驻型,一种是非常驻型,常驻型是在XML中国注册的被称为常驻型,在代码中注册的被称作为非常驻型, 第一步,先建立一个JAVA文件,继承与BroadcastReceiver类, MyBind.java 1 package com.wuxianedu.guangbo