搞安全的,用到哪学到哪
广播的几个部分
1.发送广播的逻辑(需要先定义Intent方法,再进行send)
2.接收广播的逻辑(继承BroadcastReceiver方法)
3.开关控制广播,也就是注册广播的过程(对应的register方法)
Notice:广播注册又有动态注册和静态注册
动态注册实现广播的收发
MainActicity
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import com.example.myapplication.receiver.Receiver;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(this); //添加按钮监听事件
}
Receiver receiver; //创建接受器对象
@Override
public void onClick(View view) {
Intent intent = new Intent(Receiver.action); //创建意图对象,传入参数为要发送的广播信息
sendBroadcast(intent); //发送广播信息
}
//实现广播接收的开关
@Override
protected void onStart() {
super.onStart();
receiver = new Receiver();
IntentFilter filter = new IntentFilter(Receiver.action); //创建过滤器,只接收Receiver.action的广播
registerReceiver(receiver, filter); //注册接收器
}
@Override
protected void onStop() {
super.onStop();
unregisterReceiver(receiver); //注销接收器
}
}
广播接收类
package com.example.myapplication.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
//继承广播接收者类
public class Receiver extends BroadcastReceiver {
public static final String action = "abc"; //设置广播内容,供发送和接收使用
@Override
public void onReceive(Context context, Intent intent) {
if(intent != null && intent.getAction().equals(action)){ //接收到广播打印信息
Log.d("receiver","receiver successful");
}
}
}
效果
有序广播
描述
给一堆广播设置优先级,有序接收
具体顺序
1、优先级越大的接收器,越早收到有序广播;
2、优先级相同,越早注册的接收器越早收到有序广播
实现
- 调用setPriority方法
//实现广播接收的开关
@Override
protected void onStart() {
super.onStart();
receiver = new Receiver();
IntentFilter filter = new IntentFilter(Receiver.action); //创建过滤器,只接收Receiver.action的广播
filter.setPriority(8); //设置优先级
registerReceiver(receiver, filter); //注册接收器
}
静态注册(android8.0以后)
- 需要通过component给静态注册的广播指定包名
@Override
public void onClick(View v) {
Intent intent = new Intent("广播内容");
// 通过setComponent方法指定接收器的完整路径
ComponentName componentName = new ComponentName(this, "receiverUrl");
intent.setComponent(componentName); // 设置意图的组件信息
sendBroadcast(intent);
}