细说Android BroadcastReceive

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

BroadcastReceiver 本质上就是一种全局的监听器,用于监听系统全局的广播消息

之前介绍的各种 OnClickListener 只是程序级别的监听器,这些监听器运行在制定程序中,当程序退出时,这些监听器也就关闭了,而BroadcastReceiver属于系统级别的监听器,拥有自己的进程,只要存在与之匹配的Intent被广播出来,BroadcastReceiver总会被激发

BroadcastReceiver本质上属于一个监听器,因此其实现方法只要重写BroadcastReceiveronReceive方法即可

一旦实现了BroadcastReceiver,就应该知道那个该BroadcastReceiver能匹配的Intent,可在AndroidManifest.xml中配置,配置方法如下:

<receiver android:name=".MyReceiver">
    <intent-filter >
        <action android:name="llp"/>
    </intent-filter>
</receiver>

每次系统Broadcast 事件发生后,系统就会创建对应的BroadcastReceiver实例,并自动触发它的onReceive()方法,onReceive()方法执行完后,BroadcastReceiver实例就会被销毁,若onReceive()方法不能再10s内执行完成,Android就会认为该线程无响应


Broadcast 使用实例代码如下:

主文件:


package com.example.androidtest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button send = (Button)findViewById(R.id.read);
        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent();
                //这里要跟AndroidMainfest里面的 action 的 name 一样
                //action name 最好包含包名
                intent.setAction("llp");
                intent.putExtra("msg", "simple message");
                sendBroadcast(intent);
            }
        });
    }
}

新建MyReceive.java 文件复写 OnReceive() 方法:


package com.example.androidtest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Toast.makeText(context, 
                "接收到的Intent的Action为:"+intent.getAction()+"\n消息内容为:"+intent.getStringExtra("msg"), 5000).show();
    }
}

两种Broadcast介绍:


1、Normal BroadCast:完全异步,可以在同一时刻上被所有的接受者接收到,但接受者无法将信号处理结果发给下一个接受者,也无法终止BroadCast Intent的传播
2、Ordered BroadCast:设置优先级 android:priority,该数值越高,表示优先级越高,可以网下一个优先级的接受者发送数据,也就可以实现接受者将数据处理后发送给下一个接受者,同时可以在代码中调用 abortBroadCast() 方法实现终止BroadCast Intent的传播

实现代码如下:

//优先接收者将将数据存入 BroadCast 中
Bundle bundle = new Bundle();
bundle.putString("first", "第一个BroadCastReceive 存入的消息");
setResultExtras(bundle);
//终止BroadCast Intent 的传播
// abortBroadcast();
//下一个接受者获取数据
Bundle bundle = getResultExtras(true);
String first = bundle.getString("first");

同时必须在 AndroidManifest.xml 文件中申明 receive 的优先级,方法如下:

<receiver 
    android:name=".MyReceiver">
    <!-- 注明优先级为20 -->
    <intent-filter android:priority="20" >
        <action android:name="llp"/>
    </intent-filter>
</receiver>
<receiver 
    android:name=".MyReceiver2">
    <!-- 注明优先级为0 ,范围为:-1000:1000 -->
    <intent-filter android:priority="0">
        <action android:name="llp"/>
    </intent-filter>
</receiver>

最后给出完整java文件代码如下:

发送广播的activity:

//发送广播代码
package com.example.androidtest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button send = (Button)findViewById(R.id.read);
        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent();
                intent.setAction("llp");
                intent.putExtra("msg", "simple message");
                //发送有序广播
                sendOrderedBroadcast(intent, null);
            }
        });
    }
}

高优先级接收者代码:

/高优先级接受者
package com.example.androidtest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
public class MyReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Toast.makeText(context, 
                "接收到的Intent的Action为:"+intent.getAction()+"\n消息内容为:"+intent.getStringExtra("msg"), 5000).show();
        Bundle bundle = new Bundle();
        bundle.putString("first", "第一个 BroadCastReceive 存入的消息");
        //处理消息并传递给下一个接收者
        setResultExtras(bundle); 
        abortBroadcast();
    }
}

低优先级接收者代码:

//低优先级接受者
package com.example.androidtest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
public class MyReceiver2 extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        //获取数据
        Bundle bundle = getResultExtras(true);
        String first = bundle.getString("first");
        Toast.makeText(context, "第一个BroadCastRecver 存入的消息为:"+first,     5000).show();
    }
}






