标准广播:
广播发出后所有的广播接收器几乎均可同时接收,没有顺序并且无法被截断
动态注册:
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("action");
registerReceiver(继承BroadcastReceiver的广播监听器,intentFilter);
取消注册:
unregisterReceiver(继承BroadcastReceiver的广播监听器);
静态注册:
<receiver android:name=".TestBreoadcast">
<intent-filter>
<action android:name="action名称,可以自定义"/>
</intent-filter>
</receiver>
发送标准广播:
Intent intent=new Intent("action");
sendBroadcast(intent);
广播发送后同一时间只有一个广播接收器能收到,第一个接收器处理完之后才能继续被下一个接收器接收到,每一个接收器都可以将这段广播截断不再继续流传
跟标准关闭比起来,区别只有一点,只需要修改发送广播的方法即可
sendOrderedBroadcast(intent,null);
第二个参数是指定接收者必须拥有的接收权限,如果设为NUll,就是不需要接收权限,所有匹配的Receiver都能接收到
同时有序广播可以设置优先级,优先级越高的越早能接收到广播
如果是静态注册则在intent-filter中加入参数
android:priority="10"
动态注册则设置
intentFilter.setPriority(100);值为整数,数字越大优先级越高
如果在广播接收器中调用了
abortBroadcast();
方法,则这个广播被截断不会再被其他接收器接收到
本地广播:
标准广播和有序广播都是可以在整个手机中被接收到的,如果想要广播只在应用内传递则可以使用本地广播
本地广播与标准广播的区别也不大,修改发送和注册的方法即可
发送:
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
注册:
LocalBroadcastManager.getInstance(this).registerReceiver(继承BroadcastReceiver的广播监听器, intentFilter);
取消注册:
LocalBroadcastManager.getInstance(this).unregisterReceiver(继承BroadcastReceiver的广播监听器);
自定义广播:
以上三种广播中的action修改为自定义字符串就可以算作是自定义广播了。。。
使用系统广播的时候注意权限,广播接收器都得注册,接收器接收的action与发送的action一致才能被接收器接收到
在广播接收器中弹出dialog的时候必须将对话框类型设置为:
.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
也就是系统dialog,不然会崩
在接收器中打开activity也必须设置flags为
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);