通过第一篇的解说,我们已经看到了怎样使用Intent来启动新的应用程序组件,可是实际上他们也能够使用sendBroadcast方法来在组件间匿名的广播消息。

作为一个系统级别的消息传递机制,Intent能够在进程之间发送结构化的消息。

因此,通过实现Broadcast Receiver来监听和响应应用程序内的这些Broadcast Intent。

通过使用Intent来广播一个事件,能够在不改动原始的应用程序的情况下。让我们开发者对事件做出反应。Android大量使用了Broadcast Receiver来广播系统事件,如网络连接和短信通知等。

1.使用Intent来广播事件

在应用程序组件中,能够构建希望广播的Intent,然后使用sendBroadcast方法来发送它。

可以对Intent的动作、数据和分类进行设置,从而使Broadcast Receiver可以精确的确定他们的需求。

在这样的方案中,Intent动作字符串可以用来标识要广播的事件,所以他应该是可以标识事件的唯一的字符串。习惯上。动作字符串使用与Java包名同样的构建方式。例如以下:

<span style="font-size:14px;">public static final String MY_INTENT_ACTION = "com.happy.demo.test";</span>

假设希望在Intent中包括数据。那么能够使用Intent的data属性指定一个URI,也可能够包括extras来加入额外的基本值。

2.使用Broadcast Receiver来监听广播

Broadcast Receiver能够用来监听Broadcast Intent,可是须要对其进行注冊。既能够使用代码方式来注冊。也能够在应用程序的manifest.xml文件里进行注冊。无论採用哪种方式,都须要使用一个Intent Filter来指定他要监听哪些Intent和数据。

对于包括在manifest.xml文件里的广播接收者 。在Intent被广播出去的时候。应用程序不一定非要处于执行状态才干接收。他们会被自己主动的启动。

创建一个新的Broadcast Receiver,须要扩展Broadcast Receiver类并重写onReceive方法来进行自己的处理。比方:

<span style="font-size:14px;">package com.happy.demo;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent; public class MyBroadcastReceiver extends BroadcastReceiver { @Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub } }
</span>

当接收到一个与在注冊接收器时使用的IntentFilter相匹配的Broadcast Intent的时候,就会运行onReceive方法。onReceive处理程序必需要在5秒钟以内完毕。否则会显示Force Close对话框。

普通情况下,Broadcast Receiver将会更新内容、启动Service、更新Activity UI或者使用Notification Manager来通知用户。

3.在代码中注冊Broadcast Receiver

影响特定Activity的UI的Boradcast Receiver通常在代码中注冊,在代码中注冊的接收器仅仅会在包括它的应用程序组件执行时对应Broadcast Intent。

在接收器用来更新一个Activity中的UI元素时,一般在onResume中注冊接收器,在onPause中注销接收器。代码:

<span style="font-size:14px;">@Override
protected void onResume() {
super.onResume();
registerReceiver(receiver, filter);
} @Override
protected void onPause() {
super.onPause();
unregisterReceiver(receiver);
}</span>

4.在应用程序的manifets.xml文件里进行注冊

要在应用程序的mainfets中包括一个Broadreceiver。能够在application节点中加入一个receiver标签。以及指定要注冊的Broadcast Receiver的类名。接收器节点中须要包括一个intent-filter标签来指定要监听的动作字符串。例如以下:

<span style="font-size:14px;"><receiver android:name="com.happy.demo.MyBroadcastReceiver" >
<intent-filter>
<action android:name="com.happy.demo.one" />
</intent-filter>
</receiver></span>

5.广播有序的Intent

当Broadcast Receiver接收Intent的顺序十分重要时。特别是当须要将来接收器可以影响将来的接收器收到的Broadcast Intent时。可以使用sendOrderedBroadcast方法。例如以下:

<span style="font-size:14px;">String requiredPermission = "com.happy.demo.one";
sendOrderedBroadcast(intent, requiredPermission);</span>

使用这种方法时。Intent将会依照优先顺序被传递给全部具有合适权限的已注冊的接收器。能够在manifest.xml中使用android:priority属性指定其权限,值越大。代表优先级越高。

