BroadCastReceiver,BroadCast 广播

安卓广播代码 主要讲述了如何进行android中broadcast的开发的案例! 立即下载

广播的介绍

在这里插入图片描述

广播作用以及机制

其实BroadcastReceiver就是应用程序间的全局大喇叭,即通信的一个手段, 系统自己在很多时候都会发送广播,比如电量低或者充足,刚启动完,插入耳机,输入法改变等, 发生这些时间,系统都会发送广播,这个叫系统广播,每个APP都会收到,如果你想让你的应用在接收到 这个广播的时候做一些操作,比如:系统开机后,偷偷后台跑服务哈哈,这个时候你只需要为你的应用 注册一个用于监视开机的BroadcastReceiver,当接收到开机广播就做写偷偷摸摸的勾当~ 当然我们也可以自己发广播,比如:接到服务端推送信息,用户在别处登录,然后应该强制用户下线回到 登陆界面,并提示在别处登录当然,这些等下都会写一个简单的示例帮大家了解广播给我们带来的好处.

项目中广播使用

BroadCastReceiver广播接受者,安卓四大组件之一

广播三要素:
(1)广播发送者 : 发送广播
(2)广播接收者(调频): 用于接收广播
(3)要处理的事情 :处理广播的相关信息, Intent有图对象
广播的使用场景:
(1)同一APP下多个组件之间传递数据(Activity/Fragment/Service之间传递数据)
(2)2个APP之间传递数据
技能get点:
(1)自定义广播接受者
(2)使用广播接受者进行电话拦截和短信拦截和系统电量的变化

广播生命周期

静态注册和动态注册的区别:假如说Activity是接受者:
动态注册:
(1)广播会跟Activity的生命周期的结束而结束;
(2)自由的控制注册和取消,有很大的灵活性
静态注册:
(1)广播不会跟随Activity的生命周期的结束而结束,一直存在,即使应用程序关闭,也会被唤醒接受广播
(2)全局的广播

广播的分类

无序广播发送 (也叫标准广播)

有序广播发送

在这里插入图片描述

如何实现广播

1,先创建一个广播,写一个类继承BroadcastReceiver即可

package com.example.day12;

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
      
    }
}

2,注册一个广播

静态广播注册

在这里插入图片描述
在清单文件中注册广播就是静态的

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.day12">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        
        <!--我是一个广播-->
        <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.feng.broad"></action>
            </intent-filter>
        </receiver>
		<!--广播结束-->
		
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

动态广播注册

在这里插入图片描述

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 private Button sendId;
 private  MyReceiver myReceiver;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);

     sendId = findViewById(R.id.send_id);
     sendId.setOnClickListener(this);
     //1,创建一个广播
     myReceiver = new MyReceiver();
     //添加广播过滤器
     IntentFilter intentFilter = new IntentFilter();
     //添加action
     intentFilter.addAction(BroadcastConst.ACTION);
     //注册
     registerReceiver(myReceiver,intentFilter);
 }

 @Override
 protected void onDestroy() {
     super.onDestroy();
     //注销广播
     unregisterReceiver(myReceiver);
 }
}

发送一个无序广播

 Intent intent = new Intent();
     intent.setAction("com.feng.broad");
     Bundle bundle = new Bundle();
     bundle.putInt("msg",123);
     intent.putExtras(bundle);
     sendBroadcast(intent);

发送一个有序广播

 Intent intent1 = new Intent();
 intent1.setAction("com.feng.broad");
 //第一个参数是intent 二是权限名.
 sendOrderedBroadcast(intent1,null);

完整的代码如下
1,清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.day12">

   <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:roundIcon="@mipmap/ic_launcher_round"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">
       <receiver
           android:name=".MyReceiver2"
           android:enabled="true"
           android:exported="true">
           <intent-filter android:priority="1000">
               <action android:name="com.feng.broad"></action>
           </intent-filter>

       </receiver>
       <receiver
           android:name=".MyReceiver"
           android:enabled="true"
           android:exported="true">
           <intent-filter android:priority="900">
               <action android:name="com.feng.broad" />
           </intent-filter>
       </receiver>

       <activity android:name=".MainActivity">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>

