Android开发四大组件——broadcastReceiver基本使用介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发四大组件——broadcastReceiver基本使用介绍相关的知识,希望对你有一定的参考价值。

问题背景

安卓日常开发和学习过程中,可能会时不时的用到或者接触到广播。通常理解广播有动态注册和配置文件中静态注册两种方式。本文会对两种方式进行介绍。

问题分析

首先看下Google官方声明: Beginning with android 8.0 (API level 26), the system imposes additional restrictions on manifest-declared receivers. If your app targets API level 26 or higher, you cannot use the manifest to declare a receiver for most implicit broadcasts (broadcasts that do not target your app specifically). 翻译如下: 从Android 8.0(API级别26)开始,系统对清单声明的接收器施加了额外的限制。如果您的应用程序以API级别26或更高为目标,则不能使用清单声明大多数隐式广播(不以应用程序为目标的广播)的接收方。 也就是说,从Android 8.0开始,系统对广播的静态注册做了限制,如果使用了自定义静态注册广播,那么不能通过隐式广播的方式进行接收

问题解决

1、广播动态注册使用

(1)定义自己的广播接收类,代码如下:

/**
 * @author baorant
 */
public class MyBroadcastReceiver2 extends BroadcastReceiver 
    private static final String TAG = "MyBaorantReceiver2";

    @Override
    public void onReceive(Context context, Intent intent) 
        Log.d(TAG, "MyBroadcastReceiver2 onReceive begin");
    

(2)在activity中动态注册,配置action,代码如下:

public class MainActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        ...
        registerBroadReceiver();
    

    private void registerBroadReceiver() 
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("MyBroadcastReceiver2");
        MyBroadcastReceiver2 myBroadcastReceiver = new MyBroadcastReceiver2();
        registerReceiver(myBroadcastReceiver, intentFilter);
    

(3)在本应用或者其他应用中可以发送隐式广播,代码如下:

        sendBroadBtn5.setOnClickListener(v -> 
            Intent intent = new Intent("MyBroadcastReceiver2");
            sendBroadcast(intent);
        );

运行结果如下:

2、广播静态注册使用

(1)定义自己的广播接收类,代码如下:

/**
 * @author baorant
 */
public class MyBroadcastReceiver extends BroadcastReceiver 
    private static final String TAG = "TestBaorantBroadcastReceiver";

    @Override
    public void onReceive(Context context, Intent intent) 
        Log.d(TAG, "TestBaorantBroadcastReceiver onReceive begin");
    

(2)manifest中进行静态注册,代码如下:

        <receiver android:name=".MyBroadcastReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="baorant"/>
            </intent-filter>
        </receiver>

(3)本应用或者三方应用中进行显示广播,代码如下:

        // setPackage方式
        sendBroadBtn3.setOnClickListener(v -> 
            Intent intent = new Intent("baorant");
            intent.setPackage("com.baorant.providerapplication");
            sendBroadcast(intent);
        );

        // setComponent方式
        sendBroadBtn4.setOnClickListener(v -> 
            Intent intent = new Intent("baorant");
            intent.setComponent(new ComponentName("com.baorant.providerapplication", "com.baorant.providerapplication.MyBroadcastReceiver"));
            sendBroadcast(intent);
        );

运行结果如下:

问题总结

本文对四大组件之一的广播进行了简单介绍,包括动态注册广播,以及对Android 8.0以后系统对静态广播的限制,禁用了隐式广播访问静态注册的广播接收器,介绍了两种显示访问静态注册的广播接收器的方式。有兴趣的同学可以进一步深入研究。

以上是关于Android开发四大组件——broadcastReceiver基本使用介绍的主要内容,如果未能解决你的问题,请参考以下文章

一个帖子学会Android开发四大组件

一天就学会Android开发四大组件

从源码的角度理解四大组件的工作过程——Android开发艺术探索笔记

Android的四大组件是哪些,它们的作用

Android开发学习-四大组件

入门Android 四大开发组件学习