43.android广播-有序广播

本文详细介绍了Android有序广播的工作原理,包括如何设置优先级、如何通过abortBroadcast()终止广播以及如何使用setResultData()来修改广播数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

无序广播

没有顺序的广播,所有广播中的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);
	}

}

 

 

 

 

标题基于SpringBoot+Vue的社区便民服务平台研究AI更换标题第1章引言介绍社区便民服务平台的研究背景、意义,以及基于SpringBoot+Vue技术的研究现状和创新点。1.1研究背景与意义分析社区便民服务的重要性,以及SpringBoot+Vue技术在平台建设中的优势。1.2国内外研究现状概述国内外在社区便民服务平台方面的发展现状。1.3研究方法与创新点阐述本文采用的研究方法和在SpringBoot+Vue技术应用上的创新之处。第2章相关理论介绍SpringBoot和Vue的相关理论基础,以及它们在社区便民服务平台中的应用。2.1SpringBoot技术概述解释SpringBoot的基本概念、特点及其在便民服务平台中的应用价值。2.2Vue技术概述阐述Vue的核心思想、技术特性及其在前端界面开发中的优势。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue如何有效整合,以提升社区便民服务平台的性能。第3章平台需求分析与设计分析社区便民服务平台的需求,并基于SpringBoot+Vue技术进行平台设计。3.1需求分析明确平台需满足的功能需求和性能需求。3.2架构设计设计平台的整体架构,包括前后端分离、模块化设计等思想。3.3数据库设计根据平台需求设计合理的数据库结构,包括数据表、字段等。第4章平台实现与关键技术详细阐述基于SpringBoot+Vue的社区便民服务平台的实现过程及关键技术。4.1后端服务实现使用SpringBoot实现后端服务,包括用户管理、服务管理等核心功能。4.2前端界面实现采用Vue技术实现前端界面,提供友好的用户交互体验。4.3前后端交互技术探讨前后端数据交互的方式,如RESTful API、WebSocket等。第5章平台测试与优化对实现的社区便民服务平台进行全面测试,并针对问题进行优化。5.1测试环境与工具介绍测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值