</manifest>

java代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button sendId;
    private  MyReceiver myReceiver;
    private Button sendOrderId;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        sendOrderId = findViewById(R.id.send_order_id);
        sendOrderId.setOnClickListener(this);
        sendId = findViewById(R.id.send_id);
        sendId.setOnClickListener(this);
        //1,创建一个广播
//        myReceiver = new MyReceiver();
//        //添加广播过滤器
//        IntentFilter intentFilter = new IntentFilter();
//        //添加action
//        intentFilter.addAction(BroadcastConst.ACTION);
//        //注册
//        registerReceiver(myReceiver,intentFilter);


    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id) {
            case R.id.send_id:
                Intent intent = new Intent();
                intent.setAction("com.feng.broad");
                Bundle bundle = new Bundle();
                bundle.putInt("msg",123);
                intent.putExtras(bundle);
                sendBroadcast(intent);
                break;

            case R.id.send_order_id:
                Intent intent1 = new Intent();
                intent1.setAction("com.feng.broad");
                sendOrderedBroadcast(intent1,null);
                break;

            default:
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //注销广播
        unregisterReceiver(myReceiver);
    }
}

3,第一个广播

public class MyReceiver extends BroadcastReceiver {

   private static final String TAG = "MyReceiver";
   @Override
   public void onReceive(Context context, Intent intent) {
       //TODO 1:获取action
       String action = intent.getAction();
       if(BroadcastConst.ACTION.equals(action)){
//            Bundle extras = intent.getExtras();
//            int msg = extras.getInt("msg");
           Log.i(TAG, "onReceive: ");
       }
   }
}

第二个广播

public class MyReceiver2 extends BroadcastReceiver {
   private static final String TAG = "MyReceiver2";
   @Override
   public void onReceive(Context context, Intent intent) {
       String action = intent.getAction();
       if(action.equals("com.feng.broad")){

           Log.i(TAG, "onReceive: +++");
           //判断是不是有序广播
           if(isOrderedBroadcast()){
           //中断一个广播
               abortBroadcast();
           }
       }
   }
}

系统广播

安卓常用系统广播
https://blog.youkuaiyun.com/cc_want/article/details/82344899

接收系统广播

静态接收系统锁屏广播

系统在某些时候会发送相应的系统广播,下面我们就来让我们的APP接收系统广播, 接收之前,还需要为我们的APP注册广播接收器哦!而注册的方法又分为以下两种:动态与静态!

public class ScreenReceiver extends BroadcastReceiver {
   private static final String TAG = "ScreenReceiver";
   @Override
   public void onReceive(Context context, Intent intent) {
       Log.i(TAG, "onReceive: ------");
       String action = intent.getAction();
       if(Intent.ACTION_SCREEN_ON.equals(action)){ //不能用
           Log.i(TAG, "onReceive: 亮了");
       }else if(Intent.ACTION_SCREEN_OFF.equals(action)){//不能用
           Log.i(TAG, "onReceive: 暗了");
       }else if (Intent.ACTION_USER_PRESENT.equals(action)){
           Log.i(TAG, "onReceive: 唤醒了");
       }else if(Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(action)){
           Log.i(TAG, "onReceive: 飞行了");
       }
   }
}

清单文件中注册*

<receiver
           android:name=".ScreenReceiver"
           android:enabled="true"
           android:exported="true">
           <intent-filter android:priority="1000">
               <action android:name="android.intent.action.SCREEN_ON"></action>
               <action android:name="android.intent.action.SCREEN_OFF"></action>
               <action android:name="android.intent.action.USER_PRESENT"></action>
               <action android:name="android.intent.action.AIRPLANE_MODE"></action>
           </intent-filter>
       </receiver>

