BroadcastReceiver 广播接收者

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

Android 系统中的四大组件之一的 BroadcastReceiver ,这种组件本质上就是一种全局监听器,用于监听全局的广播消息.由于BroadcastReceiver 是一种全局监听器,因此它可以实现不同组件之间的通信.例如我们想实现客户端程序和 startService()方法启动的 service 之间进行通信,就可以借助于 BroadcastReceiver 来实现.
BroadcastReceiver 用于接收程序(包括用户开发的程序和系统程序)所发出的Broadcast Intent.
程序启动 BroadcastReceiver 也是要2步:

  1. 创建需要启动 BroadcastReceiver 的Intent.
  2. 调用 Context 的sendBroadcast( )或者sendOrderedBroadcast( )方法来启动指定的BroadcastReceiver .

当应用程序发出一个 Broadcast Intent 之后,所有匹配该Intent的BroadcastReceiver 都有可能被启动.
BroadcastReceiver ,本质上就是一种全局监听器—– 它专门负责监听各应用程序所发出的Broadcast.


由于 BroadcastReceiver 本质上属于一个监听器,因此实现BroadcastReceiver 的方法也很简单,只要重写 onReceive(Context context, Intent intent) 方法即可.
一旦实现了 BroadcastReceiver,接下来就应该实现指定该BroadcastReceiver能 匹配的 Intent,此时有2种方式.

  1. 使用代码进行指定,调用 BroadcastReceiver的 Context的 registerReceiver(BroadcastReceiver receiver, IntentFilter filter)方法指定.例如代码如下: IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVER");
    CustomeReceiver receiver = new CustomeReceiver();
    registerReceiver(receiver,filter);

    2. 在 AndroidManifest.xml清单文件中配置 : 代码如下 <intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVER"/>
    </intent-filter>

每次系统 broadcast 事件发生后,系统就会创建对应的 BroadcastReceiver 的实例,并自动触发它的 onReceive()方法 , onReceive()方法执行完成后, BroadcastReceiver 的实例就会被销毁.


如果 BroadcastReceiver 的 onReceive()方法不能再10秒内执行完成,则 Android会认为该程序无响应,所以不要在 BroadcastReceiver 的 onReceive()方法里执行一些耗时操作,否则会弹出 ANR 的对话框.如果确实需要根据 Broadcast 来完成一些耗时的操作,则可以考虑通过Intent启动一个 Service来完成该操作.不应考虑使用新线程去完成耗时操作.因为 BroadcastReceiver 本身的生命周期就很短,可能出现的情况是子线程还没结束,BroadcastReceiver 就已经退出了.


package com.test.broadcastreceiverdemo;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
 * 简单的 广播接收者
 */
public class BroadcastTestActivity extends AppCompatActivity {
    Button send;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_broadcast_test);

        send = (Button) findViewById(R.id.button);


        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //创建 intent 对象
                Intent intent = new Intent();
                //设置Intent 的action 属性
                intent.setAction("com.test.broadcastreceive.DEMO_BROADCAST");

                //设置数据
                intent.putExtra("msg", "简单消息");

                //发送广播
                sendBroadcast(intent);
            }
        });
    }
}

自定义广播接收者

package com.test.broadcastreceiverdemo;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

/**
 * 自定义广播接收者
 */
public class MyReceiver extends BroadcastReceiver {
    public MyReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.

        Toast.makeText(context, "接收到的Intent 的action 为: " + intent.getAction() +
                "\n 消息内容为: " + intent.getStringExtra("msg"), Toast.LENGTH_SHORT).show();
    }
}

记得配置清单文件

 <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <!--指定该BroadcastReceiver 所相应的Intent的 action-->
                <action android:name="com.test.broadcastreceive.DEMO_BROADCAST"/>
            </intent-filter>
        </receiver>
