Android学习笔记-广播机制的一些简单实例

uniapp和安卓的广播发布和接收机制 背景:app需要监听第三方app的广播获取应用凭证和用户凭证简介:广播注册主要分静态广播注册和动态广播注册,由于静态广播注册需要修改AndroidManifest.xml,所以uniapp上就没有采用静态注册。本人主要是参考安卓的广播机制,来实现uniapp的原生写法的广播机制(动态广播)。动态注册广播:它跟随 Activity 的生命周期。需要在 Activity 结束前,移除广播接收器。静态注册广播:当应用程序关闭后,如果有广播过来,程序也会被系统调用自动运行。... 阅读详情

广播

在广播实例开始之前先抛出一些关于广播的概念

  • 广播的概念
    • 现实:电台通过发送广播发布消息,买个收音机,就能收听
    • Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件。
      Android系统在运行的过程中,会产生很多事件,比如开机、电量改变、收发短信、拨打电话、屏幕解锁

广播的两种类型

  • 无序广播:所有跟广播的intent匹配的广播接收者都可以收到该广播,并且是没有先后顺序(同时收到)
  • 有序广播:所有跟广播的intent匹配的广播接收者都可以收到该广播,但是会按照广播接收者的优先级来决定接收的先后顺序
    • 优先级的定义:-1000~1000
    • 最终接收者:所有广播接收者都接收到广播之后,它才接收,并且一定会接收
    • abortBroadCast:阻止其他接收者接收这条广播,类似拦截,只有有序广播可以被拦截

IP拨号器

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

  • 定义广播接收者接收打电话广播
    public class CallReceiver extends BroadcastReceiver {

        //当广播接收者接收到广播时,此方法会调用
        @Override
        public void onReceive(Context context, Intent intent) {
            //拿到用户拨打的号码
            String number = getResultData();
            //修改广播内的号码
            setResultData("17951" + number);
        }
    }
  • 在清单文件中定义该广播接收者接收的广播类型
        <receiver android:name="com.dimon.ipdialer.CallReceiver">
            <intent-filter >
                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
            </intent-filter>
        </receiver>
  • 接收打电话广播需要权限
        <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
  • 即使广播接收者的进程没有启动,当系统发送的广播可以被该接收者接收时,系统会自动启动该接收者所在的进程

短信拦截器

系统收到短信时会产生一条广播,广播中包含了短信的号码和内容

  • 定义广播接收者接收短信广播
        public void onReceive(Context context, Intent intent) {
        //拿到广播里携带的短信内容
        Bundle bundle = intent.getExtras();
        Object[] objects = (Object[]) bundle.get("pdus");
        for(Object ob : objects ){
            //通过object对象创建一个短信对象
            SmsMessage sms = SmsMessage.createFromPdu((byte[])ob);
            System.out.println(sms.getMessageBody());
            System.out.println(sms.getOriginatingAddress());
        }
    }
  • 系统创建广播时,把短信存放到一个数组,然后把数据以pdus为key存入bundle,再把bundle存入intent
  • 清单文件中配置广播接收者接收的广播类型,注意要设置优先级属性,要保证优先级高于短信应用,才可以实现拦截
        <receiver android:name="com.itheima.smslistener.SmsReceiver">
            <intent-filter android:priority="1000">
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>
  • 添加权限
        <uses-permission android:name="android.permission.RECEIVE_SMS"/>
  • 4.0以后广播接收者安装以后必须手动启动一次,否则不生效
  • 4.0以后广播接收者如果被手动关闭,就不会再启动了

