前言:BroadCastReceiver,广播氛围标准广播和有序广播。标准广播无法被截断。有序广播可以在某个环节Cut掉。
动态注册广播和静态注册广播的区别,主要是动态注册广播需要开启APP才能接收到广播,可以自由的进行控制注册和注销,较灵活;静态注册无需开启App就能接收到广播了,缺点是灵活性较差。
一,注册
动态注册基本代码:
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction(CONNECTIVITY_SERVICE);
NetWorkChangerReceiver netWorkChangerReceiver= new NetWorkChangerReceiver();
registerReceiver(netWorkChangerReceiver,intentFilter);
内部类
public class NetWorkChangerReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {//注意这个方法里面不要添加过多的逻辑和耗时操作
Toast.makeText(this,"1",Toast.LENGTH_LONG).show();
}
}
记得取消注册
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mNetWorkChangerReceiver);
}
静态注册:
</application>
......
<receiver android:name=".activity.Mine.PActivityr$NetWorkChangerReceiver">//指定哪一个接收广播
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED">//加入广播
</action>
</intent-filter>
</receiver>
</application>写在Application之间
记得加权限哦!
二,发送广播
发送标准广播:
Intent intent=new Intent(广播,静态注册的广播的action内容一致);//还可以携带一些数据。
sendBroadcast(intent);
发送有序广播:
Intent intent=new Intent(广播和静态注册的广播的action内容一致);//还可以携带一些数据。
sendOrderedBroadcast(intent,null);//第二个参数是与权限有关的字符串
在OnReceive里面调用
abortBroadcast();//截断广播
<receiver android:name=".activity.Mine.PActivityr$NetWorkChangerReceiver">//指定哪一个接收广播
<intent-filter
android:priority=:"100">//设置优先级
<action android:name="android.intent.action.ACTION_POWER_CONNECTED">//加入广播
</action>
</intent-filter>
</receiver>
三,本地广播机制
目的:解决广播安全性问题。使得广播只能在内部传递,并且广播接收器只能接受来自本应用的广播。
异同:本地广播无法通过静态注册来接收
优点:1安全
2比全局广播更加高效
代码举例:
LocalBroadcastManager mManager=LocalBroadcastManager.getInstance(this);
mManager.registerReceiver(mNetWorkChangerReceiver,intentFilter);//注册
mManager.unregisterReceiver(mNetWorkChangerReceiver);//反注册用在销毁Activity方 法里
发送广播:
Intent intent=new Intent("广播,静态注册的广播的action内容一致");//还可以携带一些数据。
mManager.sendBroadcast(intent);
四,运用场景
实现强制下线功能。思路是,利用接收到的广播弹出一个提示,并且同时界面上的任何其他按键都不能点击。用户点击完确认之后,关闭掉所有界面跳转到登录页面重新登录。