Broadcast详解:有序广播

本文介绍Android有序广播的应用,通过创建两个不同优先级的BroadcastReceiver实例,演示如何使用abortBroadcast方法中断后续广播接收器的调用。

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

以下是今天晚上学习的BroadcsatReceiver的有序广播的Demo

首先讲解一下:有序广播:orderBroadcast既然是有序的就涉及到几个广播接收器的先后顺序,我们Demo中创建两个Receiver的实例

首先在第一个广播接收器下我们声明接收器的优先权:android:priority:100以此来保证此接收器的第一接受优先权;第一个实例 如下:


public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "在MyBroadcastReceicer中收到广播",
                Toast.LENGTH_SHORT).show();
        //abortBroadcast方法是截断该广播接收器的接受,在注册清单文件中我们注册了次接收器的优先权
        // 所以在此之后的广播接收器已经不能接受到发出的广播了
        abortBroadcast();
        
    }
}

下面是Andorramainfest.xml的关键代码来注册该接收器

<receiver android:name=".MyBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <!--android:priroty设置有序广播的优先级别-->
    <intent-filter android:priority="100">
        <action android:name="com.example.shanshui.networkreceiver.MY_BROADCAST"/>
    </intent-filter>
</receiver>


在这之后我们在此Demo中添加一个Button来承载广播的发送,具体代码如下

        Button btn= (Button) findViewById(R.id.button);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new
                        Intent("com.example.shanshui.networkreceiver.MY_BROADCAST");
                //修改为有序广播只用这一行代码:
                sendOrderedBroadcast(intent,null);
//                sendBroadcast(intent);
            }
        });


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------




以下是第二个广播接收器的Demo

package com.example.shanshui.braodcastbemo2;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class AnotherBroadcstReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        Toast.makeText(context, "在AnotherBroadCast中接收到广播啦!",
                Toast.LENGTH_SHORT).show();

    }
}


同样的步骤也是需要给接收器在Androidmainfest.xml注册接收属性

<receiver
    android:name=".AnotherBroadcstReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="com.example.shanshui.networkreceiver.MY_BROADCAST"/>
    </intent-filter>
</receiver>

这样启动两个活动后,,由于第一个广播接收器设置了order的优先级别,且调用了abortBroadcast()方法,因此在这之后的receiver就被截断了


总结:Anddroid的广播机制很强大,也是安卓开发中的要点,在这节内容中我们接触到了权限;permission的概念:涉及到用户隐私与权限的时候,必须声明权限:否则程序启动就会报错!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值