Android之 广播
(以下内容是阅读郭霖大神的《第一行代码》后自己总结的)
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之 广播的更多相关文章
- 【Android】广播BrocastReceiver
1.Android中广播主要分为两种:标准广播和有序广播. 标准广播:完全异步执行.广播发出后,所有的广播接收器几乎在同一刻收到广播事件,没有先后顺序之分. 优点:效率高 缺点:不能被截断 有序广播: ...
- Android学习--广播机制
广播机制简介 Android的广播可以分为两种类型的,标准广播和有序的广播: 标准广播: 是一种完全异步执行的广播,在广播发出去之后,所有的广播接收器几乎是同一时接收到这条广播. 有序广播: 是一 ...
- Android study --- 广播
广播接收者 在Android系统运行时会产生很多事件,事件产生时,回想系统发送广播,只要向系统发送广播,系统就知道发生了相应的事件,从而执行相对应的代码.在系统中只要使用广播接受者,就可以接收广播 创 ...
- Android 通过广播获取网络状态
Android系统网络连接状态的改变会发一个广播,注册一个广播接收者,实时动态的检测网络状态,及时提醒用户,优化用户体验. 本文仅提供WIFI 状态的检测作为参考,其他网络连接方式请 ...
- Android开机广播
有些时候我们常常需要某个程序开机运行.在这个时候我们就需要监听系统的开机广播,然后启动我们的程序即可. 不多说 直接上代码: public class BootReceiver extends Bro ...
- android之广播(二)
广播接受者不仅可以通过清单文件来向系统注册,也可以通过代码来注册.并且有的广播必须通过代码来注册广播接受者. 锁屏和解锁广播 电量改变广播 打开屏幕和关闭屏幕 这里将广播接收者写在服务里面 <? ...
- android之广播(一)
Android中的广播 系统在运行过程中会产生很多事件,某些事件产生的时候,比如:电量的改变,收发短信.拨打电话.屏幕解锁.开机等等,系统会发送广播.只要应用程序接受到这条广播就知道系统发生了相应的事 ...
- Android -- 简单广播接收与发送(2)--动态注册广播接收器
1. 效果图
- Android -- 简单广播接收与发送(1)
1. 效果图
随机推荐
- 用shell获取目录/文件夹/文件的时间戳
命令: date +%s -r 目录名/文件名 输出内容形如: 1276225332
- 3.redis设计与实现--字典
1.包括三个结构体:字典结构体+哈希表结构体+哈希节点结构体 2.如何解决哈希冲突? 答:redis使用的是链地址法来解决哈希冲突的,每个链表节点有一个next指针,最新加入的节点会放在链表的头部. ...
- Spring Boot 使用IntelliJ IDEA创建一个web开发实例(三)
属性配置 1.配置application.properties文件 配置web访问端口和context path server.port = 8081 server.servlet.context-p ...
- .net中的lock
lock锁 //定义一个私有成员变量,用于Lock的锁定标志 private static object lockobj = new object(); void DoSomething() { l ...
- About configuration center of Apollo
A comparison among different configuration management tools Use of Apollo configuration management p ...
- 实现字符串检索strstr函数、字符串长度strlen函数、字符串拷贝strcpy函数
#include <stdio.h> #include <stdlib.h> #include <string.h> /* _Check_return_ _Ret_ ...
- 152.Maximum Product Subarray---dp---连续子数组的最大乘积---《编程之美》2.13子数组的最大乘积
题目链接:https://leetcode.com/problems/maximum-product-subarray/description/ 题目大意:给出一串数组,找出连续子数组中乘积最大的子数 ...
- IO的学习与使用
一.IO的学习方法:IO中包含了很多的类,推荐的学习方式是:“举一反三,掌握一种,以此类推”. 二.I/O操作的目标: 输入:从数据源(在数据源和程序之间建立的一个数据流淌的“管道”)中读取数据(文件 ...
- 进度条算法 progressBar
; ;var maxNum=int.MaxValue; progressBar.Maximum =maxNum; progressBar.Minimum = ; progressBar.Value = ...
- java中常见异常汇总(根据自己遇到的异常不定时更新)
1.java.lang.ArrayIndexOutOfBoundsException:N(数组索引越界异常.如果访问数组元素时指定的索引值小于0,或者大于等于数组的长度,编译程序不会出现任何错误,但运 ...