(以下内容是阅读郭霖大神的《第一行代码》后自己总结的)

1、概述

广播是Android的四大组件之一。

Android的广播机制十分灵活。

2、发送广播

如上图Android的广播主要分为两类:标准广播和有序广播。

所有的广播接收器都可以接收到标准广播,而且他们的接收几乎是在同一时刻。这意味着标准广播的效率很高,但无法被截断。

在接收有序广播时,广播接收器是由先后顺序的,优先级高的接收器先接收到广播,并且有权对该广播截断,不让后续接收器接收到。

发送标准广播和有序广播的方式非常简单。

//发送标准广播
sendBroadcast.setOnClickListener(new View.onClickListener(){ @Override
public void onClick(View v){
Intent intent = new Intent("com.example.broadcastTest.MY_BROADCAST");
sendBroadcast(intent);
}
});
//发送有序广播
sendBroadcast.setOnClickListener(new View.onClickListener(){ @Override
public void onClick(View v){
Intent intent = new Intent("com.example.broadcastTest.MY_BROADCAST");
sendOrderedBroadcast(intent,null);
}
});

下图是Android API中对sendBroadcast()和sendOrderedBroadcast()的注解。

3、接收广播

当然,发送广播后没有接收器也是白搭。

3.1 创建接收器

创建广播接收器很简单,只需要新建一个类,让它继承BroadcastReceiver,并重写父类中的onReceive()方法就可以了。

//创建一个广播接收器
public class NetworkChangeReceiver extends BroadcastReceiver{ @Override
public void onReceive(Context context,Intent intent){
Toast.makeText(context,"Network change !",
Toast.LENGTH_SHORT).show();
} }

3.2 注册广播接收器

当然,只创建广播接收器是没有用的。广播接收器还需要注册,表示它能够接收到哪种广播。

接收器的注册分为动态注册和静态注册。

动态注册则是在代码中完成注册。静态注册是在AndroidManifest.xml中注册。

3.2.1 动态注册

动态注册的广播需要程序启动才能开始接收广播。

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter(); //
  intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//
networkChangeReceiver = new NetworkChangeReceiver();//
registerReceiver(networkChangeReceiver,intentFilter);//
}

动态注册的接收器,一定要取消注册。

@Override
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}

下面是registerReceiver()和unregisterReceiver()在Android API中的说明。

3.2.2 静态注册

静态注册则不需要程序启动,手机开启就能接收到广播。静态注册则是在AndroidManifest.xml中申明。

<receiver android:name=".NetworkChangeReceiver" >
  <intent-filter>
    <action android:name="android.net.conn.CONNECTIVITY_ CHANGE" />
  </intent-filter>
</receiver>

4 总结

总结而言,运用Android的广播机制,我们需要做到以下几点

如果监听自定义广播,

  1、使用sendBroadcast()或sendOrderedBroadcast()方法,发送定义的广播

  2、创建广播接收器,继承自BroadcastReceiver(),并重写onReceive()方法。在onReceive()方法中实现接收到广播后的响应动作。

  3、注册广播接收器,让广播接收器能接收到广播。广播接收器可以动态注册或者静态注册。动态注册需要取消注册。

如果是监听系统广播,上面三步我们只需要做后面两步就Ok了。

