广播详解
来源:互联网 发布:仿微博php 编辑:程序博客网 时间:2024/04/25 19:55
广播简介
上小学时,个高的学生负责敲钟,用于上下课。钟声响起,相当于向每个人发送了一个广播。广播有两种:标准/普通广播,有序广播。
标准广播(Normal broadcasts):在钟声响起之时,也就是向所有人发送了一条广播,所有人都能同一时刻收到,不考虑声音传播等问题,所以没有先后顺序可言,这类广播效率是最高的,也无法被截取。比如听到上课铃声的同学与老师都去上课。
有序广播(Ordered broadcasts):正所谓无规矩不成方圆,当下课铃声响起时,还需老师同意方能下课,甚至有的老师拖堂到下一节课。用专业术语描述就是:在同一时刻只有一个广播接收器能接受到该消息,当该广播接收器的逻辑处理完成后,广播才会继续往下传递,所以是有先后顺序的,并且前面的广播接收器还能截取正在传递的广播,不让他继续往下传递。
接受与发送广播
接受广播: Android系统有很多内置的广播,比如网络的变化,手机开机等,想要获取这些消息,就需要特定的接头暗号,例如:"天王盖地虎,宝塔镇河妖"。
public class MainActivity extends Activity{ private IntentFilter filter; private BootBroadcastReceiver bootReceiver; private @Override protected void onCreate (Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); filter=new IntentFilter(); filter.addAction("android.intent.action.BOOT_COMPLETED");//接头暗号 开机广播 bootReceiver=new BootBroadcastReceiver(); registerReceiver(bootReceiver,filter);//代码注册广播 } @Override protected void OnDestory(){ super.onDestory(); unregisterReceiver(bootReceiver);//注销广播 } class BootBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceiver(Context context,Intent intent){ //do something. ... } } }
依照上面的代码运行,肯定会报权限错误,开机运行是需要权限。
<user-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
在功能清单中添加上述权限,就可以达到设计的目标了。发送广播:广播可以跨应用在同一台设备上传递消息。也就是说我在QQ发送的广播,微信可以接受。就像系统的广播,你可以接受一样。 1》定义广播接收器
public class MyBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceiver(){ //do something ... } }
当MyBroadcastReceiver接受到广播时,就会执行do something中的事情了,当然少不了注册广播,也就是接头暗语。 2》注册广播
<application> ... <receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="com.hyco.yancy.MY_BR"/> </intent-filter> </receiver> </application>
"com.hyco.yancy.MY_BR" 就是接头暗号了。 3》发送广播
public class MainActivity extends Activity{ private @Override protected void onCreate (Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent=new Intent("com.hyco.yancy.MY_BR"); //intent 是可以通过键值对传递数据。 sendBroadcast(intent); } }
这样就完成了一条广播的发送,只是普通的广播。而有序广播只需要增加优先级,发送广播的方式改变。
<application> ... <receiver android:name=".MyBroadcastReceiver"> <intent-filter android:priority="100"> <action android:name="com.hyco.yancy.MY_BR"/> </intent-filter> </receiver> </application>
Intent intent=new Intent("com.hyco.yancy.MY_BR"); //intent 是可以通过键值对传递数据。 sendOrderedBroadcast(intent,null);
public class MyBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceiver(){ //do something ... abortBroadcast();//增加此方法,即可截断广播往下发送 } }
按照上面的代码,继续增加广播接收器,完成一步一步的传递。同时要去掉abortBroadcast()方法。拓展:在应用a中发送广播,在b应用中接受。注意:要保证应用没有被杀死,广播没有被注销。
本地广播
经过拓展即可知道,原来我自定的广播可以被别的应用所接收,这就很容易引起安全性问题。而本地广播就是为了解决这一个问题。本地广播只能在所在的应用中发送与传递,使用起来也是极为方便。
public class MainActivity extends Activity{ private IntentFilter filter; private LocalBroadcastReceiver localReceiver; private LocalBroadcastManager manager; private @Override protected void onCreate (Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); manager=LocalBroadcastManager.getInstance(this); filter=new IntentFilter(); filter.addAction("com.hyco.yancy.MY_BR");//接头暗号 开机广播 localReceiver=new LocalBroadcastReceiver(); manager.registerReceiver(localReceiver,filter);//代码注册广播 //发送广播 Intent intent=new Intent("com.hyco.yancy.MY_BR"); //intent 是可以通过键值对传递数据。 manager.sendBroadcast(intent); } @Override protected void OnDestory(){ super.onDestory(); manager.unregisterReceiver(localReceiver);//注销广播 } class LocalBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceiver(Context context,Intent intent){ //do something. ... } } }
只是多了一个本地广播管理者,可以按照这个方法测试,应用a的广播是否还能被应用b所接收。
阅读全文
0 0
- 广播详解
- Android 广播机制 详解
- Android广播机制详解
- android 广播(broadcastReceiver)详解
- android 广播BroadcastReveicer详解
- Android BroadcastReceiver广播详解
- Android广播机制详解
- android 广播详解
- 广播接收者(BroadcastReceiver)详解
- Android 广播机制 详解
- android广播broadcast详解
- Android 广播机制 详解
- android 广播详解
- Android广播机制详解
- Android 蓝牙广播详解
- Android 广播机制详解
- Android广播详解
- Android中的广播详解
- html 画中画
- 日常小结
- Normal Equation推导
- openstack集成ceph
- Java面向对象基础知识复习
- 广播详解
- vue学习二 vue 的生命周期
- 算法系列15天速成——第一天 七大经典排序【上】
- linux压缩解压打包解包
- IT单词
- 浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题
- Java 可变参数实现
- 树上差分详解
- 元组