安卓四大组件之BroadCastReceiver

Android四大组件之BroadcastReceiver详解 BroadcastReceiver(广播接收器),在Android开发中,BroadcastReceiver的应用场景非常多,属于Android四大组件之一。 Android 广播分为两个角色:广播发送者、广播接收者 一、 作用 用于监听 / 接收 应用发出的广播消息,并做出响应 应用场景: 不同组件之间通信(包括应用内 / 不同应用之间) 与 Android 系统在特定情况下的通信(如当电话呼入时、网络可用时) 多线程通信 二、实现原理 Android中的广播使用了设计模式中的观察者模式:基于消息的发布/订阅事件模型。 模型中有3个角色: 消息订阅者(广播接收者) 消息发 立即下载

概述

          Android四大核心组件指的是Activity,Service,ContentProvider, BroadCast Receiver,核心组件都是由Android系统进行管理和维护的,都要在清单文件中进行注册,广播接收者比较特殊,既可以在清单文件中注册,也可以直接使用代码注册,有的广播接收者,必须代码注册,如电量的改变或者屏幕的锁屏,下面是学习安桌四大组件的一个总结。

          一. Activity

          二. Service

          三. ContentProvider

          四. BroadCast Receiver

 

BroadCast Receiver

 1. 定义

         广播是一种广泛运用的在应用程序之间传输信息的机制,主要用来监听系统或者应用发出的广播信息,然后根据广播信息作为相应的逻辑处理,也可以用来传输少量、频率低的数据。在实现开机启动服务和网络状态改变、电量变化、短信和来电时,通过接收系统的广播,让应用程序作出相应的操作。BroadcastReceiver 自身并不实现图形用户界面,但是当它收到某个通知后, BroadcastReceiver 可以通过启动 Service 、启动 Activity 或是 NotificationMananger 提醒用户。 

      

 

 2. BroadcastReceiver的注册

 

        BroadcastReceiver的注册方式有且只有两种,一种是静态注册(推荐使用),另外一种是动态注册,广播接收者在注册后就开始监听系统或者应用之间发送的广播消息。

          a.接收短信广播示例

             定义自己的BroadcastReceiver 类:

​
public class MyBroadcastReceiver extends BroadcastReceiver {


    public void onReceive(Context context, Intent intent) {

    //区分接收到的是哪种广播
    String action = intent.getAction();
    //获取广播中包含的应用包名
    Uri uri = intent.getData();
    if(action.equals("android.intent.action.PACKAGE_ADDED")){
        System.out.println(uri + "被安装了");
        }
    else if(action.equals("android.intent.action.PACKAGE_REPLACED")){
        System.out.println(uri + "被更新了");
        }
    else if(action.equals("android.intent.action.PACKAGE_REMOVED")){
        System.out.println(uri + "被卸载了");
        }
    }
}

​

          b. 静态方式

              在AndroidManifest.xml的application里面定义receiver并设置要接收的action。

< receiver android:name = ".MyBroadcastReceiver" > 
< intent-filter android:priority = "1000" >            
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="android.intent.action.PACKAGE_REPLACED"/>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>
</ intent-filter > 
</ receiver >

这里的priority取值是 -1000到1000,值越大优先级越高,同时注意加上系统接收短信的限权。

      静态注册的广播接收者是一个常驻在系统中的全局监听器,当你在应用中配置了一个静态的BroadcastReceiver,安装了应用后而无论应用是否处于运行状态,广播接收者都是已经常驻在系统中了。同时应用里的所有receiver都在清单文件里面,方便查看。要销毁掉静态注册的广播接收者,可以通过调用PackageManager将Receiver禁用。

        C. 动态方式

  在Activity中声明BroadcastReceiver的扩展对象,在onResume中注册,onPause中卸载

public class MainActivity extends Activity {
    MyBroadcastReceiver receiver;
    @Override
     protected void onResume() {
        // 动态注册广播 (代码执行到这才会开始监听广播消息,并对广播消息作为相应的处理)
        receiver = new MyBroadCastReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.intent.action.PACKAGE_ADDED" );
        filter.addAction("android.intent.action.PACKAGE_REPLACED" );
        filter.addAction("android.intent.action.PACKAGE_REMOVED" );
        registerReceiver( receiver , filter);

        super.onResume();
    }
    @Override
    protected void onPause() {  
        // 撤销注册 (撤销注册后广播接收者将不会再监听系统的广播消息)
        unregisterReceiver(receiver);
        super.onPause();
    }
}

 3. 广播的两种类型

     无序广播:所有跟广播的intent匹配的广播接收者都可以收到该广播,

                        并且是没有先后顺序(同时收到)

     有序广播:所有跟广播的intent匹配的广播接收者都可以收到该广播,

                        但是会按照广播接收者的优先级来决定接收的先后顺序

            优先级的定义:-1000~1000

            最终接收者:所有广播接收者都接收到广播之后,它才接收,并且一定会接收

            abortBroadCast:阻止其他接收者接收这条广播,类似拦截,只有有序广播可以被拦截

 4. IP拨号器

    原理:接收拨打电话的广播,修改广播内携带的电话号码 

    定义广播接收者接收打电话广播

  public class CallReceiver extends BroadcastReceiver {
 
        //当广播接收者接收到广播时,此方法会调用
        @Override
        public void onReceive(Context context, Intent intent) {
            //拿到用户拨打的号码
            String number = getResultData();
            //修改广播内的号码
            setResultData("17951" + number);
        }
    }

    在清单文件中定义该广播接收者接收的广播类型         

