【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 动作:列举所有可用的应 ...
随机推荐
- SqlServer 允许保存对数据库中表结构的修改
1.Tools-->optisons-->Designers 如下截图
- [译]36 Days of Web Testing(三)
Day 14: Automate the tedious Why ? 有些时候,web测试还是蛮单调乏味的,在开始测试前,你可能要必须跳转到一个特定的表单页面,或则为了得到一个特定的页面(或配置),你 ...
- OpenJDK与HashMap
OpenJDK的非堆JDK增强提议(JDK Enhancement-Proposal,JEP)试图标准化一项基础设施,它从Java6开始,只能在HotSpot和OpenJDK内部使用.这种设施能够像管 ...
- spoj 3885
简单的博弈题,用dp解: 每个人只能拿1,l,k个硬币: dp[i][j]表示第j个人拿是否能拿第i枚硬币: 代码: #include<cstdio> #define maxn 10000 ...
- Javascript函数中传递带空格的参数
通常在页面中要让某些内容点击后产 生点击事件(非页面跳转)都会使用onclick,但是这样不适于需要传递参数的情况,于是写成直接调用Javascript函数的方式:<a href=javascr ...
- TCP/IP小纪
链 路 层 主 要 有 三 个 目 的 :( 1 )为 I P 模 块 发 送 和 接收 I P 数 据 报 ; ( 2 )为 A R P 模块发送 A R P 请 求 和 接 收 A R P 应 答 ...
- 14.6.7 Configuring the Number of Background InnoDB IO Threads 配置InnoDB IO Threads的数量
14.6.7 Configuring the Number of Background InnoDB IO Threads 配置InnoDB IO Threads的数量 InnoDB 使用后台线程来服 ...
- 【HDOJ】1422 重温世界杯
简单题. #include <stdio.h> #define MAXN 100005 int wi[MAXN], li[MAXN]; ]; int main() { int n, tot ...
- android逐行读取文件内容以及保存为文件
用于长时间使用的apk,并且有规律性的数据 1,逐行读取文件内容 //首先定义一个数据类型,用于保存读取文件的内容 class WeightRecord { String timestamp; flo ...
- 【转】Linux命令之查看文件占用空间大小-du,df
原文网址:http://blog.csdn.net/wangjunjun2008/article/details/19840671 du(disk usage),顾名思义,查看目录/文件占用空间大小 ...