Android BroadcastReceive详解 ##概述 广播是Android的四大组件之一,它本质是一种全局的监听器,是一种消息订阅/发布机制,可以监听用户发出的广播,也能够监听系统级广播消息,并拥有自己的进程. 广播主要分为两部分,一:广播的注册与发送.二:广播的接收 ###广播的注册与发送 广播的注册根据其注册形式不同主要分为两种, 一种是静态注册,通过在清单文件(AndroidManifeast),声明已经实现的Receive类并注明监... 阅读详情

相关推荐

Android广播接受者BroadcastReceiver详解

敲代码也有一段时间了,但是从来没怎么总结过知识,更没自己写过博客,刚开始写博客,文采及代码知识都有所不足,仅作自己的备忘,如果能凑巧帮到他人,不胜荣幸           我不擅长深入的分析,仅以自己的浅显理解来描述。 所谓的安卓广播,简单来说就是发送一个广播,当符合条件的接收者接收到广播后,便执行响应处理。         最简单的例子:      广播的发送 public clas

sinat_33694144的博客 973

Android学习【6】BroadcastReceiver和接口的使用

BroadcastReceiver主要用途为消息接收,接下来以获取电池电量为例进行下描述。 首先,创建MyPowerBR继承自BroadcastReceiver用于电池电量消息的获取。之后重写onReceive方法,在onReceive方法中过滤消息,选择出电池电量的消息。 public void onReceive(Context context, Intent intent)

fxmfxm9304的博客 923

Android4.2中应用接收开机广播(android.intent.action.BOOT_COMPLETED)失败的原因

android4.2系统中是在frameworks/base/services/java/com/android/server/am/ActivityManagerService.java的

Polynesia的专栏 2万+

Android广播中网络请求,怎么在Android中利用BroadcastReceiver监听网络连接状态

怎么在Android中利用BroadcastReceiver监听网络连接状态发布时间:2021-03-26 17:47:16来源:亿速云阅读:86作者:Leah本篇文章为大家展示了怎么在Android中利用BroadcastReceiver监听网络连接状态,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、定义广播接收器NetState.javapackag...

weixin_35036750的博客 756

Android 消息推送之MQTT及采坑

Android 消息推送MQTT及采坑 大家好,我是一个心中有小宇宙,有很多很多事想去实现的程序员,之前想过去写博客,冥冥之中不知道如何下手,这几天公司开发的项目用到了MQTT这个东西,一想赶紧网上了解,查阅了大量的资料,文档,还是碰到了很多坑,第一,网上的文章单篇写的不全面,还是需要整合很多文章在一起才能解决。第二,时间不是很新的,有些2016、2017年,甚至2018的文章还是用的2017年的...

朱大大的博客 8391

Android BroadCastReceive

BroadcastReceiver

viewgroup的博客 522

BroadcastReceive知识模块

BroadcastReceive知识模块BroadcastReceive注册静态注册代码展示动态注册代码展示 BroadcastReceive注册 静态注册 在清单文件通过标签注册是常驻型,也就是说即便当前的应用程序关闭后,如果信息广播来,程序也会被系统自动调用。 代码展示 <receiver android:name=".DataChangeReceive"> <intent-filter> <action android:name="android.

Barryjacket的博客 276

四大组件之BroadcastReceive

一、什么是BroadcastReceive: BroadcastReceive:广播接收者, 顾名思义,用来接收应用程序和系统发出来的广播,作用体现在方方面面:例如系统电量不足时会产生一个广播,可以利用这条广播提醒用户;系统开机后会产生一条广播,通过这条广播可以开启开机的相关服务等; 二、BroadcastReceive的注册: 1、静态注册:

项勇 | 一天不学点啥就浑身难受 523

BroadcastReceive

BroadcastReceive 广播(Broadcast)是一种广泛运用的在应用程序之间传输信息的机制,在 Android 里面有各种各样的广播,比如电池的使用状态,电话的接收和短信的接收都会产生一个广播,应用程序也可以接受广播并做出程序逻辑上的处理, 比如我们需要让应用程序开机自动启动,其实就是应用了广播的只是,让应用程序监听接收系统开机广播来启动程序,我后面会以这个例子来具体看下广播的...

qiu_suo的博客 248

android 四大组件BroadcastReceive