<receiver android:name="com.itheima.ipdialer.CallReceiver">
            <intent-filter android:priority="1000">
                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
            </intent-filter>
        </receiver>

    接收打电话广播需要权限

    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>

    即使广播接收者的进程没有启动,当系统发送的广播可以被该接收者接收时,系统会自动启动该接收者所在的进    

 5.在代码中注册广播接收者

IntentFilter mfilter = new IntentFilter( );
mfilter.addAction("com.android.open.audio");
mfilter.addAction("com.android.close.audio");
mContext.registerReceiver( mReceiver, mfilter );
BroadcastReceiver mReceiver = new BroadcastReceiver( ) {
        @Override
        public void onReceive( Context context, Intent intent ) {
               String action = intent.getAction( );
               Log.e(TAG, "action ======= " + action);
                if(action.equals("com.android.open.audio"))
                 {
                      //操作A
                  }else if(action.equals("com.android.close.audio"))
                  {
                      //操作B
                  }
        }
        };

 

 6. 广播拦截

         在广播接收者中,使用abortBroadcast()方法,可以终止有序广播向后继续传递,即后续的接收者们将无法接收到该广播。

          注意:该方法只能在接收有序广播时调用!

 7. adb命令发送广播

        com.android.mybroadcast为要发送的广播

        am broadcast -a  com.android.mybroadcast

 8. 代码发送广播  

Intent intent = new Intent();
intent.setAction("com.android.mybroadcast");
//发送的额外数据
intent.putExtra("key1","value1");
intent.putExtra("key2","value2");
mContext.sendBroadcast(intent);

 

从命名玄学看单片机江湖:STC、STM32与ESP32的型号密码与设计哲学 本文解析了STC、STM32和ESP32三大主流单片机系列的型号命名规则,揭示了其背后的设计哲学与市场策略。通过详细解读STC89C52、STM32F103C8T6等具体型号,帮助开发者理解芯片核心特性、性能等级及适用场景,为嵌入式系统选型提供实用指南。 阅读详情

相关推荐

车载以太网入坑指南,从小白到懂哥的进阶之路【技术分享】

各位技术大佬们好!最近公司项目涉及到车载以太网,刚开始完全懵逼,花了大半个月时间各种查资料、测试设备,总算是摸清了门道。想着互联网上卧虎藏龙,肯定有不少大佬对这个技术感兴趣,所以写个帖子分享一下,顺便求各位大佬指点。

starelink的博客 1262

Service、Broadcast、ContentProvider简要介绍和使用

一、Service简介: 1.可以让程序在后台一直做它想要做的事情,即使当前没有与用户进行交互。(对应context.startService()的启动方式)。 2.实现了某些功能已供其他程序调用的工具,并可保持长期连接进行交互。(对应context.bindService()的启动方式)。 二、Service生命周期 onCreate () 首次创建服务时,系统将调用此方法来执行一次性设置程序(在调用 onStartCommand() 或onBind() 之前)。如果服务已在运行,则不会调..

LX_52Hz的博客 982

从零开始用STM32驱动RGB屏:配置PCLK、DE同步信号的避坑指南

本文详细介绍了如何使用STM32驱动RGB接口LCD屏幕,重点解析了PCLK配置、同步信号极性和DE使能等关键参数的设置方法。通过实战代码示例和常见问题排查指南,帮助开发者避免常见配置错误,实现稳定的显示效果。特别针对800x480 IPS屏提供了优化建议和调试技巧。

sky77的博客 541

系出名门Android(4) - 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)...

[索引页][×××] 系出名门Android(4) - 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)作者:webabcd介绍在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver 活动(Activity) - 用于...

weixin_33775572的博客 264

STC32G电调调试血泪史:从TPH1R403NL MOS管烧毁到PWM信号异常排查全记录

