广播是一种消息机制,有消息的发送者和接收者,广播可实现组件间通讯,进程间通讯。
广播的发送
全局广播分类
1.发送普通广播
Intent intent=new Intent("123");
sendBroadcast(intent);
2.发送有序广播:
有序广播是:广播接收者根据自己的优先级先后接收广播
优先级:
<receiver android:name="ddd">
<intent-filter android:priority="100"/>
</receiver>
priority范围是:Integer.MIN~Integer.MAX,系统注册Receiver的IntentFIlter的priority的范围-1000~1000。当priority一样时,代码注册的接收器优先于静态注册的接收器,先安装高于后安装的广播接收器。
setResult:函数把结果传给下一个接受者,getResult函数来取得上个BroadcastReceiver返回的结果,
abort:函数来让系统丢弃该广播,使用该广播不再传送到别的BroadcastReceiver。
Intent intent=new Intent("123");
sendOrderedBroadcast(intent,null);
3.发送粘性广播(在android 5.0/api 21中deprecated,不再推荐使用)
粘性广播:这种广播发出后会一直存在,直到有人Context.removeStickyBroadcast移除他,发这种广播的应用要申请BROADCAST_STICKY权限。
Intent intent=new Intent("123");
sendStickyBroadcast(intent);
广播的权限
(尽量不发给第三方,限制别人收)发出者定义权限,接收者申请权限。
发出者
<permission android:name = "com.android.permission.RECV_XXX"/>
sendBroadcast(intent,"com.android.permission.RECV_XXX");
接收者
<uses-permission android:name="com.android.permission.RECV_XXX"></uses-permission>
(尽量不接第三方,限制别人发给我)接收者定义权限,发出者申请权限
接收者
<permission android:name = "com.android.permission.SEND_XXX"/>
<receiver android:name=".XXXReceiver"
android:permission="com.android.permission.SEND_XXX">
</receiver>
发出者
<uses-permission android:name="com.android.permission.SEND_XXX"></uses-permission>
sendBroadcaset(intent)
广播的标志位
intent.addFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES);
从3.1开始广播默认带这个默认带这个标志位。是说,此广播不发给没有运行的应用
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
此广播发给没有运行的广播。
应用内广播
Intent intent = new Intent();
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
增强广播的安全性:
1.不发给第三方,发送广播时,指定特定广播接收器所在的包名,这样指定包中的接收器才会收到,具体是通过intent.setPackage(packageName)指定在。
2.不接受第三方,<receiver android:name="ddd" android:exported="false">将exported属性人为设置成false默认是true,不接收第三方匹配的广播。
3.让广播带上权限认证permission。
4.使用应用内广播机制,即安全又高效。
广播的接收
BroadcastReceiver
//定义 public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String name = intent.getStringExtra("name"); } } // 注册 // 静态注册 <receiver android:exported=["true" | "false"] android:permission="string" > </receiver> <receiver android:name=".MyBroadcastReceiver" > <intent-filter> <action android:name="BROADCAST_ACTION" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> // 动态注册 mBroadcastReceiver = new MyBroadcastReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(BROADCAST_ACTION); registerReceiver(mBroadcastReceiver, intentFilter); // 解注册 unregisterReceiver(mBroadcastReceiver);
相关推荐
BroadCastReceiver
对于这样的BroadcastReceiver,通常是在产生某个特定的系统事件之后,进行相应的操作,比如说wifi网卡打开时,给用户一个提示;ii. 第二种注册方法相对第一种要灵活的多,这样注册的BroadcastReceiver通常用于更新UI...
android的broadcastReceiver的介绍。
动态注册broadcastreceiver短信接受
Android \BroadCastReceiver 最全的简介
android BroadcastReceiver相关测试代码。我测试所用的。
本集中提到的BroadcastReceiver就是此应用的典范。Android通过广播机制,能够让订阅者接受到想听到的广播,并进行进一步的处理和操作。如果你想在虚拟的android世界中创建属于你自己的电台广播,那么就赶紧点击本集...
BroadcastReceiver学习(01)
演示了BroadcastReceiver的简单用法。
Android下BroadcastReceiver的简单示例。详见博客:http://www.cnblogs.com/plokmju/p/android_BroadcastReceiver.html
Android学习之BroadcastReceiver总结
这是一个关于Android中四大组件之一 —— BroadcastReceiver,即广播的一个demo,里面涉及到BroadcastReceiver的两种注册方式,也简单的实现了广播,通过点击按钮发送广播,收到广播后打印日志。
Android-BroadcastReceiver高级应用,详细参见博客:http://www.cnblogs.com/plokmju/p/android_SystemBroadcastReceriver.html
博客《BroadcastReceiver详解》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/38710901
使用人群:BroadcastReceiver初学者。 里面涉及BroadcastReceiver的静态注册(无序广播)、动态注册(无序广播)、有序广播。 项目对应:https://shuaici.blog.csdn.net/article/details/118337894
BroadcastReceiver通过接口回调更新界面,BroadcastReceiver不写在Activity里面,便于代码的封装,更加便于阅读
这是一个国外的android手机应用源码实例,BroadcastReceiver这个应用我还没用过,不知道是干什么的,源码可为学习安卓开发的做些参考吧。
介绍BroadcastReceiver使用的demo,具体的使用方法可以参看我的博客