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. 效果图
随机推荐
- C++ string类析构报错
我项目中用到了字符串的Base64转码.DES解密等功能,可能DES解密算法只能解密8字节倍数长度的字符串,所以我得到的结果总会存在一个多余的“尾巴”,于是我想要做一个字符串尾部清理的工作.我的做法是 ...
- Redis 安装碰到问题
一 make 报错 1. 出现如下错误 : cd src && make all make[1]: Entering directory '/xx/xx/redis-x.x.x/src ...
- Liunx 下载文件夹下所有文件
136down voteaccepted You may use this in shell: wget -r --no-parent http://abc.tamu.edu/projects/tzi ...
- 【Atcoder】AGC022 C - Remainder Game 搜索
[题目]C - Remainder Game [题意]给定n个数字的序列A,每次可以选择一个数字k并选择一些数字对k取模,花费2^k的代价.要求最终变成序列B,求最小代价或无解.n<=50,0& ...
- Array和String测试与java.String.split
java.string.split() 存在于java.lang包中,返回值是一个数组. 作用是按指定字符或者正则去切割某个字符串,结果以字符串数组形式返回. 例 String [] toSort = ...
- 【洛谷 P2216】 [HAOI2007]理想的正方形(二维ST表)
题目链接 做出二维\(ST\)表,然后\(O(n^2)\)扫一遍就好了. #include <cstdio> #include <cstring> #include <a ...
- js常见易错点
原文:http://www.jianshu.com/p/1c77853d4f01 前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函 ...
- Python自定义web框架、Jinja2
WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server ...
- vista风格的cms企业html后台管理系统模板——后台
链接:http://pan.baidu.com/s/1c1Cv99e 密码:20yz
- 73.Vivado使用误区与进阶——在Vivado中实现ECO功能
关于Tcl在Vivado中的应用文章从Tcl的基本语法和在Vivado中的应用展开,继上篇<用Tcl定制Vivado设计实现流程>介绍了如何扩展甚至是定制FPGA设计实现流程后,引出了一个 ...