Android之 广播的更多相关文章

  1. 【Android】广播BrocastReceiver

    1.Android中广播主要分为两种:标准广播和有序广播. 标准广播:完全异步执行.广播发出后,所有的广播接收器几乎在同一刻收到广播事件,没有先后顺序之分. 优点:效率高 缺点:不能被截断 有序广播: ...

  2. Android学习--广播机制

    广播机制简介 Android的广播可以分为两种类型的,标准广播和有序的广播: 标准广播:  是一种完全异步执行的广播,在广播发出去之后,所有的广播接收器几乎是同一时接收到这条广播. 有序广播:  是一 ...

  3. Android study --- 广播

    广播接收者 在Android系统运行时会产生很多事件,事件产生时,回想系统发送广播,只要向系统发送广播,系统就知道发生了相应的事件,从而执行相对应的代码.在系统中只要使用广播接受者,就可以接收广播 创 ...

  4. Android 通过广播获取网络状态

    Android系统网络连接状态的改变会发一个广播,注册一个广播接收者,实时动态的检测网络状态,及时提醒用户,优化用户体验.          本文仅提供WIFI 状态的检测作为参考,其他网络连接方式请 ...

  5. Android开机广播

    有些时候我们常常需要某个程序开机运行.在这个时候我们就需要监听系统的开机广播,然后启动我们的程序即可. 不多说 直接上代码: public class BootReceiver extends Bro ...

  6. android之广播(二)

    广播接受者不仅可以通过清单文件来向系统注册,也可以通过代码来注册.并且有的广播必须通过代码来注册广播接受者. 锁屏和解锁广播 电量改变广播 打开屏幕和关闭屏幕 这里将广播接收者写在服务里面 <? ...

  7. android之广播(一)

    Android中的广播 系统在运行过程中会产生很多事件,某些事件产生的时候,比如:电量的改变,收发短信.拨打电话.屏幕解锁.开机等等,系统会发送广播.只要应用程序接受到这条广播就知道系统发生了相应的事 ...

  8. Android -- 简单广播接收与发送(2)--动态注册广播接收器

    1. 效果图

  9. Android -- 简单广播接收与发送(1)

    1. 效果图

随机推荐

  1. (二)Hadoop例子——运行example中的wordCount例子

    Hadoop例子——运行example中的wordCount例子 一.   需求说明 单词计数是最简单也是最能体现MapReduce思想的程序之一,可以称为 MapReduce版"Hello ...

  2. Spring websocket浏览器连接时出现404错误

    1.场景 在用websocket做一个简单的数据导入页面同步显示后台进度功能的时候,浏览器出现连接不上的错误: WebSocket connection to 'ws://localhost:8080 ...

  3. 【CodeForces】899 F. Letters Removing

    [题目]F. Letters Removing [题意]给定只含小写字母.大写字母和数字的字符串,每次给定一个范围要求删除[l,r]内的字符c(l和r具体位置随删除变动),求m次操作后的字符串.n&l ...

  4. 微信小程序开发(四)线程架构和开发步骤

    线程架构 从前面的章节我们可以知道,.js文件是页面逻辑处理层.我们可以按需在app.js和page.js中添加程序在生命周期的每个阶段相应的事件.如在页面的onLoad时进行数据的下载,onShow ...

  5. Dull Chocolates Gym - 101991D 离散化 前缀和

    题目链接:https://vjudge.net/problem/Gym-101991D 具体思路:首先看数据范围,暴力肯定不可以,可以下离散化,然后先求出离散化后每一个点到(1,1)的符合题目的要求的 ...

  6. tar解压与压缩

    1.解压 tar -zxvf  压缩文件名  -C 指定的目录   (制定的目录必须存在) 2.压缩 tar -czvf  压缩后的文件名   要压缩的文件夹

  7. selenium只打开一个浏览器窗口

    from selenium.webdriver import Remote from selenium.webdriver.chrome import options from selenium.co ...

  8. nginx配置--event模块

    在nginx的配置中,event模块可以进行以下配置: 设置网络连接的序列化. 在Nginx服务器的多进程下,有可能出现惊群(Thundering herd problem)问题,指的是当某一个时刻只 ...

  9. javaScript如何跳出多重循环break、continue

    先来说说break和continue之间的区别 for(var i=0;i<10;i++){  if(i>5){  break;  }}console.log(i);  ---6  •当i ...

  10. linux下C语言编程,include的默认搜索路径

    C语言编程时,发现细节的魅力很大.较为详细了看了一下关于include的知识,发现了几点新知: 1.include<头文件名>和include"头文件名" 如:incl ...