有序广播
16lz
2021-01-23
住:需要在mainfast中通配置权限并使用权限
<permission android:protectionLevel="normal" android:name="broadcastyouxupro"></permission>
<uses-permission android:name="broadcastyouxupro"/>
Intent intent=new Intent();
intent.setAction("broadcast_youxu");
sendOrderedBroadcast(intent, "broadcastyouxupro");
android有序广播
- 博客分类:
- android
普通广播(Normal Broadcast):
一,优缺点:和有序广播的优缺点相反!
二,发送广播的方法:sendBroadcast()
有序广播(Ordered Broadcast):
一,优缺点
优点:1,按优先级的不同,优先Receiver可对数据进行处理,并传给下一个Receiver
2,通过abortBroadcast可终止广播的传播
缺点:效率低
二,发送广播的方法:sendOrderedBroadcast()
三,优先接收到Broadcast的Receiver可通过setResultExtras(Bundle)方法将处理结果存入Broadcast中,
下一个Receiver 通过 Bundle bundle=getResultExtras(true)方法获取上一个Receiver传来的数据
程序效果:点击按钮,两个Receiver接收同一条广播,在logcat中打印出数据(按照Receiver的优先顺序,Receiver2先,Receiver1后)
Java代码
- <?xmlversion="1.0"encoding="utf-8"?>
- <manifestxmlns:android="http://schemas.android.com/apk/res/android"
- package="com.song"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdkandroid:minSdkVersion="8"/>
- <application
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name">
- <activity
- android:label="@string/app_name"
- android:name=".C48_BroadcastActivity">
- <intent-filter>
- <actionandroid:name="android.intent.action.MAIN"/>
- <categoryandroid:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- <!--优先级的设定MyReceiver2大于MyReceiver1,优先级的范围-1000~1000-->
- </activity>
- <receiverandroid:name=".MyReceiver1">
- <intent-filterandroid:priority="200">
- <actionandroid:name="com.song.123"/>
- </intent-filter>
- </receiver>
- <receiverandroid:name=".MyReceiver2">
- <intent-filterandroid:priority="1000">
- <actionandroid:name="com.song.123"/>
- </intent-filter>
- </receiver>
- </application>
- </manifest>
- packagecom.song;
- //发送广播,bundle绑上key为a的数据
- importandroid.app.Activity;
- importandroid.content.Intent;
- importandroid.os.Bundle;
- importandroid.view.View;
- importandroid.view.View.OnClickListener;
- importandroid.widget.Button;
- publicclassC48_BroadcastActivityextendsActivity{
- /**Calledwhentheactivityisfirstcreated.*/
- Buttonbutton;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- button=(Button)findViewById(R.id.button);
- button.setOnClickListener(newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- Intentintent=newIntent("com.song.123");
- Bundlebundle=newBundle();
- bundle.putString("a","aaa");
- intent.putExtras(bundle);
- //有序广播
- sendOrderedBroadcast(intent,null);
- }
- });
- }
- }
- packagecom.song;
- //优先接到广播,bundle绑上key为b的数据
- importandroid.content.BroadcastReceiver;
- importandroid.content.Context;
- importandroid.content.Intent;
- importandroid.os.Bundle;
- publicclassMyReceiver2extendsBroadcastReceiver{
- @Override
- publicvoidonReceive(Contextcontext,Intentintent){
- //TODOAuto-generatedmethodstub
- System.out.println("receiver2");
- //context.getSystemService(name);
- Bundlebundle=intent.getExtras();
- bundle.putString("b","bbb");
- System.out.println("a="+bundle.get("a"));
- setResultExtras(bundle);
- //切断广播
- //abortBroadcast();
- }
- }
- packagecom.song;
- //接收从receiver2传来的广播,包含key为a和b的数据
- importandroid.content.BroadcastReceiver;
- importandroid.content.Context;
- importandroid.content.Intent;
- importandroid.os.Bundle;
- publicclassMyReceiver1extendsBroadcastReceiver{
- @Override
- publicvoidonReceive(Contextcontext,Intentintent){
- //TODOAuto-generatedmethodstub
- System.out.println("receiver1");
- //要不要接受上一个广播接收器receiver2传来的的数据
- Bundlebundle=getResultExtras(true);
- System.out.println("a="+bundle.getString("a")+",b="+bundle.getString("b"));
- }
- }
更多相关文章
- Android开发之如何手写代码进行页面布局
- Android跳转淘宝商品详情页代码
- android通过Intent调用手机图片,音频,视频录音拍照等代码
- Android开源项目:微信打飞机游戏源代码
- android 测试读取LEB数据的函数
- android中在切换fragment时,怎样做到无需重复加载数据的方法。
- android 开发常用代码备查[更新20150520]