使用注意事项

不要在广播里添加过多逻辑或者进行任何耗时操作,因为在广播中是不允许开辟线程的, 当onReceiver( )方法运行较长时间(超过10秒)还没有结束的话,那么程序会报错(ANR), 广播更多的时候扮演的是一个打开其他组件的角色,比如启动Service,Notification提示, Activity等!

自定义广播

过滤器就是(intent-filter)
在这里插入图片描述

BroadcastReceiver 广播和通知 BroadcastReceiver是全局|系统级别的监听器 Notification和NotificationManager是局部|程序级别的监听器,可以实现可视化的信息显示,通过它在设备状态栏上显示广播信息的内容以及图标和震动等信息 立即下载

相关推荐

Android Studio—自定义广播.zip

参考博客:https://blog.youkuaiyun.com/Da_Xiong000/article/details/105326901

Android初学之十二:Broadcast

一、注册广播的方式 动态注册:在代码中;静态注册:在清单文件中 如何创建一个广播接收器呢? 答:新建一个类,让它继承BroadcastReceiver,并重写父类的onReceiver()方法就行了,这样当有广播到来时,onReceicer()方法就会得到执行,具体的逻辑就可以在这个方法中处理。 举例:动态注册编写一个监听网络变化的程序 提醒网络变化还不够人行话,希望能准确告知用户当前是有网还是无网,我们进行对上面的代码进行优化 ...

My_Yes的博客 559

招财牛猫|股社区|猫笔刀公众号历史文章13-21年(含评论),投资内容 收藏学习

招财大牛猫|股社区|猫笔刀公主号历史文章13-21年(含评论)

ZhaoCaiDaNiuMao的博客 7236

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

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

shuai_ge_feng的博客 1574

自建邮局服务器| 批量邮件群发系统PowerMTA+oem(mumara,mailwizz, interspire)

世界顶级自建邮局服务器PowerMTA+oem(mumara,mailwizz, interspire) PowerMTA4.5(最好用的 群发邮件软件)是用于大批量多ip开发的邮件传递邮寄。可按每小时发送数近百万条电子邮件,发送IP地址和域可以详细配置,加上目前流行前端oem,mumara,mailwizz, interspire等,可定时发送,定时重复发送,实现全自动化 邮件群发 方案。 官网(powermta4.5下载) https://www.sparkpost.com/powermta/ 使用Po

ytrsexpo的博客 6503

各种加法器的比对分析与Verilog实现(3)

了Kogge-Stone加法器和brent-kung加法器,本文将用Verilog代码进行实现。

Albert_yeager的博客 1198

基础总结篇之五:BroadcastReceiver应用详解

問渠那得清如許?為有源頭活水來。南宋.朱熹《觀書有感》 据说程序员是最爱学习的群体,IT男都知道,这个行业日新月异,必须不断地学习新知识,不断地为自己注入新鲜的血液,才能使自己跟上技术的步伐。 今天我们来讲一下Android中BroadcastReceiver的相关知识。 BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。 在An...

t225com 774

STM32实现webserver显示数据及配置参数

其实提到的将fsdata.c重命名为fsdata_custom.c,可以不重命令,将/LWIP/Target/lwipopts.h中HTTPD_USE_CUSTOM_FSDATA 定义为0,这样HTTPD_FSDATA_FILE将使用fsdata.c,避免每次生成fsdata.c需要重命令的麻烦。2、登录成功后,板卡根据板卡配置类型,返回对应的数据页面,该页面可实现数据校准、清零,以及进行到板卡参数设置页面。目前还未实现post功能以及http身份验证功能。3、板卡参数设置页面。

2693

broadcastreceiver全面详解

目录     1. 定义 即 广播,是一个全局的监听器,属于Android四大组件之一 Android 广播分为两个角色:广播发送者、广播接收者 2. 作用 监听 / 接收 应用 App 发出的广播消息,并 做出响应 3. 应用场景 Android不同组件间的通信(含 :应用内 / 不同应用之间) 多线程通信 与 Android 系统在特定情况下的通信 如:电话呼入时...

