Android的有序广播和无序广播(sendorderBroadcast)

我们有序的广播和无序的广播的区别就是有序的广播可以被拦截使用abortBroadcast()我们无序的广播的话就是每一个广播接收者都可以接收到
于此同时我们的有序的广播还可以指定就是一定可以接收到广播的广播接收者

1: 所有的广播接受者都需要我们手动的添加意图过滤器

2:可以在minifest文件中指定广播接收者的优先级通过priority优先级越高 就越早被访问到,如果优先级相同就是按就近一致原则。

好的我们现在就使用代码的方式来对有序的广播做一个实战案例:
页面布局文件代码:
在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
<!--优先级的创建就是广播接收者优先级的创建先搭建ui界面-->
    <Button
        android:id="@+id/send"
        android:text="IntentIntent"
        android:textSize="30dp"
        android:onClick="send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
<!--在这个位置我们先讲一下我们的有序广播是存在优先级的
 就是我们的优先级要在andfroid的menifest的目录下进行定义
-->

</LinearLayout>

接下来就是Mainactivity中的代码:

package com.example.orderbroadcast;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
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){
         //在我们的有序的广播中我们调用的是sendorderBroadcast,第一个参数指的是意图,第二个参数指的是广播接收者的权限
        Intent intent = new Intent();
        //定义一个广播事件的类型
        intent.setAction("我是一个有序的广播");
        //发送广播我们发送了一个广播后就要有广波接收者去收
//        sendOrderedBroadcast(intent ,null);
        //我们可以指定广播接收者在通过sendOrderedcastBroadcast()
        MyBroadcastReceiverThree receiver = new MyBroadcastReceiverThree();
        //现在我们就创创建指定了一个一定会收到广播的广播接受者
        sendOrderedBroadcast(intent , null ,receiver,null,0,null,null);

    }
}

接下来就是三个广播接收者的代码:
在这里插入图片描述

package com.example.orderbroadcast;

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

public class MyBroadcastReceiverOne extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("MyBroadcastReceiverOne","自定义的广播接收者收到了广播");
        //我们的有序广播就是就是优先级的高的就先收到刚播如果他们的优先级相同的话就是
        //谁先声明就谁先收到,有序广播有一个特点就是高优先级的广播如果收到广播后可以对广播进行拦截
        //那么后面的广播接收者就不能接收到广播了。
        //我们在有序广播中拦截广播的方法就是使用abortBroadcast()来进行拦截
        abortBroadcast();
        Log.i("MyBroadcastReceiverOne","自定义的广播接收者收到了广播广播停止了");
    }
}

在这里插入图片描述

package com.example.orderbroadcast;

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

public class MyBroadcastReceiverTwo extends BroadcastReceiver {

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

在这里插入图片描述

package com.example.orderbroadcast;

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

public class MyBroadcastReceiverThree extends BroadcastReceiver {
      public  MyBroadcastReceiverThree(){

      }

    @SuppressLint("LongLogTag")
    public void onReceive(Context context, Intent intent) {
        Log.i("MyBroadcastReceiverThree","自定义的广播接收者收到了广播");
    }
}

接下来就是它的布局文件的代码:
在这里插入图片描述运行的结果:
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值