1、广播的注册

(1)动态广播注册:

优点:可以灵活控制广播的注册与撤销

缺点:必须在程序启动时才能接收广播

IntentFilter :当Intent在组建之间传递时,组件想告诉android系统自己可以响应及处理那些Intent,就要用到IntentFilter类,IntentFilter对象负责过滤掉组件无法响应和处理的Intent,只将自己关心的Intent接收进来进行处理。

IntentFilter.addAction():根据action设置可以通过的intent,IntentFilter不设置action则所有的intent都无法通过,Intent不设置action则可以通过所有的IntentFilter。

BroadcastReceiver子类:接收IntentFilter通过的Intent,并且根据Intent的action来区分不同Intent,在重写的onReceive()方法中执行相应操作。

动态注册/撤销:调用registerReceiver(BroadcastReceiver br,IntentFilter if)注册广播;

调用unregisterReceiver(BroadcastReceiver br,IntentFilter if)注销广播。

(2)静态广播注册:

在androidmanifest.xml中添加<receiver>标签

        <receiver
android:name="com.feng.Reciver"><!-- 自定义的BroadcastReceiver子类 -->
<intent-filter >
<action android:name="com.android.broadcasttest.NEW_LIFEFROM"/><!--该广播接收器可过滤的Intent action-->
</intent-filter>
</receiver>

BroadcastReceiver中不允许开子线程,故BroadcastReceiver更多的是用来打开其他组件,如开启某种服务、发送一条通知栏消息等。

2.发送自定义广播

Intent intent =new Intent(Intent action name)//在注册广播接收器时会为广播接收器添加可通过的Intent action 的名字,如果想

//  此时可以指定Intent 的action名字

sendBroadcast(intent)                                   //还可以由intent携带一些数据到BroadcastReceiver的onReceive()中去处理

3、发送有序广播

Intent intent =new Intent(Intent action name);

sendorderedBroadcast(intent ,null);//第二个参数为与权限有关的字符串,为空即可

以上发送的广播均为全局广播,全局广播是跨进程的,就是说只要在广播接收器中注册了相应Intent的action,那么不管是本应用发出的广播还是其他应用发出的广播只要携带了该action的Intent,Receiver就都可以接收得到。

显然这样的全局广播是存在安全隐患的,本应用发送广播时若其他应用也有办法接受得到,那么会就存在敏感数据泄露的危险;并且本应用也会接受到来自其他应用的广播,如果这些广播为垃圾广播,那么本应用就会面临受到攻击的危险。

所以在全局广播的基础上,android系统提出了另一更为安全的广播发送接受机制——本地广播。

4、本地广播

使用这种机制发出的广播只能在应用程序内部接收传递,并且广播接收器也只能接收到来自本应用发出的广播,这样所有的安全隐患问题就都不存在了。

用法:主要使用了LocalBroadcastManager类对广播进行管理

广播发送及注册的其他原理都不变,只是在广播发送、注册时使用Localbroadcast类对象来发送及注册。

//发送本地广播
LocalBroadcastManager localbroadcastmanager=LocalBroadcastManager.getInstance();
Intent intent =new Intent(Intent action name);
localbroadcastmanager.sendBroadcast(intent); //注册本地广播
IntentFilter intentfilter=new IntentFilter();
intentfilter.setAction(Intent action name);
localbroadcastmanager.registerReceiver(new LocalReceiver(), intentfilter); //撤销本地广播
localbroadcastmanager.unregisterReceiver(new LocalReceiver(), intentfilter); class LocalReceiver extends BroadcastReceiver{
@override
public void onReceiver(Context context , Intent intent){
// TODO Auto-generated method stub
}
}

