首页 > 系统 > Android > 正文

43.android广播-有序广播

2019-11-09 15:25:30
字体:
来源:转载
供稿:网友

无序广播

没有顺序的广播,所有广播中的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.java

package 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.java

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表