Android中发送有序广播案例

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

Android系统提供了两种广播类型,一种是有序广播,一种是有序广播。

(1)无序广播是完全异步执行,发送广播时所有监听这个广播的广播接收者都会收到此消息,但接收的顺序不确定。

(2)有序广播是按照接收者的优先级接收,只有一个广播接收者能接收信息,在此广播接收者中逻辑执行完毕后,才会继续传递。

实验要求:通过sendOrderedBroadeast()发送一条有序广播

1.在activity-main.xml布局文件中代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:background="@drawable/stitch_one"
    tools:context="cn.edu.bzu.orderedbroadcast.MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:onClick="send"
        android:layout_marginTop="50dp"
        android:text="发送有序广播"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:background="#FFD202"
        android:textSize="20sp"
        />
</RelativeLayout>

2.在MainActivity中代码如下:
package cn.edu.bzu.orderedbroadcast;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public  void send(View view){
        Intent intent=new Intent();
        //定义广播事件类型
        intent.setAction("Intercept_Stitch");
        //发送广播
       sendOrderedBroadcast(intent,null);
    }
}
3.创建三个广播接收者

(1)MyBroadcastReceiverOne

(2)MyBroadcastReceiverTwo

(3)MyBroadcastReceiverThree

(1)在MyBroadcastReceiverOne中代码如下:

package cn.edu.bzu.orderedbroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class MyBroadcastReceiverOne extends BroadcastReceiver {
    public MyBroadcastReceiverOne() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("MyBroadcastReceiverOne","自定义的广播接收者one,接收到了广播事件");
    }
}

(2)在MyBroadcastReceiverTwo中代码如下:

package cn.edu.bzu.orderedbroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class MyBroadcastReceiverTwo extends BroadcastReceiver {
    public MyBroadcastReceiverTwo() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("MyBroadcastReceiverTwo","自定义的广播接收者Two,接收到了广播事件");
    }
}

(3)在MyBroadcastReceiverThree中代码如下:

package cn.edu.bzu.orderedbroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class MyBroadcastReceiverThree extends BroadcastReceiver {
    public MyBroadcastReceiverThree() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("MyBroadcastReceiverThree","自定义的广播接收者Three,接收到了广播事件");
    }
}
4.在配置文件AndroidManifest中代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.edu.bzu.orderedbroadcast">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
        android:name=".MyBroadcastReceiverOne">
        <intent-filter android:priority="1000">
            <action android:name="Intercept_Stitch"/>
        </intent-filter>
        </receiver>
        <receiver
            android:name=".MyBroadcastReceiverTwo">
            <intent-filter android:priority="200">
                <action android:name="Intercept_Stitch"/>
            </intent-filter>
        </receiver>
        <receiver
            android:name=".MyBroadcastReceiverThree">
            <intent-filter android:priority="600">
                <action android:name="Intercept_Stitch"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>
5.实验效果图:

运行程序后解决如下问题:

问题1:程序启动后,单击“发送有序广播”按钮,发出一条广播事件,此时观察LogCat窗口下的提示信息,输出什么?为什么?

点击按钮后出现如下图所示提示信息,原因是有序广播根据优先级接收广播信息的,在配置文件中广播接收者One的priority值最大,所以它先接收到广播,其次是Three,最后是Two。其中android:priority="值"是用来设置广播接收者的优先级的,值越大,优先级别越高。


问题2:若将广播接收者MyBroadcastReceiverTwo优先级同样设置为1000,并将MyBroadcastReceiverTwo注册在MyBroadcastReceiverOne前面,再来运行程序,观察结果,你能得出什么结论?

修改配置文件AndroidManifest中代码如下:

        <receiver
            android:name=".MyBroadcastReceiverTwo">
            <intent-filter android:priority="1000">
                <action android:name="Intercept_Stitch"/>
            </intent-filter>
        </receiver>
        <receiver android:name=".MyBroadcastReceiverOne">
            <intent-filter android:priority="1000">
                <action android:name="Intercept_Stitch"/>
        </intent-filter>
        </receiver>

        <receiver
            android:name=".MyBroadcastReceiverThree">
            <intent-filter android:priority="600">
                <action android:name="Intercept_Stitch"/>
            </intent-filter>
        </receiver>
运行程序出现如下图所示提示信息,原因是当广播接收者的优先级别相同时,先注册的广播接收者先接收到广播。


问题3:修改MyBroadcastReceiverTwo如下,观察结果,你又可以得出什么结论?

public class MyBroadcastReceiverTwo extends BroadcastReceiver {
    public MyBroadcastReceiverTwo() {
    }

    @Override
     public void onReceive(Context context, Intent intent) {
        Log.i("MyBroadcastReceiverTwo","自定义的广播接收者Two,接收到了广播事件");
        abortBroadcast();//有序广播拦截器
        Log.i("MyBroadcastReceiverTwo","我是广播接收者Two,广播被我终止了");
    }

}
运行程序出现如下图所示提示信息,原因是广播接收者Two的优先级最高,所以在Two中写一个拦截器,优先级低的广播接收者将接收不到广播信息,所以One和Three没有接收到广播事件,也就没有打印关于它们的信息。




