1、标准广播:是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎会在同一时刻接收到这条广播信息,它们之间没有先后顺序。效率高、无法被截断。

2、有序广播:是一种同步执行的广播,在广播发出后,同一时刻只会有一个广播接收器能够接收到这条广播,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。

  这种广播有先后顺序,优先级高的广播接收器就可以先接收到广播,并且前面的广播接收器可以截断正在传播的广播。

3、动态注册广播:在主代码中直接注册。

4、创建广播接收器:新建一个类,让它继承自BroadcastReceiver,并重写父类的onReceive()方法。有广播到来时,onReceive()方法中就会得到执行,具体逻辑就写在这个方法中。

5、在onCreate()方法中使用registerReceiver(BroadcastReceiver receiver, IntentFilter filter) 方法进行动态注册,第一个参数传入创建的类的实例,第二个参数传入IntentFilter的实例。

6、下面的代码实现网络状态的监听:

public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); //action中的值是要监听的系统广播
networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver,intentFilter); //用registerReceiver()方法进行注册,分别传入自定义类的实例和意图实例
} //动态注册的广播接收器一定要取消注册,使用unregisterReceiver()方法取消注册
protected void onDestory(){
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}
//自定义一个类继承自BroadcastReceiver,并重写他的onReceive()方法
class NetworkChangeReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent){
Toast.makeText(context,"network changes",Toast.LENGTH_SHORT).show();
       }
  }
}

7、最后要在AndroidManifest.xml中声明权限,否则程序会直接崩溃。注意:中间那行才是申请权限,

   package="example.com.broadcasttest">

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

    <application> </application>

8、模拟器的API要大于等于24才能运行以上代码。仔细、仔细、仔细!!!!千万不要写错单词


9、静态注册广播:在AndroidManifest中注册,不必启动程序就能实现接收广播。

10、以下代码实现接收开机广播:在包名上右键,New—Other—Broadcast Receiver,更改广播接收器的名字,勾选Exported和Enabled。这两个属性分别代表广播接收器接收本程序意外的广播和是否启用这个广播接收器。

package example.com.broadcasttest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast; public class BootCompleteReceiver extends BroadcastReceiver { @Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"Boot Complete",Toast.LENGTH_SHORT).show();
}
}
   <!--应用可以监听该广播,成为自启动权限,但是会拖慢开机速度-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>   。。。。。。。。。。。     <receiver
android:name=".BootCompleteReceiver"
android:enabled="true"
android:exported="true">
<!--由于系统启动后会发出一条值为"android.intent.action.BOOT_COMPLETED"的广播,所以在下面的标签中添加了action-->
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>

10、onReceive()方法中写需要实现的逻辑,但是不要在这方法中写太多逻辑或者进行任何耗时的操作,因为广播接收器中是不允许开启线程的,当方法中运行了较长时间而没有结束,程序就会报错。

Android 接收系统广播(动态和静态)的更多相关文章

  1. Android接收系统广播

    Android内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到各种系统的状态信息.比如手机开机完成后会发出一条广播,电池的电量发生变化会发出一条广播,时间或时区发生改变也会发出一条 ...

  2. android: 接收系统广播

    Android 内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到 各种系统的状态信息.比如手机开机完成后会发出一条广播,电池的电量发生变化会发出一 条广播,时间或时区发生改变也会发 ...

  3. Android开发之接收系统广播消息

    BroadcastReceiver除了接收用户所发送的广播消息之外.另一个重要的用途:接收系统广播. 假设应用须要在系统特定时刻运行某些操作,就能够通过监听系统广播来实现.Android的大量系统事件 ...

  4. android接收短信——framework处理流程(android 5.1)

    modem层不懂,所以直接从RIL.java开始.以电信卡接收短信为例 modem通知RIL.java中的 RILReceiver处理接收信息 class RILReceiver implements ...

  5. Android接收短信

    Android收到短信时会广播android.provider.Telephony.SMS_RECEIVED消息,因此只要定义一个Receiver,收听该消息,就能接收短信. <receiver ...

  6. android: 接收和发送短信

    8.2    接收和发送短信 收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这 项功能,而 Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.每个 A ...

  7. Android常用系统广播

    关于Intent的使用,可参阅前章:http://www.cnblogs.com/caidupingblogs/p/5101669.html //关闭或打开飞行模式时的广播 Intent.ACTION ...

  8. Android 接收短信

    启动程序时启动一个service,在service里注册接收短信的广播,当手机收到短信里,打印出短信内容跟电话号码. package com.lmy.SmsListener; import andro ...

  9. Android接收wifi路由器发送过来的一组字节数据

    1.字节数组转换为字符串 byte[] byBuffer = new byte[20];... ...String strRead = new String(byBuffer);strRead = S ...

随机推荐

  1. Python核心编程 | 浅谈闭包的使用

    1.函数的引用   >>> def test(): print('test:') >>> test <function test at 0x10ffad488 ...

  2. MongoDB 日志切割三种方式

    MongoDB 日志切割 ​ MongoDB 默认是不会进行切割日志的,除非我们配置了 logRotate = rename,并且重启 MongoDB 服务,才会进行切割日志的,那么为了避免实际中我们 ...

  3. Spring Cloud简介

    一.本文介绍 Web应用由最早的单体应用发展成为集群式的部署,再到现在的分布式系统.尤其是这两年分布式相关的技术发展的很快,一方面是以Dubbo为代表的,另一方面则是以Spring Cloud系列为代 ...

  4. synchronized锁住的是代码还是对象

    不同的对象 public class Sync { public synchronized void test() { System.out.println("test start" ...

  5. [JZOJ5837] Omeed

    Description Solution 有两种做法 一种是线段树维护一次方程系数,一种是线段树维护矩阵 准备都写一写 维护系数 首先把式子推出来 \[CS=B\times \sum\limits_{ ...

  6. 清除电脑垃圾.bat

    echo.title delete cachecolor 0aecho.echo please enter any key start.....@echo offecho execuing delet ...

  7. iis 站点中文乱码 解决方案

    问题描述:iis乱码问题 1:在vs里开发没问题,发布后用发布文件替换iis文件没问题,但是如果用fis3发布后导致iis站点访问时出现部分中文乱码 原理:文件编码格式不统一 解决方案: 四个步骤解决 ...

  8. 解析<button>和<input type="button"> 的区别

    一.定义和用法 <button> 标签定义的是一个按钮. 在 button 元素内部,可以放置文本或图像.这是<button>与使用 input 元素创建的按钮的不同之处. 二 ...

  9. WEB服务器、HTTP服务器、应用服务器、IIS

    转载:https://www.cnblogs.com/brant/p/7209042.html Web服务器: 基本功能就是提供Web信息浏览服务.它只需支持HTTP协议.HTML文档格式及URL.与 ...

  10. 2018-01-15 Antlr4: 修改语法规则更接近普通BNF格式

    经 @沈默 在上文Antlr4添加中文变量赋求值,括号,各种问题评论中指出, 语法规则描述依赖于Antlr4生成的语法分析器的默认分析方法, 比如运算符的左联系, 以及优先级处理等等. 于是将语法修改 ...