一、BroadcastReceiverAndroid系统的四大组件之一,它本质上就是一个全局的监听器,用于监听系统全局的广播消息。由于BroadcastReceiver是一种全局的监听器,因此它可以方便地实现系统中不同组件之间的通信。 二、BroadcastReceiver和事件处理机制相似,只不过事件处理机制是程序级别的的监听器,这些监听器运行在指定程序所在的进程中,当程序退出时,这些程序级

w563870107的博客 328

Android基础知识】BroadcastReceive

BroadcastReceiver是什么 BroadcastReceiverAndroid四大组件之一,意为“广播接受者”,主要是用来接收系统的广播或者我们自定义的广播。   系统广播 系统广播是由系统发出的,我们只需要注册即可,例如开机完成后会发送开机广播android.intent.action.BOOT_COMPLETED ,我们就可以在需要开机自启动的应用程序中注册这个广播。手

自由世界的专栏 1557

Android四大组件之BroadCastReceive

hello,大家好 ,我是小杰,前几篇博文中我给大家介绍了四大组件的其中两种,今天给大家介绍一下第三个组件,BroadCastReceive,也就是广播接受者。广播是通过Intent发送action,然后注册一个接受者来接收这个action从而进行一些操作。  广播的发送方式 无序广播 有序广播 无序广播是所有的接收者都可以接收到这个action从而进行操作,而有序广播是根据优先级不同来进行...

ZCJ-阿杰的博客 294

BroadcastReceive的复习

广播接受者的简单复习: 首先发送一条广播,通过方法 Intent intent=new Intent("mysend"); //action为自己定义的mysend,名字自己随便写了。接收的时候只要判断action是不是为mysend即可。 sendBroadcast(intent); 简单的步骤: 首先肯定得写个广播接受者,继承BroadcastReceiver,并且重写 onRe

老男孩的网络笔记本 637

android 广播使用demo,broadcastreceive

广播接收者/广播接收者/.DS_Store广播接收者/._.DS_Store广播接收者/BroadcastReceiver/广播接收者/BroadcastReceiver/.DS_Store广播接收者/BroadcastReceiver/._.DS_Store广播接收者/BroadcastReceiver/.classpath广播接收者/BroadcastReceiver/.project广播接收...

weixin_29699727的博客 247

Android的广播组件BroadcastReceive

Android的广播组件引言发送广播接收广播静态注册动态注册将接收到的广播数据回传给Activity 引言 Android中的广播使用了观察者模式,基于消息的发布/订阅事件模型. 1.广播是一种广泛运用在应用程序之间传输信息的机制 2.广播笑死可以是应用程序的数据信息,也可以是Android的系统消息 3.广播分为两个方面: 广播发送者和广播接收者 BroadcastReceiver指的就是广播接...

qq_45064049的博客 440

关于Android开发中的BroadCastReceive

解析BroadcastReceiver之你需要了解的一些东东   前些天把四大组件之一的Service扯了一遍,今天就要开始谈谈它的弟兄BroadcastReceiver了。写到这里我挺纠结的,因为广播接收者确实比较简单,但是各位就不要以为简单的就不内涵,也许我们慢慢探讨一下还能有另外一片天地。   惯例还是先会介绍一下基础的知识,后面会说说关于BroadcastReceiver的接收

qq97206858的博客 522

BroadCastReceive的理解和使用

Android的广播

Millet 1671

BroadcastReceive 系统广播 短信广播

BraoadCastReceive Broadcast Receive 作为四大组件之一,但实际开发中用的很少,大多用来接收系统广播, 常见的用法 接收分为两种,注册 分为两种, 发送 : ① 发送有序 广播,② 发送无序广播 接收 : ① 静态注册 ② 动态注册。 给你们画了一下 xmind 思维导图: 注意 静态与动态指定相同优先级的话,动态先收到广播 静态与静态指定相同的优先级的话,谁先注

java_goodstudy的博客 986

Android四大基本组件——BroadcastReceive

BroadcastReceiver:使你的应用只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。 BroadcastReceive没有用户界面。然而,它们可以启动一个activity或service来响应它们收到的信息,或者用NotificationManager 来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是

SparkYuan 1289
上一篇: Java中Vector、List、Set集合、Iterator迭代器的使用
下一篇: 新版Eclipse中关联查看Android 源代码和android-support-v4源代码
Liu_LongPo
博客等级 码龄14年 627粉丝 70原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值