本文详细记录了STC32G无刷电调调试过程中的常见问题与解决方案,包括MOS管烧毁、PWM信号异常等关键故障排查。通过电源系统检测、驱动电路验证及三相平衡调试等实战经验,帮助硬件爱好者快速定位问题,提升电调调试效率。特别针对TPH1R403NL等MOS管的保护措施进行了重点分析。

weixin_33736048的博客 551

GD32F103实战:用ADC+DMA实现高精度多通道电压采集与OLED实时显示(附完整工程)

本文详细介绍了如何利用GD32F103的ADC+DMA技术实现高精度多通道电压采集,并通过OLED实时显示数据。文章包含硬件架构设计、ADC配置技巧、DMA传输优化及显示系统实现方案,提供完整工程代码和调试指南,适用于工业传感器和环境监测设备开发。

weixin_42567497的博客 402

关于android receiver

关于android receiver 可以在代码文件中声明一个receiver,也可以在manifest中声明一个,前者中的receiver只有在该activity launch起来以后才会监听其所感兴趣的事件,而如果在androidManifext.xml中声明的话,就不受限制,随时可以监听感兴趣的事件。 1. 首先谈谈在androidManifext.xml中注册一个receiver,...

dengrui0814的博客 229

ESP32-CAM搭建Arduino及简单使用

配置环境 方法一 文件 → 首选项 http://wechat.doit.am/package_esp8266com_index.json https://dl.espressif.com/dl/package_esp32_index.json 工具 → 开发板 → 开发板管理器 等待安装 方法二 https://github.com/espressif/arduino-esp32 Arduino安装目录下,找到hardware文件夹 建立文件夹espressif,然后在里面再建立一个esp32文件夹

Ying的博客 2万+

Android安卓组件——Broadcast.

广播分为两种,标准广播和有序广播 1.标准广播 广播发出后所有接受器会在同一时间接收到这条广播的消息,无先后顺序。无法被截断。 2.有序广播 广播发出后,同一时间只有一个接收器可以接收到消息,有序,且可以被前面接受器的广播拦截。

shanhe_yuchuan的博客 505

C++多线程 task--std::promise和std::future

本文主要讲解C++11/14/17中所提供的应用于多线程编程中的Task机制。Task可由如下几部分取得而本文主要讲解std::promise和std::future相关的内容。std::promise和std::future通过一个数据管道进行交流,可以将std::promise看作生产者,std::future看作消费者,其两者形成如下的方式交互std::promise本身是一个模版类,通过std::promise可以像数据管道中设置value,异常和相应的通知信息。std::promise提供了如下接

qls315的博客 1818

【2026年华为暑期实习/秋招(AI)-8月5日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

摘要: 本文包含20道选择题,涵盖深度学习、数值计算、概率统计、线性代数及机器学习等领域。重点考察了Softmax的数值稳定性实现(减去最大值)、视觉问答任务(图像+问题→答案)、分层强化学习的奖惩计算、欧氏距离与余弦相似度、反向传播梯度计算、SVD降维存储优化、贝叶斯概率推断、插值多项式等。此外,涉及逻辑回归评价指标(不含MSE)、端侧推理内存因素(中间激活)、集中趋势度量(均值)、Householder变换性质、早期停止正则化、梯度矩阵秩与优化、在线学习特性及大模型训练技巧(如学习率预热、梯度裁剪)等知

m0_73659489的博客 194

android四大组件(Activity,Service,BroadcastReceiver,Content Provider)

安卓的四大组建,五大布局Android四大组件:Activity、Service、Broadcast Receiver、Content Provider。1、 Activity 可以去本人博客activity了解学习是Android程序与用户交互的窗口,从视觉效果来看,一个Activity占据当前的窗口,响应所有窗口事件,具备有控件,菜单等界面元素。从内部逻辑来看,Activity需要为了保持各个

Mr_haimeng的博客 1358

软件设计师---UML

软件设计师---UML

我从不打没有准备的仗! 1万+

Android 四大组件基础(Activity/Service/BroadcastReceiver/ContentProvider)工控场景用法

Android四大组件在工控场景中的应用与手机开发有显著差异。工控开发以Service为核心,负责后台数据采集(串口/Modbus)、设备监控等关键任务,需通过前台Service保证持续运行。Activity主要用于全屏数据显示和参数配置,需禁用旋转和返回键退出。BroadcastReceiver实现开机自启、外设状态监听等功能。ContentProvider则用于多应用间共享传感器数据。工控开发强调稳定性,四大组件需针对工业环境特殊配置,如固定屏幕方向、防进程回收等。

爱片闲串,爱钓鱼,爱中医,爱分享 534

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android四大组件——BroadcastReceiver详解

