四大组件之一广播接收器
小生第一次写博客,定期总结笔记,巩固知识点,希望能日积月累,厚积薄发。
什么是广播接收器?
就是系统的一些自身状态发生改变时会发出”广播”,
APP会像收音机一样接收到这些广播并作出处理。
例如:
开机自启。当手机系统开机时使会向APP发出广播:“我开机啦”,然后APP便会自动启动。
wifi自动下载功能。APP门户平台都有这样一个功能:当联网方式变为wifi时,变为自动下载,为流量时,提示下载。
一. 动态注册广播接收器
基本框架
定义私有变量
private IntentFiler intentFiler; private MyBroadcastReceiver myBroadcastReceiver;
初始化消息接收器、添加消息内容、注册接收器
intentFilter = new IntentFilter(); intentFilter.addAction("消息命名"); myBroadcastReceiver = new MyBroadcastReceiver(); registerReceiver(myBroadcastReceiver,intentFilter);
定义广播接收类(继承广播接收器BroadcastReceiver)
class MyBroadcastReceiver extends BroadcastReceiver{ public void onReceive(Context context, Intent intent) { } }
在onDestroy方法中小销毁注册
protected void onDestroy() { super.onDestroy(); unregisterReceiver(myBroadcastReceiver); }
二.静态注册广播监听器
关闭程序后如果接收到广播仍能重启程序
清单文件
<receiver name=".类名"> <intent-filter android:priority="数字"> //优先级设置,数字越大优先级越高 ,标准广播可不写 <action android:name="...."/> //接收的行为消息 </intent-filter> <receiver/>
新建Class继承BroadcastReceiver
public class MyBroadcastReceiver extends BroadcastReceiver{ public void onReceive(Context context, Intent intent) { } }
三.发送/拦截广播
发送标准广播
Intent i = new Intent(); i.setAction(".....") //设置行为消息 sendBroadcast(i);
发送有序广播
//第二个参数为权限设置,可定义为null sendOrderBroadcast(i,permision);
拦截广播
abortBroadcast();
四.使用本地广播
意旨只限本APP程序的广播发送
使用LocalBroadcastManager管理广播
private LocalBroadcastManager localBroadcastManager; localBroadcastManager = LocalBroadcastManager.getInstance(this); localBroadcastManager.sendBroadcast(i);
示例:动态监听网络变化
网络连接或断开自动出现消息提示
开启WIFI时
关闭WIFI时
代码块
监听网络变化方法类
class NetworkChangeReceiver extends BroadcastReceiver{ public void onReceive(Context arg0, Intent arg1) { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if(networkInfo != null && networkInfo.isAvailable()){ Toast.makeText(arg0, "网络连接成功", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(arg0, "网络断开连接", Toast.LENGTH_SHORT).show(); } } }
在onCreate方法中实例化消息接收器、网络变化监听方法类并注册接收器
intentFilter = new IntentFilter(); //添加行为信息 intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); registerReceiver(networkChangeReceiver,intentFilter);
onDestoy方法中注销接收器
protected void onDestroy(){ super.onDestroy(); unregisterReceiver(networkChangeReceiver); }
添加(获取网络状态)权限
android.permission.ACCESS_NETWORK_STATE