【Android】广播BrocastReceiver
1.Android中广播主要分为两种:标准广播和有序广播。
标准广播:完全异步执行。广播发出后,所有的广播接收器几乎在同一刻收到广播事件,没有先后顺序之分。
优点:效率高
缺点:不能被截断
有序广播:同步执行。广播发出后,优先级较高的广播接收器先接收到广播,执行完该广播接收器的逻辑后广播才会继续传递,优先级较高的接收器可以对广播进行截断组织广播的传递。
2.注册广播的方法:一般有两种
1.动态注册:在代码中注册,必须启动程序才能接收广播
2.静态注册:在AndroidManifest.xml中注册,程序未启动时也可接收广播
3.如何创建一个广播接收器?
创建一个类,让它继承BrocastReceiver并重写父类onReceive()方法
动态注册exam:
public class MainActivity extends Activity { private IntentFilter intentFilter;
private NetworkChangedReceiver networkChangedReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); /*
* 创建IntentFilter实例,并让它addAction,参数就是网络发生变化时系统发出的一条广播android.net.conn.CONNECTIVITY.CHANGE
* NetworkChangeReceiver 的实例, 然后调用 registerReceiver()
方法进行注册,将 NetworkChangeReceiver 的实例和 IntentFilter 的实例都传了进去,这样
NetworkChangeReceiver就会收到所有值为 android.net.conn.CONNECTIVITY_CHANGE的广
播,也就实现了监听网络变化的功能。
* */
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
networkChangedReceiver = new NetworkChangedReceiver();
registerReceiver(networkChangedReceiver,intentFilter);
} @Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangedReceiver);//取消注册
}
/*
* 内部类NetworkChangedReceiver,重写了父类的onReceive方法,当网络状态发生变化时,OnReceive()方法得到执行
*
* */
class NetworkChangedReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
//先通过 getSystemService()方法得到了 ConnectivityManager 的实例, 这是一个系统服务类, 专门用于管理网络连接的。
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
//调用它的 getActiveNetworkInfo()方法可以得到 NetworkInfo 的实例
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); //调用 NetworkInfo 的 isAvailable()方法,就可以判断出当前是否有网络了
if (networkInfo != null && networkInfo.isAvailable())
{
Toast.makeText(context,"Network is available",Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(context,"Network is unavailable",Toast.LENGTH_SHORT).show();
}
/*
* 有非常重要的一点需要说明,Android 系统为了保证应用程序的安全性做了规定,如果程序需要访问一些系统的关键性信息,必须在配置文件中声明权限才可以
* 打开AndroidMainfest.xml文件,<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
* 访问 http://developer.android.com/reference/android/Manifest.permission.html可以查看 Android
系统所有可声明的权限。
* */ }
静态注册exam(事先创建一个广播器继承BrocastReceiver重写onReceive方法):
1.在<applcation>里添加<receive>标签
2.通过android:name:指定具体注册哪一个广播接收器
3.在<intent_filter>标签加入想要接收的广播
4.记得要声明相应的权限<uses-permission>
4.由于在广播接收器中是不允许开启线程的,所以不要在onReceive方法中添加过多的逻辑或者进行任何耗时的操作,当onReceive方法运行较长时间而没有结束时,程序就会报错。广播接收器扮演的更多是一种打开其他程序其他组件的角色。如创建状态栏通知或者启动某个服务。
【Android】广播BrocastReceiver的更多相关文章
- Android随笔之——Android广播机制Broadcast详解
在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理.这个广播跟我们传统意义中的电台广播有些相似之处.之所以叫做广播,就 ...
- Android广播机制的深入学习
部分内容转载自http://www.cnblogs.com/lwbqqyumidi/p/4168017.html 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者 ...
- Android总结篇系列:Android广播机制
1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...
- Android广播机制概述
1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...
- Android广播机制:Broadcast
转载:Android总结篇系列:Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广 ...
- Android(java)学习笔记172:BroadcastReceiver之 Android广播机制
Android广播机制 android系统中有各式各样的广播,各种广播在Android系统中运行,当"系统/应用"程序运行时便会向Android注册各种广播.Android接收到广 ...
- Android广播机制(转)
1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...
- Android广播的发送与接收
Android广播的发送与接收 效果图 广播发送 广播分为有序广播和无序广播 有序广播与无序广播的区别 无序广播:只要是广播接收者指定了接收的事件类型,就可以接收到发送出来的广播消息.不能修改消息. ...
- Android广播机制
原文出处: Android总结篇系列:Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的 ...
- 【Android】Android 广播大全
[Android]Android 广播大全 String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式. String ALL_APPS_ACTION 动作:列举所有可用的应 ...
随机推荐
- ruby特性
1. ruby类结构 每个类都是Class类的对象 所有类都继承自BasicObject类(Module类不能实例化) 2. 单例方法 单例方法可以不定义在类中,只为某个对象定义方法,所以称为单例方法 ...
- JavaScript 语句后应该加分号么?
分号加与不加完全取决于个人习惯,但为了代码稳定(解析出错)还是建议使用分号断句. JavaScript自动加分号规则:1.当有换行符(包括含有换行符的多行注释),并且下一个token没法跟前面的语法匹 ...
- select 模型
http://www.cnblogs.com/Anker/p/3258674.html http://www.cnblogs.com/cozy/articles/2088128.html http:/ ...
- ASP.NET(C#)常用数据加密和解密方法汇总
一. 数据加密的概念 1. 基本概念 2. 基本功能 3. 加密形式 二. 数据加密的项目应用和学习 1. 媒体加密:DRM 2. 文件加密:文本 ...
- [HDOJ - 5208] Where is Bob 【DFS+按位贪心】
题目链接:HDOJ - 5208 题目分析 使用按位贪心的思想,即从高位向低位枚举,尽量使这一位的答案为 1 . 我们使用 DFS ,每次就是对于 [l1, r1] [l2, r2] x 进行处理 ...
- 修改weblogic11g的JDK版本
1:进入Weblogic域文件夹下面 [wzh@localhost bin]$ pwd/app/wzh/oracle/middleware/user_projects/domains/base_dom ...
- Linux怪哉ntfs
http://www.linuxidc.com/Linux/2013-08/88721.htm
- net.sf.json在处理json对象转换为普通java实体对象时的问题和解决方案
我使用的net.sf.json是json-lib-2.4-jdk15.jar,把json对象转换为普通java实体对象时候有个问题,josn对象转换为java对象之后,json串里面的那几个小数点的值 ...
- Ubuntu小技巧——怎样安装谷歌Chrome浏览器
对于刚刚开始使用Ubuntu并想安装谷歌Chrome浏览器的新用户来说,本文所介绍的方法是最快捷的.在Ubuntu上安装谷歌Chrome的方法有很多.一些用户喜欢直接在谷歌Chrome下载页面获得 d ...
- HDFS文件系统基本文件命令、编程读写HDFS
基本文件命令: 格式为:hadoop fs -cmd <args> cmd的命名通常与unix对应的命令名相同.例如,文件列表命令: hadoop fs -ls 1.添加目录和文件 HDF ...