一、 定义 BroadcastReceiver(广播接收器),属于Android四大组件之一 在Android开发中,BroadcastReceiver的应用场景非常多广播,是一个全局的监听器,属于Android四大组件之一 Android 广播分为两个角色:广播发送者、广播接收者 二、 作用 用于监听 / 接收 应用发出的广播消息,并做出响应 应用场景 a. 不同组件之间通信(包括应用内 / 不同应用之间) b. 与 Android 系统在特定情况下的通信 如当电话呼入时、网络可用时

QLHepburn的博客 1679

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android题集四大组件之Content provider、BroadcastReceiver

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人。

2401_85730911的博客 950

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android 四大组件——BroadcastReceiver(广播)

本文全面解析Android四大组件之一的BroadcastReceiver。主要内容包括:1)广播接收器定义及核心设计思想,作为响应系统或应用内事件的"事件监听器";2)工作原理,包括系统匹配和执行流程;3)两种广播类型(标准广播和有序广播)及使用示例;4)两种注册方式(静态和动态);5)本地广播的优势及使用方法;6)安全考量如权限设置和exported属性;7)最佳实践,包括避免耗时操作和生命周期管理;8)常用系统广播列表。文中通过有序广播的完整示例,演示了从权限检查到最终处理的链式流

indeedes的博客 1009

Android四大组件之一BroadcastReceiver总结

1、定义 BroadcastReceiver即广播,属于Android四大组件之一 广播分:广播发送者、广播接收者 2、作用 监听其它应用/系统应用发出的消息,自身做出响应。 3、应用场景 1、不同应用之间通信; 2、应用内通信; 3、获取系统一些状态变化; 4、实现原理 广播使用观察者模式,基于消息发布/订阅事件模型 5、广播注册方式 注册方式分:静态注册、动态注册 静态注册:在AndroidManifest.xml里通过****标签声明 此App...

ming15920的博客 238

Android四大组件之BroadcastReceiver

BroadcastReceiver全方位解析一、 定义 BroadcastReceiver (广播接收器),属于Android四大组件之一 在Android开发中,BroadcastReceiver的应用场景非常多 广播,是一个全局的监听器,属于 Android 四大组件之一,Android 广播分为两个角色:广播发送者、广播接收者二、 作用 用于监听 / 接收 应用发出的广播消息,并做出响应 应用

u014732103的博客 280

Android四大组件之一 BroadCastReceiver详解

一、什么是BroadCastReceiver? 即广播,是一个全局的广播监听器,属于Android四大组件之一。 理解广播和广播接收器 广播事件处理属于系统级的事件处理。 一个应用可以在发生特定事件时发送BroadCast,系统中任何应用只要注册了对应的Receiver就会接收到此BroadCast。 广播事件机制是应用程序(进程间)之间通信的一种手段。 二、BroadCastRece...

familyyan的博客 1077

【Android】四大组件之BroadcastReceiver

BroadcastReceiver用于监听系统或应用发出的广播事件,实现跨组件通信。

贫道绝缘子的博客 2070

Android 四大组件之 ContentProvider 与 BroadcastReceiver

四大组件里,Activity 是"看得见的脸"、Service 是"看不见的腿",剩下两个是搭起整个系统协作骨架的"管道"。

2301_76797664的博客 521

Android四大组件---BroadcastReceiver

前言: BroadcastReceiver(广播接收器),属于Android四大组件之一 在Android开发中,BroadcastReceiver的应用场景非常多 今天,我将详细讲解关于BroadcastReceiver的一切相关知识 目录: 下面小可会把自己使用广播的心得体会以及广播dev具体用途详细的讲解。 1:定义 广播,是一个全局的监听器,属于Android四...

hirezy 1928

安卓四大组件之——BroadcastReceiver广播的详细解析

BroadcastReceiver 身为安卓的四大组件之一,其使用率非常普遍,所以我们要熟练掌握其使用方法。 1,广播的注册方式有两种:静态注册和动态注册 1),静态注册:需要在Androidmanifest 中进行声明,主要用于全局APP中监听,只有完全退出APP才能让其停止工作。 2),动态注册:在代码中注册,不需要在Androidmanifest进行声明,其生命周期随着活

www121104115的博客 596

Android四大组件简述之BroadcastReceiver

BroadcastReceiver详细介绍:http://developer.android.com/reference/android/content/BroadcastReceiver.html

Ricky 2000

Android四大组件之Service、ContentProvider、BroadcastReceiver

文章目录Service生命周期IntentService关于startService和bindServiceAndroidManifest.xml本地Service和远程Service关于bindService的特点Content ProviderBroadcast Receiver分类注册 Service Service 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。 生命周期 ...

PdKingLiu 1015
上一篇: linux内核剖析-信号量
下一篇: 安卓笔记之SharedPreference
kevin@1024
博客等级 码龄11年 677粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kevin@1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值