安卓开发之广播接收器

搞安全的,用到哪学到哪

广播的几个部分

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张图片

有序广播

描述

给一堆广播设置优先级,有序接收

具体顺序
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);
    }

你可能感兴趣的:(安卓开发,android)