监听SD卡状态

  • 清单文件中定义广播接收者接收的类型,监听SD卡常见的三种状态,所以广播接收者需要接收三种广播
         <receiver android:name="com.dimon.sdcradlistener.SDCardReceiver">
            <intent-filter >
                <action android:name="android.intent.action.MEDIA_MOUNTED"/>
                <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
                <action android:name="android.intent.action.MEDIA_REMOVED"/>
                <data android:scheme="file"/>
            </intent-filter>
        </receiver>
  • 广播接收者的定义
        public class SDCardReceiver extends BroadcastReceiver {
            @Override
            public void onReceive(Context context, Intent intent) {
                // 区分接收到的是哪个广播
                String action = intent.getAction();

                if(action.equals("android.intent.action.MEDIA_MOUNTED")){
                    System.out.println("sd卡就绪");
                }
                else if(action.equals("android.intent.action.MEDIA_UNMOUNTED")){
                    System.out.println("sd卡被移除");
                }
                else if(action.equals("android.intent.action.MEDIA_REMOVED")){
                    System.out.println("sd卡被拔出");
                }
            }
        }

勒索软件

  • 接收开机广播,在广播接收者中启动勒索的Activity
  • 清单文件中配置接收开机广播
        <receiver android:name="com.dimon.lesuo.BootReceiver">
            <intent-filter >
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
  • 权限
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
  • 定义广播接收者
        @Override
        public void onReceive(Context context, Intent intent) {
            //开机的时候就启动勒索软件
            Intent it = new Intent(context, MainActivity.class);
            context.startActivity(it);
        }
  • 以上代码还不能启动MainActivity,因为广播接收者的启动,并不会创建任务栈,那么没有任务栈,就无法启动activity
  • 手动设置创建新任务栈的flag
        it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

监听应用的安装、卸载、更新

原理:应用在安装卸载更新时,系统会发送广播,广播里会携带应用的包名

  • 清单文件定义广播接收者接收的类型,因为要监听应用的三个动作,所以需要接收三种广播
<receiver android:name="com.dimon.app.AppReceiver">
            <intent-filter >
                <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>
  • 广播接收者的定义
        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 + "被卸载了");
            }
        }

Android 广播机制实例 BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。 在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。 Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。下面我们就对BroadcastReceiver逐一地分析和演练,了解和掌握它的各种功能和用法。 首先,我们来演示一下创建一个BroadcastReceiver,并让这个BroadcastReceiver能够根据我们的需要来运行。 立即下载

相关推荐

android 广播实例,可以收发

Android broadcast的使用,能广播数据,同时也能接受。并能改变控件的内容,值得参考

android 广播使用demo,Android广播Broadcast的学习(附demo)

广播是Android中一种很重要的传递消息的方式。这里简单介绍下广播的使用。1. 发送广播类似于startActivity,我们需要定义一个Intent,通过Intent来传递我们需要传递的值。最后使用sendBroadcast方法发送广播。Intent i = new Intent(ACTION);i.putExtra("message","收到广播");sendBroadcast(i);2. ...

weixin_42551227的博客 487

android广播简单使用

编译成功的一个android广播简单使用小demo

Android 广播实例汇总-普通广播 有序广播及静态注册、动态注册详解附源码讲解

Android 广播实例汇总-普通广播 有序广播及静态注册、动态注册详解附源码讲解

fancynthia的博客 4660

activity service broadcast 单例模式 的综合使用

在Android开发中很少有activity service broadcast 单例的综合使用,我写的这个例子已经能运行了希望能和大家交流学习

android广播接收例子

android广播接收例子

Android广播常用案例

ip拨号器 以拨打电话广播接收为例介绍步骤: 1. 定义一个类 继承 BroadCastReceiver ,并重写onReceive函数 2. 在清单文件注册广播接收 Receiver   action               3. 广播事件到来之后就会执行onReceive 注意:即使广播接收者没有运行,当广播消息到达的时候,系统会自动启动广播接收者的进程

Barry的博客 3089

Python-Opencv中的膨胀和腐蚀

