android之广播详解上篇
来源:互联网 发布:淘宝紧凑式构图 编辑:程序博客网 时间:2024/05/16 07:31
一.广播概述:
发送广播使用Intent。而接收广播的方法则需要广播接收器(Broadcast Receiver)。
Android 中的广播主要可以分为两种类型,标准广播和有序广播。
标准广播(Normal broadcasts)是一种完全异步执行的广播,在广播发出之后,所有的
广播接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可
言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。
有序广播:是一个一个接收的 不是在同一时刻 是有顺序的 因此 这种广播是可以被截断的.
注册广播的方式一般有两种,在代
码中注册和在AndroidManifest.xml 中注册,其中前者也被称为动态注册,后者也被称为静态
注册。
二.接收广播实例
那么该如何创建一个广播接收器呢?其实只需要新建一个类,让它继承自BroadcastReceiver,
并重写父类的onReceive()方法就行了。这样当有广播到来时,onReceive()方法就会得到执行,
具体的逻辑就可以在这个方法中处理。
动态注册:
public class IndexActivity extends Activity { private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver = new NetworkChangeReceiver(); registerReceiver(networkChangeReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangeReceiver);//动态注册广播 在destory方法 一定要取消注册 } class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo(); 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 系统为了保证应用程序的安全性做了
规定,如果程序需要访问一些系统的关键性信息,必须在配置文件中声明权限才可以,否则
程序将会直接崩溃, 比如这里查询系统的网络状态就是需要声明权限的。
查询网络权限:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
静态注册:
动态注册的广播接收器可以自由地控制注册与注销,在灵活性方面有很大的优势,但是
它也存在着一个缺点,即必须要在程序启动之后才能接收到广播,因为注册的逻辑是写在
onCreate()方法中的。
public class BootCompleteReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "Boot Complete", Toast.LENGTH_LONG).show();}}
可以看到,这里不再使用内部类的方式来定义广播接收器,因为稍后我们需要在
AndroidManifest.xml 中将这个广播接收器的类名注册进去
<receiver android:name=".BootCompleteReceiver" ><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED" /></intent-filter></receiver>
由于Android 系统启动完成后会发出一条值为android.intent.action.BOOT_COMPLETED 的广
播,因此我们在这里添加了相应的action。
另外,监听系统开机广播也是需要声明权限的,可以看到,我们使用<uses-permission>
标签又加入了一条android.permission.RECEIVE_BOOT_COMPLETED 权限。
0 0
- android之广播详解上篇
- Android之广播详解
- android之广播详解下篇
- android编程之广播机制详解
- 学习 | Android开发之详解广播机制
- Android之BroadcastReceiver(广播接受者)详解
- Android随笔之——Android广播机制Broadcast详解
- Android随笔之——Android广播机制Broadcast详解
- Android 广播机制 详解
- Android广播机制详解
- android 广播(broadcastReceiver)详解
- android 广播BroadcastReveicer详解
- Android BroadcastReceiver广播详解
- Android广播机制详解
- android 广播详解
- Android 广播机制 详解
- android广播broadcast详解
- Android 广播机制 详解
- ROS系列二之Robot技术
- louts动态改变视图选择条件
- 转spring配置定时器的时间设置
- linux 更新系统时间
- 第1.4章 handlebars的使用
- android之广播详解上篇
- 通过org.apache.commons.net.ftp操作文件
- jQuery基础学习笔记第一讲之函数触发
- master的注册机制和状态管理
- Performance Issues of the Blockchain
- 基于ZooKeeper的Dubbo注册中心
- 让人难过的 openssl_pkcs7_encrypt
- C#、SQL Server中,byte与tinyint类型使用事项
- 洛谷 P1126 机器人搬重物