无序广播
没有顺序的广播,所有广播中的action匹配的广播可以收到这一条广播,并且是没有先后顺序,视为同时收到。abortBroadcast()拦截广播和setResultData()修改参数在无序广播里面是没有效果的。
有序广播:
没有顺序的广播,所有与广播action匹配的广播者都可以收到这一条广播,但是有先后的顺序,按照广播接受者的优先级接收。广播接收者需要提前设置优先级,优先级高的先接
收到广播,优先级数值为-1000~1000,在AndroidManifest.xml的<intent-filter android:PRiority="xxx">设置;比如存在3个广播接收者A、B、C,优先级A>B>C,因此A最先收到广播,当
A收到广播后,可以向广播中添加一些数据给下一个接收者(intent.putExtra()),或者终止广播(abortBroadcast());Context.sendOrderedBroadcast(intent);
//resultReceiver(new MyReceiver())不需要在清单文件中配置,这个广播接收者只接受该条有序广播,并且是最后收到该广播,并且一定可以接收到,打电话的广播也是这种方式,无法拦截。sendOrderedBroadcast(intent, null, new MyReceiver(), null, 0, "每个人100元", null);
案例代码
app1:发送广播
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送文件" android:onClick="click" /></RelativeLayout>MainActivity.javapackage com.ldw.center;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.view.View;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v){ Intent intent = new Intent(); intent.setAction("com.ldw.sendcast"); //发送有序广播 //resultReceiver(new MyReceiver())不需要在清单文件中配置,这个广播接收者只接受该条有序广播,并且是最后收到该广播,并且一定可以接收到 sendOrderedBroadcast(intent, null, new MyReceiver(), null, 0, "每个人100元", null); } //广播接收者对象,和app2里面不同的是,app2里面不需要定义,自动调用的接收者类,这里面需要定义这个类 class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String text = getResultData(); System.out.println("MyReceiver收到" + text); } }}app2:广播接收者清单文件
<receiver android:name="com.ldw.local.top1"> <intent-filter android:priority="1000"> <action android:name="com.ldw.sendcast"/> </intent-filter> </receiver> <receiver android:name="com.ldw.local.top2"> <intent-filter android:priority="800"> <action android:name="com.ldw.sendcast"/> </intent-filter> </receiver> <receiver android:name="com.ldw.local.top3"> <intent-filter android:priority="600"> <action android:name="com.ldw.sendcast"/> </intent-filter> </receiver>top1.javapackage com.ldw.local;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class top1 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub System.out.println("top1接受到广播"); String text = getResultData(); System.out.println("top1" + text); //有序广播修改参数值 setResultData("每个人收到80元"); }}top2.java
package com.ldw.local;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class top2 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub System.out.println("top2接受到广播"); String text = getResultData(); System.out.println("top2" + text); //有序广播可以拦截广播,,后面的接受不到 abortBroadcast(); }}top3.java
package com.ldw.local;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class top3 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub System.out.println("top3接受到广播"); String text = getResultData(); System.out.println("top3" + text); }}
新闻热点
疑难解答