Python-Opencv中的膨胀和腐蚀 腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。 膨胀就是图像中的高亮部分进行膨胀,“邻域扩张”,效果图拥有比原图更大的高亮区域。腐蚀就是原图中高亮部分被腐蚀,“邻域被蚕食”,效果图拥有比原图更小的高亮区域。 1.膨胀 膨胀过程是有一个结构元素或者模板去在原图像素比对,当比对过程中,中心像素位置的值根据其八邻域取或运算,或运算为1就取自己的中心值,...

qq_44262417的博客 1万+

Android四大组件————广播简单案例

Android广播基本写法

qq_41008818的博客 978

配置思科交换机冗余链路汇聚

本文对交换机端口汇聚配置进行说明

istrangeboy&begin zero的博客 6684

学术版GPT安装教程——保姆版(附带原生GPT注册教程)

学术版GPT图文安装教程

DBenD的博客 2万+

Android案例(广播)

adroid案例(广播)

m0_51908635的博客 1223

C语言的文件读取与写入操作

学了一年的C语言了,现在回过头来做一下总结。并且博客开了挺长一段时间却没有谢什么实际的东西。现在做下总结,对之后的学习帮助应该挺大的。与大家共勉! 现在,我先来介绍一下C语言的文件读取与写入的原理和具体操作方法。 C语言文件读取与写入是通过将文件看成一个字符序列进行读入和写出的。所以读取与写入文件就用到了指针,而这个指针是一个特殊的指针,我们称为文件指针。 指针名称是

wzyxdwll的博客 3万+

Android:安卓学习笔记之广播机制的简单理解和使用

广播机制的简单理解和使用广播机制广播简介广播分为两大类1.标准广播(Normal broadcasts)2.有序广播(Ordered broadcasts)注册方式静态注册广播动态注册广播两种注册各有什么优缺点发送无序广播发送有序广播常见问题1、怎样设置有序广播的接收顺序呢?2、前面的广播接收器怎样截断正在传递的广播呢?3、BrocastReceiver 里可不可以执行耗时操作4、BroadcastReceiver,LocalBroadcastManager 区别5、如何通过广播拦截和 abort 一条短信

JMW1407的博客 3936

用ADSP-21569+SigmaStudio打造音频处理系统:从硬件连接到实时调参实战

本文详细介绍了如何利用ADSP-21569 DSP芯片和SigmaStudio图形化编程工具构建高性能音频处理系统。从硬件接口配置、信号流设计到实时参数调试,提供工业级开发中的实用技巧,包括低延迟优化、动态参数插值等关键技术,帮助开发者快速实现专业音频处理方案。

9o8p7i6u5y的博客 979

如何构建智能聊天系统

聊天分为听、思考、读,简单的通过ASR、LLM、TTS三类模型的组合可以实现,最近openai推出支持多模态的GPT-4o模型,可以把三个模型真正融合成在一起。现在市面上的模型百花齐放,各有所长。要实现可落地的方案,需要结合业务,验证模型效果,同时也要考虑方案的可行性,有些模型在国内能用,有些在国内不能用。

xsgnzb的专栏 2107

安卓广播机制讲解(标准广播和有序广播)

安卓广播机制讲解 广播分为标准广播和有序广播 标准广播(Normal broadcasts)是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。标准广播的工作流程如图所示。 有序广播(Ordered broadcasts )则是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以此时

天行健 君子以自强不息,地势坤 君子以厚德载物。 5131

Android 15.0 首次开机默认授予app运行时权限(去掉运行时授权弹窗)

在15.0的系统rom产品定制化开发中,在6.0以后对于权限的申请,都需要动态申请,所以会在系统首次启动后,在app的首次运行时, 会弹出授权窗口,会让用户手动授予app运行时权限,在由于系统产品开发需要要求默认授予app运行时权限,不需要用户默认授予运行时弹窗,所以需要在首次开机默认授予所有app运行时权限

安卓兼职framework和app工程师的博客 1204

Android Studio学习笔记——广播机制Broadcast

