我们有序的广播和无序的广播的区别就是有序的广播可以被拦截使用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","自定义的广播接收者收到了广播");
}
}
接下来就是它的布局文件的代码:
运行的结果: