Broadcast⼴播的基本使⽤
全局⼴播:在整个Android系统中应⽤不但可以接受⾃⼰的⼴播,也可以接受别的应⽤的⼴播,或则系统的⼴播(开机⼴播,电池电量⼴播,时间全局⼴播
拾取变话⼴播等)。是⼀种跨进程通讯⽅式。
⼴播可以分为两种类型:⽆序⼴播与有序⼴播
⽆序⼴播:是指⼴播接收器接受⼴播是没有顺序的,⼏乎是同时接受;
有序⼴播:是指⼴播接收器接受⼴播是有顺序的,是同步的;
动态注册⼴播:(只有注册后(执⾏registReceiver()⽅法后),才会接受相应⼴播)
动态注册⼴播:
代码⽰例:
//接受⼴播过滤器,只能接受intentFilter具有相同Action的⼴播
IntentFilter intentFilter=new IntentFilter("android.CONNECTIVITY_CHANGE");
//继承⾃BroadCastReceiver然后从写onReceiver,接受⼴播后具体的执⾏者;
BroadCastReceiver myBroadCastReceiver=new MyBroadCastReceiver();
//完成⼴播的动态注册
registReceiver(MyBroadCastReceiver,intnetFilter);
class MyBroadCastReceiver extends BroadcastReceiver{
@override
public void onReceive(Context context,Intent intent){
//执⾏⼴播的具体操作;
}
}
//注意 动态⼴播注册必须有取消注册才可以(⼀般在onDestory()⽅法中调⽤)
unRegistReceiver(MyBroadCastReceiver);
静态注册⼴播:
静态注册⼴播:(什么时候都可以接受⼴播,即时是应⽤没有被开启,也可以接受⼴播)
⾸先创建⼀个类,继承⼦BroadcastReceiver,然后重写onReceive⽅法;
代码⽰例:
class MyBroadCastReceiver
MyBroadCastReceiver extends BroadcastReceiver{
@override
public void onReceive(Context context,Intent intent){
//执⾏⼴播的具体操作;
}
}
四⼤组件都需要在manifest中注册:
在application标签中注册:
MyBroadCastReceiver">
<receiver android name=".MyBroadCastReceiver"
<intent-filter>
<action android name="android.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
⼴播的发送:
⽆需⼴播的发送:
代码⽰例:
//同样是采⽤intent在⼴播间穿梭,只有action对应上的注册才会响应;
Intent intent=new Intent("ample.broadcast");
//发送⼴播
sendBroadcast(intent);
发送有序⼴播:
代码⽰例:
//同样是采⽤intent在⼴播间穿梭,只有action对应上的注册才会响应;
Intent intent=new Intent("ample.broadcast");
setOrderBroadcast(intent,null);
参数说明:第⼀个参数为Intent,意图;
第⼆个参数是⼀个与权限相关的字符串,这⾥参⼊null;
优先级别问题:动态注册的⼴播优先级⾼于静态注册的⼴播
动态注册⼴播通过调⽤IntentFilter对象的setPriority设置Priority的数值⼤⼩
静态注册的⼴播根据在静态⽂件中,Intent-Filater的属性Priotity的数值⼤⼩进⾏ 确定 (Priotity取值范围:-1000~10000)数值越⼤优先级别越⾼;
有序⼴播的拦截
有序⼴播的拦截:在onReceiver()中调⽤了abortBroadcast()⽅法,就表⽰这条⼴播截断,后⾯的⼴播将⽆法接收⼴播。
有序⼴播的数据更改:可通过setResultExtras(Bundle)⽅法将数据存⼊Broadcast中,当做Broadcast再传递给下⼀级接收者(可通过代码有序⼴播的数据更改:
Bundle bundle = getResultExtras(true)获取上⼀级传递过来的数据),并可以更改这个数据。
使⽤本地⼴播:由于⼴播是全局的,谁都能接受到 ,这样就会⼜安全问题。(例如我们接受了短信⼴播,就能获取短信的内容。)⽽本地⼴播是使⽤本地⼴播:
应⽤程序内部使⽤的⼴播。
只在应⽤程序内部使⽤的⼴播
本地⼴播发送:
LocalBroadcastManger localBroadcastManger
LocalBroadcastManger Instance(this);
Intent intent=new Intent("ample.broadcast");
localBroadcastManger.setBroadcast(intent);
localBroadcastManger
本地⼴播只有动态注册:
IntentFilter intentFilter=new IntentFilter("android.CONNECTIVITY_CHANGE");
localBroadcastManger
class MyBroadCastReceiver extends BroadcastReceiver{
@override
public void onReceive(Context context,Intent intent){
//执⾏⼴播的具体操作;
}
}
localBroadcastManger的⽅法。
安卓intent用法本地⼴播与全局⼴播使⽤基本⼀样,只是发送和接受都是调⽤localBroadcastManger的⽅法。
1.本地⼴播保持数据安全,只在本地发送与接受;
2.本地⼴播⽐全局⼴播更⾼效;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论