上次,我们讲完了广播里的动态广播,这次我们来讲讲静态广播和有序广播。
静态广播和动态广播的区别有三点:
1、静态广播的生存期可以比动态广播的长很多,因为静态广播很多都是用来对系统时间进行监听,比如我们可以监听手机开机。
而动态广播会随着context的终止而终止
2、动态广播的优先级比静态广播高
3、动态广播无需在AndroidManifest.xml中声明即可直接使用,也即动态;而静态广播则需要,有时候还要在AndroidManifest.xml中加上一些权限的声明
有序广播的话我们可以根据上次电台的例子写一个短信发送的例子,大概依照上次的代码,我们只需要稍微做一点点的改动即可,
首先,发送者里面,我们只需将sendBroadcast(intent);改为sendOrderedBroadcast(intent,null);就可以将无序广播变为有序广播了,然后,我们来接着写接收者一号里面的内容,在这里,我们可以在接受者一号的activity里面更改短信内容,也可以对短信内容做一个判断,如果内容为中奖了三个字,则做出拦截,这也是有序广播里面的一个知识点-----通过abortBroadcast可终止广播的传播,接下来,给大家看看我接受者一号里面的代码:
public class MyReceived01 extends BroadcastReceiver{然后在manifests里面对上面那个activity做一个配置,代码就完成了,针对于我们有两个接收者,所以我们可以给他们设置一个优先级,这也是有序广播的特点之一,设置优先级只需在<intent-filter>节点中添加 android:priority属性,取值为-1000~1000
@Override
public void onReceive(Context context, Intent intent) {
if ("com.zking.android_13_sender.955".equals(intent.getAction())){
String data=intent.getStringExtra("data");
Log.i("test","01号广播接受者收到广播了"+data);
//一号收到之后,将二号的内容作为更改
Bundle bundle=new Bundle();
bundle.putString("content",data+"吗?骗你的");
setResultExtras(bundle);
// if ("中奖了".equals(data)){
// //阻止短信(拦截)
// abortBroadcast();
// }
}
}
}
<receiver android:name=".MyReceived01">
<intent-filter
android:priority="999"
>
<action android:name="com.zking.android_13_sender.955"></action>
</intent-filter>
</receiver>
在接收者二号里面就只需要接收信息,不需要做任何更改即可