标准广播,有序广播,本地广播和自定义广播

标准广播:

广播发出后所有的广播接收器几乎均可同时接收,没有顺序并且无法被截断


动态注册:

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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值