Android广播(接收,发送,标准,有序,全局,本地,实战,填坑)

本文详细介绍了Android广播的原理和使用,包括标准广播、有序广播的注册与发送,以及本地广播的实践。通过实例展示了如何动态和静态注册广播接收器,如何在不同场景下发送广播,特别强调了静态注册的注意事项和本地广播的安全性优势。文章还通过强制下线功能的实现,演示了广播在实际应用中的价值。
摘要由CSDN通过智能技术生成

前言

写完了,人也麻了,本来想着挺好李姐的东西,咋能写这么长一串,确实,难顶。写的还挺仔细的。
在这里插入图片描述

一、广播是什么?

通俗点李姐,广播就是安卓系统本身发出的声音,我们可以通过安卓提供给我们的一系列内容来接收和发出广播,以此来简单快捷地实现一些功能。

二、广播分类

1.标准广播

标准广播是完全异步执行(异步同步详情见百度,概念很好李姐)同时不可被截断,也就是说当前发出的一号广播,会被ABC三个接收器同时接收到。如下图
在这里插入图片描述

2.有序广播

顾名思义,一种有序的,同步的广播,它是按照次序来传递,先被优先级高的接收器接收到,响应完成后再传递给接收器B然后C,同时可以进行截断,比如在A处截断,后续B和C就无法接收到广播。如下图
在这里插入图片描述

三、广播的使用(接收器)

上面介绍了广播的基本信息,接下来进行一些广播的简单使用。

1.广播的注册

使用广播我们首先要进行广播的注册,注册广播有两种方式,动态注册和静态注册。动态注册的优点是可以实现灵活的广播注册和注销,但缺点就是必须要程序启动后才能接收到广播。如果想要在程序未启动时,比如刚开机的情况下接受到系统的开机广播,那就需要使用静态注册,但静态注册长期监听,消耗更多资源,因此大部分情况建议优先使用动态注册解决问题。

1.1动态注册实例

广播动态注册需要我们在代码中进行注册,首先写一个广播接收器,继承自BroadcastReceiver类

public class myReceiver extends BroadcastReceiver {
   
    @Override
    public void onReceive(Context context, Intent intent) {
   
        //事务处理代码
        //在这里写上相关的处理代码,一般来说,不要此添加过多的逻辑或者是进行任何的耗时操作
        //因为广播接收器中是不允许开启多线程的,过久的操作就会出现报错
        //因此广播接收器更多的是扮演一种打开程序其他组件的角色,比如创建一条状态栏通知,或者启动某个服务
        String action = intent.getAction();
        if (Intent.ACTION_SCREEN_OFF.equals(action)) {
   
            //屏幕关闭
            Log.d(TAG, "屏幕关闭");
        } else if (Intent.ACTION_SCREEN_ON.equals(action)) {
   
            Log.d(TAG, "屏幕打开");
        }
    }
}

这里我们实现的广播功能是监听屏幕的亮起和关闭。上面这片代码整体结构很容易理解,定义一个action作为接收到的广播信息,同时屏幕亮起和关闭的相关广播内容是安卓自带的,直接使用就行。在这里插入图片描述
逻辑部分就更容易理解了,equals方法判断打印。
到此是我们接收器中写的东西。接下来看主活动中要做什么。
首先第一步,将接收器实例化,这个用牛牛想都知道要做这个,然后,广播对吧,要设置频道,然后完成对广播的注册,在使用完广播后,要对广播进行注销。一步一步来,首先实例化接收器:
在这里插入图片描述

//      创建接收器
        myreceiver = new myReceiver();

ps:将其设置为全局变量,便于注册和注销。
然后,

//      意图过滤器
        intentFilter = new IntentFilter();
//      添加要监听的广播action
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);

/* 这个意图过滤器先李姐成标准流程就行 */。
这里意图过滤器简单点解释就是选择你想要监听的广播,因为系统中广播的使用是非常频繁的,而我们某一个广播接收器其实只处理某一个或者某几个广播,而过滤的内容其实就是这个功能,上述我们addAction加入的就是屏幕亮起和熄灭的广播内容。

注册广播接收器

//      注册广播接收器
        registerReceiver(myreceiver,intentFilter);

注意,到这还没完,还有最后一步,广播的注销。什么时候注销?不需要用到的时候,在这里咱们直接搞成活动销毁的时候,当个栗子直接用。

    @Override
    protected void onDestroy() {
   
        super.onDestroy();
        //取消注册 注销
        unregisterReceiver(myreceiver);
    }

这玩意应该还比较眼熟吧。销毁活动的方法,我们重写一下,别忘了把它本来的东西放进去。
在这里插入图片描述
到这完工,测试一下效果。
在这里插入图片描述

1.2 静态注册实例

首先还是,接收器先搞一个。

public class bReceiver extends BroadcastReceiver {
   
    @Override
    public void onReceive(Context context, Intent intent) {
   
        Toast.makeText(context,"芜湖",Toast.LENGTH_LONG).show();
    }
}

然后就到了和动态注册有区别的地方,静态注册是在AndroidMainfest.xml文件中注册,打开AndroidMainfest.xml文件,我们需要添加如下内容

<receiver
            android:name=".broadcastreceiver.aReceiver"
            android:enabled="true"
            android:exported="true">
     
</receiver>

enable这个属性是设置是否启用这个广播接收器,exported这个属性是设置是否允许这个接收器接收到本程序以外的广播(这个涉及到全局广播和局部广播相关内容,咱们等会再讲)。
然后再为其添加:

<intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>

对比动态添加,这个就是action。广播内容也是由系统发出,我们只管接收。
全部内容如下:

<receiver
            android:name=".broadcastreceiver.aReceiver"
            android:enabled="true"
            android:exported="true">
            <intent
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值