<span style="font-size:14px;"> <receiver
android:name="com.happy.demo.MyBroadcastReceiver"
android:permission="android.permission.ACCESS_CHECKIN_PROPERTIES" >
<intent-filter android:priority="1000" >
<action android:name="com.happy.demo.one" />
</intent-filter>
</receiver></span>

发送有序广播的一种常见样例是广播想要收到其结果数据的Intent。使用sendOrderedBroadcast方法时,能够指定一个将放到接收器队列末尾的接收器,而从保证当Broadacst Receiver已被已注冊的有序Broadcast Receiver处理和改动后,它也能接收到该Broadcast Intent。

在这样的情况下。对于那些在返回给最后一个接收器之前可能被不论什么收到广播的接收器改动的Intent结果、数据和extra,为他们指定默认值通常非常有帮助。例如以下:

<span style="font-size:14px;">sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras);</span>

6.广播Stick Intent

Stity Intent是Broadcast Intent的实用变体,能够保存他们最后一次广播的值,而且当有一个新的接收器被注冊为接收该广播时,他们会把这些值作为Intent返回。

当调用registerReceiver来指定一个匹配的Sticy Broadcast Intent的Intent Filter时,返回值将是最后一个Intent广播,比如电池电量变化的广播

7.Local Boradcast Manager

局部广播管理器包括在Android Support Library中。用户简化注冊Broadcast Inten以及在应程序内的组件之间发送Broadcast Intent的工作。由于局部广播的作用域要小,所以使用它比发送全局广播更加高效,并且也确保了应用程序外部的不论什么组件都收不到我们的广播Intent,所以也是安全的。与之同样。其它应用程序也不能向我们的接收器发送广播。避免了这些接收器成为安全漏洞。

获取Local Broadcast Manager的方法例如以下:

<span style="font-size:14px;">LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getApplicationContext());</span>

注冊一个局部广播接收者和注冊全局的一样,代码例如以下:

<span style="font-size:14px;">lbm.registerReceiver(receiver, intentFilter);</span>

要发送一个局部Broadcast Intent,能够使用Local Boradcast Manager的sendBroadcast方法,并传入要广播的Intent。例如以下:

<span style="font-size:14px;">lbm.sendBroadcast(intent);</span>

8.Pending Intent简单介绍

PendingIntent类提供了一种创建可由其它应用程序在稍晚的时间触发的Intent的机制。

PendingIntent通经常使用于包装在响应将来的事件时触发的Intent,比如单机Widget或者Notification。

PendingIntent类提供了构建PendingIntent的静态方法,以便启动Activity Service或者广播Intent。

<span style="font-size:14px;">PendingIntent.getActivity(context, requestCode, intent, flags);
PendingIntent.getService(context, requestCode, intent, flags);
PendingIntent.getBroadcast(context, requestCode, intent, flags);</span>

PendingIntent类包括了一些静态常量,他们能够用于指定标志,以更新或取消与指定动作匹配的现有PendingIntent,也能够用于指定该Intent是否仅仅触发一次。

Android中Intent具体解释(二)之使用Intent广播事件及Broadcast Receiver简单介绍的更多相关文章

  1. Android中的自定义控件(二)

    案例四: 自定义开关       功能介绍:本案例实现的功能是创建一个自定义的开关,可以自行决定开关的背景.当滑动开关时,开关的滑块可跟随手指移动.当手指松开后,滑块根据开关的状态,滑到最右边或者滑到 ...

  2. android 中百度地图 关于地图缩放所调用的事件

    在做百度地图的时候 javascript 有个地图缩放的事件 但是在android 的API里面却没有,但是还好  官方给了一个MapStatusChangeListener,是这样介绍的 百度地图S ...

  3. Android中父View和子view的点击事件的执行过程

    Android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解.  一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN- ...

  4. Android笔记(五):广播接收者(Broadcast Receiver)

    Android有四大组件,分别为:Activity(活动).Service(服务).Content Provider(内容提供器).Broadcast Receiver(广播接收者). 引入广播的目的 ...

  5. Android中Context具体解释 ---- 你所不知道的Context

                                                                                                         ...

  6. Android清单文件具体解释(二) ---- 应用程序权限声明

    我们知道,Android系统的各个模块提供了很强大的功能(比方电话,电源和设置等),通过使用这些功能.应用程序能够表现的更强大.更灵活.只是,使用这些功能并非无条件的.而是须要拥有一些权限.接下来,我 ...

  7. Android中View绘制优化二一---- 使用<include />标签复用布局文件

    本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning   译二:   使用<include />标签复用布局文件      翻译地址:http://de ...

  8. wemall app商城源码Android中ViewHolder详细解释

    1.ViewHolder的解释: (1).只是一个静态类,不是Android的API方法. (2).它的作用就在于减少不必要的调用findViewById,然后把对底下的控件引用存在ViewHolde ...

  9. 揭破android中的闹钟app 二

    · 这节,我们通过wheelview来模仿一个简易的正点闹钟. 我这里不说wheelview来龙去脉,只阐述几个简单的方法,如果,想看一看具体wheelview的内容,请看下面两篇文章: androi ...

随机推荐

  1. 【UOJ#51】【UR #4】元旦三侠的游戏(博弈论)

    [UOJ#51][UR #4]元旦三侠的游戏(博弈论) 题面 UOJ 题解 考虑暴力,\(sg[a][b]\)记录\(sg\)函数值,显然可以从\(sg[a+1][b]\)和\(sg[a][b+1]\ ...

  2. 向php数组添加元素的方法哪种更高效

    $arr = array(); // 第一种 array_push($arr, 'test'); // 第二种 $arr[] = 'test'; 参考PHP官方文档:http://php.net/ma ...

  3. layer2-1 二层

    一   概述    一层的相关介绍 CSMA/CD 网桥和交换机的区别 冲突    共享      端口密度     性能   功能   交换机的三种主流转发方式 存储转发         完整的收到 ...

  4. HDU-5319 Painter,深搜标记!

    Painter 题意:有一个棋盘n行,列数不超过50,用red和blue给这个棋盘涂色,每个格子每种颜色最多涂一次,如果两种颜色都涂了则该格子颜色为Green;red以斜杠'\'方式涂色,bule以' ...

  5. nginx反向代理,负载均衡,动静分离,rewrite地址重写介绍

    一.rewrite地址重写 地址转发后客户端浏览器地址栏中的地址显示是不变的,而地址重写后地址栏中的地址会变成正确的地址. 在一次地址转发过程中只会产生一次网络请求,而一次地址重写产生两次请求. 地址 ...

  6. Shell脚本学习指南 [ 第一、二章 ] 背景知识、入门

    摘要:第一章介绍unix系统的发展史及软件工具的设计原则.第二章介绍编译语言与脚本语言的区别以及两个相当简单但很实用的Shell脚本程序,涵盖范围包括了命令.选项.参数.Shell变量.echo与pr ...

  7. 刷题总结——郁闷的出纳员(bzoj1503)

    题目: 题目背景 NOI2004 DAY1 T1 题目描述 OIER 公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是 ...

  8. 算法复习——高斯消元(ssoi)

    题目: 题目描述 Tom 是个品学兼优的好学生,但由于智商问题,算术学得不是很好,尤其是在解方程这个方面.虽然他解决 2x=2 这样的方程游刃有余,但是对于下面这样的方程组就束手无策了.x+y=3x- ...

  9. ubuntu问题解答集锦

    一.su root提示认证失败 su root提示认证失败 ubuntu root是默认禁用了,不答应用root登陆,所以先要设置root密码.   执行:sudo passwd root 接着输入密 ...

  10. 洛谷 [P3812] 线性基

    异或空间下的线性基模版 异或空间下求线性基,本质还是高斯消元,参见 http://www.cnblogs.com/Mr-WolframsMgcBox/p/8562924.html 求最大值是一个贪心的 ...