安卓每个应用程序都可以对自己感兴趣的广播进行注册,要该程序就只会接收到自己所关心的广播内容。这些广播可能是来自于系统的,也可能是来自于其他应用。安卓提供了一套完整的API,允许应用程序自由的发送和接收广播。安卓中的广播主要可以分为两种类型:标准广播和有序广播。标准广播Normal broadcasts是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播信息。他们之间没有任何先后顺序。这种广播效率会比较高。但同时也意味着他是无法被截断的。

我的的博客 3041

3D医学影像开发入门<一>:VS2019+DCMTK3.6.8编译及环境配置

3D医学影像开发入门:VS2019+DCMTK3.6.8编译及环境配置

欧特GO 1306

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Android】广播机制

在Android中,广播(Broadcast)是一种消息,任何应用程序都可以发送广播消息,任何应用程序也都可以接收广播消息。广播通常用于通知应用程序某些事件的发生,比如系统启动、电量低、网络状态改变等。Broadcast Receiver(广播接收器):用于接收广播消息并响应这些消息的组件。Intent(意图):用于传递广播消息的数据结构。标准广播(Normal Broadcast)是完全异步的,所有接收器几乎同时接收广播,并且接收顺序是不确定的。

2301_79977698的博客 1667

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

安卓源码:广播机制

在Android系统中,广播(BroadCast)是组件之间传播数据(Intent)的一种机制;这些组件甚至是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用.BroadcastReceiver也有自己独立的生命周期,但是它又和Activity、Service不同。在发送广播时,可以通过设置属性来将广播定义为前台广播,如果未定义,默认为后台广播。1.广播接受者的生命周期是非常短暂的,在接受到广播的时候创建,onReceive()方法结束后销毁。............

mike_jun的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android学习笔记——广播机制

Android广播机制 为了便于进行系统级别的消息通知,Android引入了一套广播消息机制。 Android中的广播机制十分灵活,每个程序都可以对自己感兴趣的广播进行注册。程序只会接收自己所关心的广播内容,这些广播内容可能来自系统,也可能来自其他应用程序。 发送广播:Intent;接收广播:广播接收器(Broadcast Receiver)。 广播类型分为两种:标准广播和有序广播 标准广播Normal broadcasts:一种完全异步执行的广播。广播发出后,所有广播接收器同一时刻接收到广播消息。 特点

Miller_6的博客 3780

探秘安卓广播:揭秘Android广播机制的神奇之处

当系统提供的广播不能满足实际需求时,可以自定义广播,同时需要编写对应的广播接收者。当自定义广播发送消息时,会储存到公共消息区中,而公共消息区中如果存在对应的广播接收者,就会及时的接收这条信息。

缘友一世的博客 1439

Android中的广播机制

在网络通信中,会规定一个IP网络范围,最大的IP地址是被保留作为广播地址来使用的。比如某个网络的IP范围是192.168.0.XXX,子网掩码是255.255.255.0,那么这个网络的广播地址就是192.168.0.255。广播数据包会被发送到同一网络上的所有端口,这样该网络中的每台主机都会收到这条广播。 为了便于进行系统级别的消息通知,Android也引入了一套类似的广播消息机制。 1 广播机制简介 Android中的广播机制更加灵活,这是因为Android中的每个应用程序都可以对自己感兴趣的广播进行注

xingyu19911016的博客 3008

详解Android广播机制

谨以文章记录学习历程,如有错误还请指明。 前言 我们上学时都有过这样的经历,当我们在火车站列车候车室中等待时,每当有某次列车开始检票或者进站上车时,就会播放通知来告知在候车室等待的人们该消息。 为了便于进行系统级别的消息通知,Android引入了一套类似的广播机制,然而比上述情景要灵活得多。此文将对Android广播机制的方方面面做出详尽的介绍。 Android广播机...

whdAlive 's blog 5397
上一篇: Android学习笔记-广播机制
下一篇: Android学习笔记-网络编程
朴哲
博客等级 码龄11年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值