zyz18813049204的博客 4510

面向高速Serdes的信号完整性优化:从封装 - 板级互连局限到封装内互连技术演进(一)

本文针对高速SerDes互连链路中的关键电磁效应展开研究:1)揭示了封装-主板互连结构在毫米波频段易激发谐振效应,导致53GHz传输陷波和阻抗偏移;2)提出基于本征模分析的谐振抑制方法,通过优化接地过孔排布使带宽突破95GHz;3)系统比较了方形/六边形BGA排布下23种差分对朝向的串扰特性,证实六边形阵列可将功率和串扰降低30%以上;4)论证了100GHz以上带宽需采用封装内互连架构,其较传统方案减少50%阻抗不连续节点。

小孟同学的博客 231

zemax---光学设计基础概念篇(持续更新中)

光学设计相关知识概念

u011699626的博客 1145

Android基础 - BroadcastReceiver全面解析

简介 BroadcastReceiver,同样是Android四大组件之一,有两个重要角色:广播发布者、广播接受者。 使用场景及作用 作用 用于接受或者监听应用发出来的广播,并作出相应的响应。 使用场景 用于不同组件间的通信,包括应用内和不同应用间的交互通信。 监听系统资源的变化,如网络变化、SD卡状态等 多进程的通信 实现原理 是典型观察者模式的应用,基于消息发布...

学习,思考,输出 3096

Uncaught ReferenceError: process is not defined

这个错误 Uncaught ReferenceError: process is not defined 通常出现在浏览器环境中,因为 process 是 Node.js 环境的内置对象,并不是浏览器原生支持的。因此,浏览器无法识别 process,导致该错误。在App.vue中加上以下代码就能够有效解决。

猿小白的博客 1740

Android之Broadcast, BroadcastReceiver(广播)

Android之Broadcast, BroadcastReceiver(广播) 在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver 活动(Activity) - 用于表现功能 服务(Service) - 相当于后台运行的 Activity 广播(Broadcast) - 用于发送广播 广播接收器(Broad

奥特曼超人的博客专栏 2030

OpenCV实现物体尺寸的测量

物体尺寸测量的思路是找一个确定尺寸的物体作为参照物,根据已知的计算未知物体尺寸。如下图所示,绿色的板子尺寸为220*300(单位:毫米),通过程序计算白色纸片的长度。

qq_53545309的博客 9157

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Broadcast(广播)和BroadcastReceiver(广播接收器)

BroadcastReceiver 简介 广播接收者( BroadcastReceiver )用于接收广播 Intent ,广播 Intent 的发送是通过调用Context.sendBroadcast() 、 Context.sendOrderedBroadcast() 、 Context.sendStickyBroadcast() 和来实现的。通常一个广播 Intent 可以被订阅了此

Abel Joo 尘归尘,土归土。 8398

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android广播:Broadcast与BroadcastReceiver

一、广播简介 1. 广播传播机制:   广播接收器,也被称为全局事件,或系统事件。   当Android系统中任何程序有动作时,如果想通知其他程序,采用广播的方式进行传播是非常有效的。广播从理论上说,可以将一个动作传播给任意多个程序(当然,广播接收器的数量会收到系统限制)。   在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广

sq19920518的博客 983

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

android 广播机制Broadcast、BroadcastReceiver用法解读

一、广播机制     在android系统中,发生的事情是可以被广播出去的。这就好像是微博。我发布一条消息,没加我关注的就不能看见,而我只能看见我加关注的消息,但是无论怎样消息都产生了。这就是广播机制。这个过程中一共有两个部分,即消息的发送和消息的接收。 二、收发消息的方式

阿修罗道 4519
上一篇: Android常用系统广播
下一篇: OkHttp及封装
杨忆楠
博客等级 码龄7年 1粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值