【Android】BroadcastReceiver
2021/6/8 10:24:30
本文主要是介绍【Android】BroadcastReceiver,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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(); //实例化localBroadManager localBroadcastManager = LocalBroadcastManager.getInstance(getApplicationContext()); //注册本地广播 //本地广播只可以动态注册 IntentFilter intentFilter = new IntentFilter("com.example.local.broadcast"); localBroadcastManager.registerReceiver(localBroadReceive,intentFilter);
这篇关于【Android】BroadcastReceiver的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-05feign默认connecttimeout和readtimeout是多少-icode9专业技术文章分享
- 2024-07-05idea控制台,日志太多,导致部分想看得日志被刷走 搜不到-icode9专业技术文章分享
- 2024-07-05The server selected protocol version Tls10 is not accepted by client preferences [TLs12]-icode9专业技术文章分享
- 2024-07-05怎么清理项目缓存-icode9专业技术文章分享
- 2024-07-04安装 Eyoucms详细图文教程-icode9专业技术文章分享
- 2024-07-04ueditor 复制文章时,图片的链接是一个下载图片地址,该如何处理?-icode9专业技术文章分享
- 2024-07-04怎样判断host有没有对wordpress有缓存呢-icode9专业技术文章分享
- 2024-07-04具有编译功能的系统make后,无法ssh连接-icode9专业技术文章分享
- 2024-07-04make后如何升级ssh-icode9专业技术文章分享
- 2024-07-03微信支付提示下单账户与支付账户不一致-icode9专业技术文章分享