【Android】BroadcastReceiver

【Android】BroadcastReceiver,第1张

概述BroadcastReceiver详解BroadcastReceiver概述广播的俩种注册方式静态注册动态注册俩种广播类型标准广播有序广播本地广播BroadcastReceiver概述BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。在Android系统中,广播

broadcastReceiver详解BroadcastReceiver概述广播的俩种注册方式静态注册动态注册俩种广播类型标准广播有序广播本地广播

broadcastReceiver概述

broadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。


在AndroID系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等 *** 作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。


AndroID中的广播机制设计的非常出色,很多事情原本需要开发者亲自 *** 作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握AndroID系统提供的一个开发利器,那就是broadcastReceiver。下面我们就对broadcastReceiver逐一地分析和演练,了解和掌握它的各种功能和用法。


广播的俩种注册方式静态注册
静态注册需要在AndroIDManifest.xml文件中的节点里进行注册
自定义一个类来继承broadcastReceiver
import androID.content.broadcastReceiver;import androID.content.Context;import androID.content.Intent;import androID.util.Log;import androID.Widget.Toast;public class MybroadReceiver extends broadcastReceiver {    @OverrIDe    public voID onReceive(Context context, Intent intent) {        Toast.makeText(context,"自定义广播接收者收到了信息",Toast.LENGTH_SHORT).show();        Log.e("aaaaaaa","接收到广播啦");    }}

然后在xml文件里面进行注册

<receiver androID:name=".broadcastReceiver.MybroadReceiver">       <intent-filter>           <action androID:name="androID.net.conn.CONNECTIVITY_CHANGE" />           <category androID:name="androID.intent.category.DEFAulT" />       </intent-filter></receiver>

动态注册

动态注册只需要在activity里注册就行

mybroadcastReceiver broadcastReceiver = new mybroadcastReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("androID.net.conn.CONNECTIVITY_CHANGE");registerReceiver(broadcastReceiver,intentFilter);

俩种广播类型标准广播

完全异步执行的广播,所有的广播接收器会在同一时间接收到广播
标准广播就是

Intent intent = new Intent("androID.net.conn.CONNECTIVITY_CHANGE");sendbroadcast(intent);

有序广播

同步执行的广播,同一时间只有一个广播接收器可以接收到广播(按照优先级来,优先级越高越早接收到,优先级可选-1000-1000),当这个广播的逻辑完成之后才会传给下一个广播,并且在此广播接收的时候还可以终止,这样下面的就不会再次接收到此广播了。

Intent intent = new Intent("androID.net.conn.CONNECTIVITY_CHANGE");sendOrderedbroadcast(intent);

优先级的设置

<receiver androID:name=".broadcastReceiver.MybroadReceiver">       <intent-filter androID:priority="1000">           <action androID:name="androID.net.conn.CONNECTIVITY_CHANGE" />           <category androID:name="androID.intent.category.DEFAulT" />       </intent-filter></receiver>

本地广播

前面写的广播都是全局广播!这同样意味着我们APP发出的广播,其他APP都会接收到, 或者其他APP发送的广播,我们的APP也同样会接收到,这样容易引起一些安全性的问题!而 AndroID中给我们提供了本地广播的机制,使用该机制发出的广播只会在APP内部传播,而且 广播接收者也只能收到本应用发出的广播!
本地广播无法通过静态注册方式来接受,相比起系统全局广播更加高效

LocalbroadReceive localbroadReceive = new LocalbroadReceive();//实例化localbroadManagerlocalbroadcastManager = LocalbroadcastManager.getInstance(getApplicationContext());//注册本地广播//本地广播只可以动态注册IntentFilter intentFilter = new IntentFilter("com.example.local.broadcast");localbroadcastManager.registerReceiver(localbroadReceive,intentFilter);

总结

以上是内存溢出为你收集整理的【Android】BroadcastReceiver全部内容,希望文章能够帮你解决【Android】BroadcastReceiver所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1001558.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存