1:广播机制:
Android提供了完整的API,应用程序可以发送和接受广播。
2:广播分为有序广播和标准广播
标准广播:
发出广播后,广播接收器同一时刻接受到这条广播。
有序广播:
广播有优先顺序,根据优先级别,(可以截断正在传递的广播)
3:接受系统广播:
3.1 动态注册监听网络变化
创建广播接收器:新建一个类继承BroadcastReceiver , 重写父类的onReceiver()。
public clas MainActivity extends Activity {
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver;
onCreate 方法中 :
intentFilter = new IntentFilter; //创建IntetnFilter 实例。
intentFilter.addAction(android.net.conn.CONNECTIVITY_CHANGE); 添加action
networkChangeReceiver = new NetworkChangeReceiver(); //创建NetworkChangeReceiver 实例。
registerReceiver(networkChangeReceiver,intentFilter); //调用registerReceiver方法注册。
onDestory 方法中:
unregisterReceiver(networkChangeReceiver); //取消注册。
新建一个类继承BroadcastReceiver
class NetworkChangeReceiver extends BroadcastReceiver{
onReceive方法 :
ConnectivityManager connectionManager = (ConnectivityManager )getSystemService(Context.CONNETCIVITY_SERVICE); 获取实例(管理网络连接)
NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo(); 通过getActiveNetworkInfo方法,得到NetworkInfo 实例。
i f(networkInfo ! = null && networkInf.isAvailable()){ 调用NetworkInfo 的isAvailable方法判断是否有网。
Toast.makeText(context,"network is available",Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context,"network is unavailable",Toast.LENGTH_SHORT).show();
在配置文件中声明权限:<uses-permission android:name="android.permission.ACCESS_NETWORK_START"/>
3.2 静态注册实现开机启动:
同样:创建广播接收器:新建一个类BootCompleteReceiver继承BroadcastReceiver , 重写父类的onReceiver()。
在主配置清单中:
加入权限:<uses-permission android:name="android.permission.RECEIVER_BOOT_COMPLETED"/>
<receiver android : name = ".BootCompleteReceiver">
<intent-filter>
<action android name = "android.intent.action.BOOT_COMPLETED">
</intent-filter>
</receiver>
4:自定义广播:
发送标准广播:
第一步: 新建一个类MyBroadcastReceiver 继承BroadcastReceiver , 重写父类的onReceiver()。
第二步: 在清单中注册广播
第三步: 新建一个类继承Activity, 构建一个Intent对象,把发送的广播传入,调用sendBrosdcast(intent)发送出去。
发送有序广播:
重新创建一个项目,并创建一个广播接收器AOtherBrosdcastReceiver,在清单中注册,在onCreate方法中加入sendOrderedBroadcast()
*****优先级:
在主清单中加入<intent-filter android : priority = "100">
在MyBroadcastReceiver中加入abortBroadcast();
5:使用本地广播:
本地广播主要是使用 LocalBroadcastManager 对广播进行管理,
5..1 通过LocalBroadcastManager的getInstance()获取实例,
5.2 注册广播接收器调用LocalBroadcastManager 的registerReceiver()方法。
5.3 发送广播调用LocalBroadcastManager的sendBroadcast()方法;
本地广播安全,效率高。
2016年10月10日,17.31,耗时1小时30分。