BroadcastReceiver简介 [size=large][color=blue]BroadcastReceiver[/color]作为四大组件之一,觉得跟Activity最大的区别是不怎么跟用户交互,跟Service最大区别是可以广播,将信息发送给诸多用户。 BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。 在Android系统中,广播体现在方方面面,例如当开机完... 阅读详情

相关推荐

android BroadcastReceiver 使用小结

BroadcastReceiver 作为android4大组件之一,使用的很普遍,下面是对使用BroadcastReceiver一些总结。 1. android 广播机制的三要素: 广播(Broadcast) - 用于发送广播; 广播接收器(BroadcastReceiver) - 用于接收广播; 意图内容(Intent)-用于保存广播相关信息的媒介。 Broadcast是一种广泛运用的

我是一只小菜鸟,飞丫飞丫飞~~~ 3947

使用BroadCastReceiver

概念:BroadCast是一种广泛运用的,在应用程序之间传输信息的机制,Android中的广播与传统意义上的电台广播类似,一个广播可以有任意个接收者。广播机制是一个典型的发布-订阅模式。 Android的广播可分为普通广播、有序广播、本地广播和 Sticky广播。一、普通广播 普通广播是完全异步的,通过Context的SendBroadCast()函数来发送,消息传递的效率比较高,但所有的rec

BlueBerry的专栏 1582

BroadcastReceiver的两种实现方式

BroadcastReceiver是Android中的广播接收者,既然有接收,自然就有发送,首先看如下发送程序: Intent broadInt = new Intent("myChannel"); broadInt.putExtra("message", "我发送了一则通知!"); sendBroadcast(broadInt); 这段代码写在Activity中即可,例如绑定在按钮的点击事件

村长Korbin 1953

Android 蓝牙开发(三)蓝牙Hid 开发

Demo下载:http://www.demodashi.com/demo/13891.html 最近客户需求,android系统的一个设备,想连接一个扫描枪(类似蓝牙键盘,只支持hid协议),并且可以收到其数据,填写到输入框中。我这里借了一个蓝牙鼠标,用来与android设备连接。                                                          ...

奋斗的菜鸟ing 3万+

BroadcastReceiver广播接收者

一.什么是广播接收者?(适用于高版本) Android系统提供了一个BroadcastReceiver组件,此组件可以监听来自系统或其他组件的广播。 广播接收者可以监听系统中的广播消息,实现不同组件之间的通信。 每个组件都可以当接收者和广播者。大部分是android系统当广播者。 如图: 二.如何使用它? 1.创建广播接收者: 得到以下初始代码: package com.example.bro...

c1776167012的博客 1121

广播接收者BroadcastReceiver

转自:http://xtfncel.iteye.com/blog/657910   但是需要修改文章的最后一句话,广播中耗时操作不能简单放到广播接受者的子线程执行,因为广播接收者的生命周期方法onReceive()生命周期非常短,大概5秒钟,如果子线程运行的时间比较长,此时onReceive()所在的进程很可能已经被系统回收了,那么子线程也会被销毁,仍然会报ANR异常,所以最好的做法是...

135

BroadCastReceiver 安卓广播接收者

BroadCastReceiver一.广播接收者介绍二.分类1.无序广播(标准广播)三.BroadCastReceiver使用四.系统广播 一.广播接收者介绍 Android四大组件之一,没有可视化界面,用于不同组件和多线程之间的通信。 广播三要素: (1)广播发送者 : 发送广播 (2)广播接收者(调频): 用于接收广播 (3)要处理的事情 :处理广播的相关信息, Intent有图对象 广播的...

weixin_45533623的博客 505

广播接收者(BroadcastReceiver)

大家有什么疑问可以留言,我们共同解决!留言哦! 1,什么是BroadcastReceiver?     广播接收者BroadcastReceiver)用于异步接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast()、Con

大写的牛逼 1517

Android BroadCastReceiver广播接收者

