【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 动作:列举所有可用的应 ...
随机推荐
- iOS开发(Objective-C)常用库索引
code4app.com 这网站不错,收集各种 iOS App 开发可以用到的代码示例 cocoacontrols.com/ 英文版本的lib收集 objclibs.com/ 精品lib的收集网站 h ...
- Git入门简介
1. Git 背景 Git 最初由Linus Torvalds编写,用于 Linux 内核开发的版本控制工具. Git 与常用的版本控制工具 CVS.Subversion 等不同,它采用了分布式版本 ...
- Java多线程同步方法Synchronized和volatile
11 同步方法 synchronized – 同时解决了有序性.可见性问题 volatile – 结果可见性问题 12 同步- synchronized synchronized可以在任意对象上加 ...
- C++ 1
1 new 建立一个堆对象 new 类名(初值列表) 返回一个指针 int * p=new int(3)动态分配 2 delete 释放指针 delete p; delete [] p ;释放动态申 ...
- Robotium solo.goBack();不起作用,解决方案
今天碰到用solo.goBack();点击手机的返回按键五次有四次起总用.查了半天后发现以下一种替代方法: solo.sendKey(KeyEvent.KEYCODE_BACK); robotium下 ...
- C#编程技术层次
不谈具体领域(比如搜索,视频,网络等),单就编程语言这个垂直方向,大体上对它有一个如下的层次划分. 1. 基本运用C#语法,在各种工具和示例代码的支持下,完成一些基本程序任务 2. 熟练掌握面向对象与 ...
- Delphi WebService 需要注意 转
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://gang4415.blog.51cto.com/225775/251997 Web ...
- Linux学习笔记24——进程管道
一 管道的作用 通常把一个进程的输出通过管道连接到另一个进程的输入. 二 popen和pclose函数 #include <stdio.h> FILE *popen(const char ...
- 【狼】unity3d point light 个数限制更改
unity默认的pointlight个数为2个,多加的话先加的就没有效果, 具体更改方式如下: Edit -> Project Settings -> Quality-> Ren ...
- (转载)ubuntu安装pyton-pip问题解决
一.问题描述 root@ubuntu:/home/chao# apt-get install python-pip 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... ...