Android 广播组件的简单认识+应用

本文介绍了Android平台中的广播机制,包括标准广播与有序广播的区别及应用场景,并详细解释了如何创建广播接收器、动态与静态注册方法,以及如何发送自定义广播。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单认识

广播机制的作用:

一句话说白就是消息通知,例如平时使用的软件,断网时,就经常有看到Toast提示的 “无法连接到网络”、使用微信或者其他软件在不同的手机上重复登录,逼迫下线的已登账号返回登录界面的动作等都是用到了广播机制

广播的类型主要分为两种:

1.标准广播-----异步执行广播

一条标准广播发出后,所有广播接收器都将在同一时间收到,没有先后顺序,发出后也将无法截断

2.有序广播-----同步执行广播

一条有序广播发出后,所有广播接收将会按优先级别先后接收该广播,广播被优先级高的接收器接收后可被其截断

简单应用

1.广播接收器的创建+注册广播

2.发自定义广播

广播接收器的创建:创建一个继承自BroadcastReceiver的类就OK

    class ForceOfflineReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(final Context context, Intent intent) {
            AlertDialog.Builder builder=new AlertDialog.Builder(context);
            builder.setTitle("Warning");
            builder.setMessage("You are fored to be offline.Please try to login agin.");
            builder.setCancelable(false);
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    ActivityCollector.finishAll();
                    Intent intent=new Intent(context,MainActivity.class);
                    context.startActivity(intent);
                }
            });
            builder.show();
        }
    }

这个类重写onReceive,这里就可以看到,当程序收到广播后,进行相应的逻辑处理就是在该方法内去写

注册广播(有两种方式)

1.动态注册

2.静态注册

动态注册

IntentFilter intentFilter=new IntentFilter();
        intentFilter.addAction("com.example.haha.broadcasttest.FORCE_OFFLINE");//添加指定要接收的广播
        receiver=new ForceOfflineReceiver();
        registerReceiver(receiver,intentFilter);//进行广播注册 第一个参数:广播接收器 第二个参数: 指定要接收的广播


静态注册

<receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>

在AndroidManifest.xml文件里去添加receive标签,再在receiver里添加intent-filter标签,对比动态,这段代码类似动态注册,这里就不多说

现在静态注册这段代码不用去手打,可以自动生成

com.example.XXX包(右击)-->(选择)New-->(选择)Other-->(选择)Broadcast Receiver,这样就完成自动创建一个接收器,注册代码段也会自动添加到在AndroidManifest.xml文件里。

如何发一条自定义广播

上面指定的广播都是标准广播,异步发送无法截断

接下来通过自定义广播的学习去感受 标准广播 和 有序广播

自定义标准广播

Intent intent=new Intent("com.example.haha.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);


自定义有序广播 

Intent intent=new Intent("com.example.haha.broadcasttest.MY_BROADCAST");
sendOrderedBroadcast(intent,null);

设置有序广播的接收优先级别 直接在intent-filter标签里添加 priority的属性就行,数值越大,优先级越高   数值范围(-1000到1000)

ps:在不声明优先级的前提下,动态注册的广播接收器比静态注册的优先级高

静态注册设置优先级

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

动态注册设置优先级

intentFilter.setPriority(-1000);


使用本地广播

先谈下为什么需要本地广播

前面我们说到的广播,发出去,手机所有的应用都会收到,那就会带来信息安全上的问题、被截断、接收到其他程序的垃圾广播等一系列问题。

所以使用本地广播的话,可以限制发出的广播和接收到的广播范围仅在本程序内。

使用 LocalBroadcastManager 对广播进行管理

先获取LocalBroadcastManager的实例:由LocalBroadcastManager.getIntance()返回一个实例 localBroadcastManager

然后由该实例发送广播:localBroadcastManager.sendBroadcast(intent)

既然是接收本地的广播,那么自然注册的也应该是本地接收器:localBroadcastManager.registerReceiver(Receiver,intent);

截断广播

就一句

在onReceive()里写abortBroadcast();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值