广播接收者介绍 BroadCastReceiver广播接受者,安卓四大组件之一 Activity是接收者,静态注册和动态注册的区别: 动态注册: (1)广播接收者会跟Activity的生命周期结束而结束 (2)自由的控制注册和取消 静态注册: (1)广播接收者不会跟随Activity的生命周期结束而结束,会一直存在,即使应用程序关闭,也会被唤醒接收广播 (2)全局的广播 静态注册+无序广播(标准...

韦梦想的博客 329

广播接收者--BroadcastReceiver

android应用程序的四个重要的组件:(所有组件的要使用都要在androidManifest.xml中配置) 1.activity  ui界面的展现 2.content provider 内容提供者 暴露自己应用私有的数据给别的应用程序 3.broadcast receiver 广播接受者. 4.service 后台服务.  长期在后台运行, 没有用户界面的一个组件. 在and

HelloWold 842

安卓 BroadCastReceiver安卓的广播接收者

安卓 专高 day12 BroadCastReceiver安卓的广播接收者BroadCastReceiver 广播接收者简介使用 BroadCastReceiver 广播接收者 简介 其实BroadcastReceiver就是应用程序间的全局大喇叭,即通信的一个手段, 系统自己在很多时候都会发送广播, 比如电量低或者充足,刚启动完,插入耳机,输入法改变等, 发生这些时间,系统都会发送广播,这个叫系...

zxsenqiu的博客 251

第十二单元:BroadCastReceiver安卓的广播接收者

BroadCast 广播广播的介绍广播作用以及机制项目中广播使用广播生命周期广播的分类无序广播发送 (也叫标准广播)有序广播发送如何实现广播静态广播注册动态广播注册系统广播静态接收系统锁屏广播使用注意事项 广播的介绍 广播作用以及机制 其实BroadcastReceiver就是应用程序间的全局大喇叭,即通信的一个手段, 系统自己在很多时候都会发送广播,比如电量低或者充足,刚启动完,插入耳机,输...

shuai_ge_feng的博客 1571

Android学习七 BroadcastReceiver广播接收者

BroadcastReceiver广播接收者也是Android四大组件之一,Android中有些应用在特定的情景下会发送广播,利用广播接收者可以实现对广播的接收。利用广播接收者可以监控一些行为的发生,在此基础上进行一些操作,下面来看一下具体的内容。 一、实现广播接收者 1.定义一个类继承BroadCastReceiver ,并且重写其中的onReceive方法。 2.注册广播接收者 有两种

一路前行 1023

BroadCastReceiver安卓的广播接收者

BroadCastReceiver 广播接收者 广播的介绍 广播接收者作用以及机制 项目中广播接收者的使用 广播接收者生命周期 广播的分类 无序广播发送 (也叫标准广播) 有序广播发送 如何实现广播接收者 静态广播接收者注册 动态广播接收者注册 系统广播 静态接收系统锁屏广播 使用注意事项 广播的介绍 广播接收者作用以及机制 其实BroadcastReceiver就是应用程序间的全局大喇叭,即通...

Lee_black_eggs的博客 306

BroadcastReceiver广播接收者简介

BroadcastReceiver广播接收者简介        BroadcastReceiver广播接收者是Android四大组件之一。一般的都要在AndroidManifest中静态注册,但是只有广播接收者可以使用java代码的方法来动态注册。         BroadcastReceiver是用于接收广播的组件用于组件与组件之间进行通信,可以跨应用程序传递.如操作系统电池电量低会发

daimengs的博客 704

android广播接收者broadcastReceiver

广播接收者broadcastReceiver概述 对于广播接收者broadcastReceiver可以这样理解,可以假设android系统内已经有一个电台,它定义了好多的广播事件 ,比如外拨电话 短信到来 sd卡状态 电池电量变化等等。 对开发者而言我们要做的就是做一个收音机,然后调整到要收听的频道就OK了,当有广播发出后我们就可以成功接收并处理对应的广播。 谷歌工程师给我们

松一160 418
上一篇: AlarmManager学习之定时更换壁纸
下一篇: BroadcastReceiver 之有序广播
高锦湖
博客等级 码龄11年 11粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值