android基础(二)Broadcast Receiver知识的更多相关文章

  1. Android四大组件--Broadcast Receiver具体解释

    本文主要讲述了: 一.BroadcastReceiver概述: 二.BroadcastReceiver事件分类 三.BroadcastReceiver事件的编程流程 四.两类BroadcastRece ...

  2. android 四大组件Broadcast Receiver

    本文介绍Broadcast Receiver,包括几部分内容:Broadcast Receiver概述及实例.自定义Broadcast Receiver.Broadcast Receiver的实现细节 ...

  3. Android四大组件-Broadcast Receiver

    http://www.jianshu.com/p/1013a366cc72 http://www.jianshu.com/p/ca3d87a4cdf3 前言 基础知识. 1.Android广播分为两个 ...

  4. Android 基础 二 四大组件 Activity

    Activity Intent IntentFilter 一理论概述 一. Activity 用来提供一个能让用户操作并与之交互的界面. 1.1 启动 startActivity(Intent int ...

  5. Android源码——Broadcast Receiver

    Android源码分析——广播 广播是一种在组件之间进行消息传递的方式.广播机制的实现是基于Binder进程间通信. Binder进程间通信和广播的差别:Binder中,Client组件和Servic ...

  6. <Android基础>(二) Activity Part 2

    1.活动生命周期 1)返回栈 2)活动状态 3)活动的生存期 2.活动的启动模式 1)standard 2)singleTop 3)singleTask 4)singleInstance 3.活动的优 ...

  7. <Android基础>(二) Activity Part 1

    1.活动的基本用法: 1) 手动创建活动.创建加载布局 2) 在AndroidManifest文件中注册 3) 在活动中添加Button.Toast.Menu 4) 销毁活动 2.Intent 1) ...

  8. Android基础系列合集

    四大组件 1.Service Android四大组件-Service Android-远程Service Service 动态更新 UI 2.Activity Android四大组件-Activity ...

  9. 1.0 Android基础入门教程

    1.0 Android基础入门教程 分类 Android 基础入门教程 本教程于2015年7月开始撰写,耗时半年,总共148节,涵盖了Android基础入门的大部分知识,由于当时能力局限,虽已竭尽全力 ...

随机推荐

  1. windows进程详解

    1:系统必要进程system process    进程文件: [system process] or [system process]进程名称: Windows内存处理系统进程描述: Windows ...

  2. runoob

    今天学习bootstrap的时候偶然发现http://www.runoob.com/ 这个网站不错,比w3cschool界面要好看,内容要丰富 比较适合新手学习,而且上面的内容比较丰富,不错.

  3. [课程设计]Scrum 2.7 多鱼点餐系统开发进度(下单一览页面-菜式添加功能的继续实现)

    Scrum 2.7 多鱼点餐系统开发进度  (下单一览页面-菜式添加功能的继续实现) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团 ...

  4. GMF:如何让网格显示在background,而不是foreground

    前言 很久没写文章了,准备写一系列关于Eclipse RCP /Plugin的文章. 这些文章都是trouble shooting性质的,不准备写的很细,当你碰到这样的问题,google到时,能帮你把 ...

  5. Python3基础 print 查看一个列表中存储的所有内容

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  6. 将InfoObject作为信息提供者Characteristic is InfoProvider

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. javascript事件代理(Event Delegation)

    看了几篇文章,放上来供参考 司徒正美的文章,Event Delegation Made Easy --------------------------------------------------- ...

  8. redis 不能持久化问题 MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk.

    转载自:http://www.cnblogs.com/anny-1980/p/4582674.html kombu.exceptions.OperationalError: MISCONF Redis ...

  9. 在与SQL Server建立连接时出现于网络相关的或特定于实例的错误

    客户遇到一个问题,用“服务器名\实例名”远程连接另外一台命名实例的时候连接失败,报“在与SQL Server建立连接时出现于网络相关的或特定于实例的错误,未找到或无法访问服务器.请验证实例名称是否正确 ...

  10. android应用锁之获取前台进程包名方法

    通过以下方式来获取前台进程的包名: 1.android api 10-20 通过ActivityManager中getRunningTasks来获取. 2.android api 21- 22(部分没 ...