动态注册广播
2016-04-16 18:13
344 查看
广播分为有序广播(Ordered brodcasts)和无序广播(Normal broadcasts)
有序广播是一种同步执行的广播,在同一时间段,只有一个广播发出,只有等这个广播执行完,才会发向下一个广播,这种广播可以截断
无序广播时默认广播,是一种异步执行的操作,广播发出后,无法截断。
广播接收器有两种注册方式,一种是在AndroidMainfest里面注册和代码里面注册,前者被称为静态注册,后者成为动态注册
那么如何创建一个广播接收器呢?其实只需要创建一个类,然后继承Broadcast Receive然后重写onReceive()方法就可以啦,当有广播到来时,onReceive()方法会自动调用
动态注册广播:
一:创建一个IntentFilter对象。
二:使用IntentFilter对象的setAction方法添加一个监听对象(intentFilter.setAction("android.net.conn.CONNECTIVITY_CHANGE"));
三:创建一个类,继承BroadcastReceiver类,实现里面的Onreceive方法();在Onreceive方法里面通过getSystemService(Context.CONNECTIVITY_SERVICE);获取到ConnectivityManager对象;调用ConnectivityManager里面的getActiveNetworkInfo()方法获取到NetWorkInfo对象,判断netWorkInfo对象是否为非空&&info.isAvailable()
那么为有网络,反之为没有网络。
四:使用registerReceiver(Broadcastreceiver,intentFilter)实现这个广播接收
五:在onDestroy里面使用unregisterReceiver结束当前广播(unregisterReceiver)
六:在清单文件中加入android.permission.ACCESS_NETWORK_STATE权限,用于查询是否有网络
代码:
有序广播是一种同步执行的广播,在同一时间段,只有一个广播发出,只有等这个广播执行完,才会发向下一个广播,这种广播可以截断
无序广播时默认广播,是一种异步执行的操作,广播发出后,无法截断。
广播接收器有两种注册方式,一种是在AndroidMainfest里面注册和代码里面注册,前者被称为静态注册,后者成为动态注册
那么如何创建一个广播接收器呢?其实只需要创建一个类,然后继承Broadcast Receive然后重写onReceive()方法就可以啦,当有广播到来时,onReceive()方法会自动调用
动态注册广播:
一:创建一个IntentFilter对象。
二:使用IntentFilter对象的setAction方法添加一个监听对象(intentFilter.setAction("android.net.conn.CONNECTIVITY_CHANGE"));
三:创建一个类,继承BroadcastReceiver类,实现里面的Onreceive方法();在Onreceive方法里面通过getSystemService(Context.CONNECTIVITY_SERVICE);获取到ConnectivityManager对象;调用ConnectivityManager里面的getActiveNetworkInfo()方法获取到NetWorkInfo对象,判断netWorkInfo对象是否为非空&&info.isAvailable()
那么为有网络,反之为没有网络。
四:使用registerReceiver(Broadcastreceiver,intentFilter)实现这个广播接收
五:在onDestroy里面使用unregisterReceiver结束当前广播(unregisterReceiver)
六:在清单文件中加入android.permission.ACCESS_NETWORK_STATE权限,用于查询是否有网络
代码:
public class MainActivity extends Activity { private IntentFilter intentFilter; Broadcasts broadcast; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter(); // 监听网络变化 intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); broadcast = new Broadcasts(); // 注册广播 registerReceiver(broadcast, intentFilter); } protected void onDestroy() { super.onDestroy(); unregisterReceiver(broadcast); } class Broadcasts extends BroadcastReceiver { public void onReceive(Context arg0, Intent arg1) { ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = manager.getActiveNetworkInfo(); if(info !=null && info.isAvailable()) { Toast.makeText(MainActivity.this, "有网络", 0).show(); } else { Toast.makeText(MainActivity.this, "木有网络", 0).show(); } } } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories