第一行代码 读笔⑤ (Broadcast)
2016-04-12 21:56
239 查看
全局大喇叭,详解广播机制
广播(Broadcast):一种广泛运用的在应用程序之间传输信息的机制。
传输信息:
实现了不同的程序之间的数据传输与共享。当于发送广播的action相同的接受者都能接受该广播。
起到了一个通知的作用。如接受Service的通知。
广播分类:
- 标准广播(Normal broadcasts): 完全异步执行的广播。所有广播接收器(Broadcast Receiver)同时收到该广播。效率较高,当无法截断。
- 有序广播(Orderedbroadcasts): 同步执行的广播,各Broadcast Received按序(优先级)接受信息。可截断的广播。
实现广播接受:
动态注册:在代码中进行广播的注册。
优点:自由的控制注册于注销,较灵活。
缺点:由于在代码中注册,因此必须在相应Activity启动才可以接受广播。
1.对于BroadcastReceiver类的继承,对onReceive()方法的重写,其中代码,会在接受到广播时被执行。
PS:广播接受器中不允许开启线程,因此不应再onReceiver()方法中进行耗时操作或者添加过多逻辑,避免因长时间未结束,程序报错。
2.过滤器(intentFilter)的设置。intentFilter相当于广播中的频率,使用filter.addAction添加行为类型,用来确定接受哪一些广播。
3.将广播进行注册,调用regiseterReceiver()将Receiver与IntentFilter的实例传入。
PS:在结束使用后,动态广播需要取消注册。在onDestroty()中调用unregisterReceiver()方法。
静态注册: 可以在程序未启动的情况下,保持广播接受状态。
需要在AndroidManifest .xml中注册,不需程序启动即可接收,可用作自动启动程序。
1.对于Broadcast Receiver的编写,与动态没有区别,对于onReceive()方法的重写。
2.在AndroidManifest .xml中注册。
标签,静态广播在其中注册。
android:name 指定具体的广播器。
指定接收的广播
如果是对于系统的一些广播监听,如开机广播,需要声明权限。
发送标准广播:
通过intent指定发送广播的值,调用Context的sendBroadcast()方法发出广播。
(个人感觉类似于隐式intent的使用,广播发送方都是通过隐式意图,发送给其他程序)
发送有序广播:
相比于标准广播,有了一个优先度的不同。发送广播只是调用方法的不同,调sendOrderedBroadcast()方法,方法中第二个参数为与权限相关的字符串。
广播接受的顺序:
在注册时对其进行设置,android:priority=“…”
广播的拦截:
在onReceive()中,调用abortBroadcast()方法完成拦截。
本地广播的使用:
为了保证安全性问题,防止包含关键性数据的广播被其他程序拦截,或者其他程序不断向本接收器发送垃圾广播,从而有了本地广播机制。
本地广播:使用该机制的发出的广播,只能在本程序内传递,接收器也可能接受本应用的广播。
使用:在于利用
1..创建LocalBroadcastManager:
2.通过LocalBroadcastManager发送广播
3.动态注册广播接收器.(所有能接收该信息的接收器都必须为LocalBroadcastManager的实例)
广播(Broadcast):一种广泛运用的在应用程序之间传输信息的机制。
传输信息:
实现了不同的程序之间的数据传输与共享。当于发送广播的action相同的接受者都能接受该广播。
起到了一个通知的作用。如接受Service的通知。
广播分类:
- 标准广播(Normal broadcasts): 完全异步执行的广播。所有广播接收器(Broadcast Receiver)同时收到该广播。效率较高,当无法截断。
- 有序广播(Orderedbroadcasts): 同步执行的广播,各Broadcast Received按序(优先级)接受信息。可截断的广播。
实现广播接受:
动态注册:在代码中进行广播的注册。
优点:自由的控制注册于注销,较灵活。
缺点:由于在代码中注册,因此必须在相应Activity启动才可以接受广播。
1.对于BroadcastReceiver类的继承,对onReceive()方法的重写,其中代码,会在接受到广播时被执行。
PS:广播接受器中不允许开启线程,因此不应再onReceiver()方法中进行耗时操作或者添加过多逻辑,避免因长时间未结束,程序报错。
class LocalReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show(); } }
2.过滤器(intentFilter)的设置。intentFilter相当于广播中的频率,使用filter.addAction添加行为类型,用来确定接受哪一些广播。
intentFilter = new IntentFilter(); intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
3.将广播进行注册,调用regiseterReceiver()将Receiver与IntentFilter的实例传入。
registerReceiver(localReceiver, intentFilter);
PS:在结束使用后,动态广播需要取消注册。在onDestroty()中调用unregisterReceiver()方法。
unregisterReceiver(localReceiver);
静态注册: 可以在程序未启动的情况下,保持广播接受状态。
需要在AndroidManifest .xml中注册,不需程序启动即可接收,可用作自动启动程序。
1.对于Broadcast Receiver的编写,与动态没有区别,对于onReceive()方法的重写。
2.在AndroidManifest .xml中注册。
标签,静态广播在其中注册。
android:name 指定具体的广播器。
指定接收的广播
</receiver> <receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="com.example.broadcasttest.MY_BROADCAST"/> </intent-filter> </receiver>
如果是对于系统的一些广播监听,如开机广播,需要声明权限。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
发送标准广播:
通过intent指定发送广播的值,调用Context的sendBroadcast()方法发出广播。
(个人感觉类似于隐式intent的使用,广播发送方都是通过隐式意图,发送给其他程序)
Intent intent = new Intent(); intent.setAction("..."); Context.sendBroadcast(intent);
发送有序广播:
相比于标准广播,有了一个优先度的不同。发送广播只是调用方法的不同,调sendOrderedBroadcast()方法,方法中第二个参数为与权限相关的字符串。
Intent intent = new Intent(); intent.setAction("..."); Context.sendOrderedBroadcast(intent,null);
广播接受的顺序:
在注册时对其进行设置,android:priority=“…”
<application> <receiver android:name=".Receiver"> <intent-filter android:priority="1000"> <action android:name=".............."/> </intent-filter> </receiver> </application>
广播的拦截:
在onReceive()中,调用abortBroadcast()方法完成拦截。
本地广播的使用:
为了保证安全性问题,防止包含关键性数据的广播被其他程序拦截,或者其他程序不断向本接收器发送垃圾广播,从而有了本地广播机制。
本地广播:使用该机制的发出的广播,只能在本程序内传递,接收器也可能接受本应用的广播。
使用:在于利用
1..创建LocalBroadcastManager:
final LocalBroadcastManager localBroadcastManager=LocalBroadcastManager.getInstance(this);
2.通过LocalBroadcastManager发送广播
Intent intent=new Intent(); intent.setAction("......................."); localBroadcastManager.sendBroadcast(intent);
3.动态注册广播接收器.(所有能接收该信息的接收器都必须为LocalBroadcastManager的实例)
IntentFilter filter=new IntentFilter(); filter.addAction(".............................."); localBroadcastManager.registerReceiver(new MyBroadCastReceiver(),filter);
相关文章推荐
- Android使用广播(BroadCast)实现强制下线的方法
- Android中的广播(BroadCast)详细介绍
- 简要解释一下activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver
- 接收其他应用程序发出的创建快捷方式的广播
- angularjs(step by step):消息传播$broadcast $emit 和 $on
- socket.io broadcast的几种用法之初试
- Android基础知识——组件Broadcast Receiver
- Android Broadcast
- ANDROID系统广播总结
- android中在广播中弹出pop框的局限性
- adb启动activity、service或broadcast
- Android 自定义广播实现过程
- iOS 通知机制 Notifications (一)
- 闹钟的设计(ClockDemo)
- socket.io中emit消息形式
- Linux UDP 单播 组播 广播实现
- Android 3.0之后开机无法接收系统广播权限原因
- android之Broadcast
- 不是所有的牛奶(以android.intent.action*开头的broadcast)都叫特仑苏(protected-broadcast)
- 使用 Broadcast Receiver 接收广播消息