Android BroadcastReceiver实例Demo(有序广播发送 上一次介绍了Android BroadcastReceiver的广播发送,这一次主要介绍有序广播发送 立即下载

相关推荐

Android发送有序广播案例代码

本篇文章主要介绍了Android发送有序广播案例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

发送有序广播案例

一、首先,编写一个用户交互界面 代码如下图所示 二、编写点击发送有序广播按钮时的事件处理 代码如图所示 三、创建三个广播接收者 代码如下 四、注册广播接收者 代码如图所示 五、运行结果如图所示

bin_aquarius的博客 572

Android组件(三)Broadcast

BroadcastReceiver broadcastreceiver 1.简述Broadcast 2.广播 2.1 标准广播(Normal broadcasts) 2.2 有序广播(Ordered broadcasts) 2.3 粘性广播(Sticky Broadcast) 3.动态注册 3.1 什么是动态注册 3.2 动态注册步骤 3.3 动态注册监听网络变化 4.静态注册 3.1 什么是静态注册 3.2 静态注册实现开机启动 4.发送标准广播 5.发送有序广播 6.本地广播

Rpk712的博客 2348

android广播接收器的无序广播有序广播

android广播接收器的无序广播有序广播

ShiXinXin_Harbour的博客 2970

android 发送广播的源码分析,Android发送有序广播案例代码

Android系统提供了两种广播类型,一种是有序广播,一种是有序广播。(1)无序广播是完全异步执行,发送广播时所有监听这个广播广播接收者都会收到此消息,但接收的顺序不确定。(2)有序广播是按照接收者的优先级接收,只有一个广播接收者能接收信息,在此广播接收者中逻辑执行完毕后,才会继续传递。实验要求:通过sendOrderedBroadeast()发送一条有序广播1.在activity-main.x...

weixin_39862899的博客 527

安卓应用开发数鸭子

实验报告。

2301_80950699的博客 1858

Android 发送有序广播

一、运行效果图程序代码MainActivitypublic class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); se

记录编程踩过的坑 3254

Android--广播的类型及拦截有序广播案例

Android系统中,根据广播的执行顺序不同,可将其分为有序广播和无序广播。  1.有序广播 有序广播是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。此时的广播接收器是有先后顺序,优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法收

winnie_hu的博客 6054

发送有序广播

本次案例要实现的功能是拦截一条有序广播。通过send()OrderedBroadcast()方法发送一条有序广播。 并运行程序: 1:程序启动后,单击“发送有序广播”按钮,发出一条广播事件,此时观察LogCat窗口下的提示信息 2:若将广播接收者MyBroadcastReceiverTwo优先级同样设置为1000,并将MyBroadcastReceiverTwo

wl1fy的博客 441

有序广播与无序广播案例

1、通过一个案例来讲解有序广播与无序广播的使用。 无序广播博是完全异步的,发送广播时所有监听设广播广播接受者都会接收到此消息,但接收的顺序不确定。 有序广播,会按接受者的优先级接收,只有一个广播接受者能接收消息,在此广播接受者中逻辑执行完毕,才会继续传递。 案例效果图如下 activity_main.xml         xmlns:tools="http://sc

qq_37651272的博客 540

Android学习之路——广播接受者

实现目标 布局文件<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activ

waitwolf的博客 319

Android--有序广播的实例解析--案例《拦截有序广播

有序广播是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够接受到这条信息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以,此时的广播接收器是有先后顺序的,并且可以被拦截。 如下是一个案例: 1.创建一个布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an

lg_1996的博客 1413

广播--案例:拦截有序广播

广播案例:拦截有序广播1.广播的类型可以根据广播执行顺序的不同,分为有序广播和无序广播。 1)无序广播有序广播的接受者顺序如下图所示,上面为无序广播,下面为有序广播 2)有序广播的基本知识 3)广播类型 2、案例的实现 1)布局文件<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=

qq_37739707的博客 2045

Android】安卓四大组件之广播知识总结

Override// 获取布局中的按钮并设置点击事件监听器@Override// 创建一个 Intent,指定广播的动作// 设置广播发送给当前应用的接收器// 发送广播});@OverrideToast.makeText(context, "在 MyBroadcastReceiver 中接收", Toast.LENGTH_LONG).show();@Override。

Patrick_yuxuan的博客 1358

Android forhelp+orderBroadcast+课后习题无序广播 ch08广播机制

Android forhelp+orderBroadcast ch08广播机制

qq_52077555的博客 2683

有序广播和无序广播

1.创建activity_main.xml布局文件: 2.创建MainActivity.java: 3.创建三个广播接收者MyBroadcastReceiverOne、MyBroadcastReceiverTow、MyBroadcastReceiverThree: 4.补充清单文件AndroidManifest.xml: 5.结果图:

Lg0723的博客 482
上一篇: Android中实现程序的完全退出登录
下一篇: Android中电话拦截器案例
shasha1021
博客等级 码龄10年 27粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值