Broadcast是android的四大组件中唯一需要被动接受数据的组件。也就是说,对于activity,contentProvider和service,都可以主动调用,并获得返回数据,而负责接收broadcast数据的接收器却永远不知道什么时候可以接受到广播。broadcast类似于面向对象中的事件(event),对于事件来说,就不知道什么时候用户会去触发,只能静待着不可预知事件的发生。因此,广播也被称为全局事件,或者系统事件。

广播的最大用途就是接受系统发出的消息。eg:当收到短信时,可以截获短信的电话号码和短信内容,当来电时可以截获来电的各种状态(响铃,接听,挂断);

For example:短信拦截

编写一个拦截短信广播的接收器类,该类必须从android.content.BroadcastReceiver继承:

import java.util.Set;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
public class ShortMessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if(bundle != null){
Set<String> keys = bundle.keySet();
for(String key : keys){
Log.d("key", key);
}
Object[] objects = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[objects.length];
for(int i =0; i<objects.length; i++){
messages[i] = SmsMessage.createFromPdu((byte[]) objects[i]);
String s = "手机号:"+messages[i].getOriginatingAddress()+"\n";
s += "短信内容:"+messages[i].getDisplayMessageBody();
Toast.makeText(context, s, Toast.LENGTH_LONG).show();
}
}
}
}

广播接收器需要在AndroidManifest.xml中进行注册,并且由于android的安全机制,必须在AndroidManifest.xml文件中打开接收短信的权限。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.yh.smsbroadcastreceiver"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.SEND_SMS"/>
    <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="cn.yh.smsbroadcastreceiver.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="cn.yh.smsbroadcastreceiver.ShortMessageReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
    </application>
</manifest>

android.provider.Telephony.SMS_RECEIVED Eclipse不进行提示,手写即可。
运行,在Emulator Control中模拟短信发送:

在发送短信之后程序就会接收到广播.

Broadcast Receiver(一)相关推荐

  1. android 组件(activity,service,content provider,broadcast receiver,intent)详解

    Android应用程序由若干个不同类型的组件组合而成,每一个组件具有其特定的安全保护设计方式,它们的安全直接影响到应用程序的安全.Android应用程序组件的主要类型有:活动(Activity),服务 ...

  2. 007 Android之Broadcast Receiver

    文章目录 广播的概念 广播的类型 广播接收实例 IP拨号器 开机自启动 监听应用安装和卸载 广播的概念 现实中的广播:电视台发送广播,使用收听机可以收听广播,得到广播信息 Android中的广播:系统 ...

  3. Android静态安全检测 - Broadcast Receiver组件暴露

    Broadcast Receiver组件暴露 - exported属性 一.android:exported 该属性用来标示,当前Broadcast Receiver是否可以从当前应用外部获取Rece ...

  4. Qt文档阅读笔记-Broadcast Receiver Example解析

    这篇博文的例子是说明如何在局域网上搭建广播包接收端. 这里使用了Qt Network API,搭建本地广播包接收端. 结构如下: 代码如下: receiver.h #ifndef RECEIVER_H ...

  5. Qt文档阅读笔记-Broadcast Sender Example与Broadcast Receiver Example解析

    目录 Broadcast Sender Example Broadcast Receiver Example Broadcast Sender Example 调用QtNetwork API实现发出广 ...

  6. Android 用 broadcast receiver组件实现音乐盒

    Android 用 broadcast receiver详解用例 Android 用 broadcast receiver详解用例 一.BroadcastReceiver概述 1.BroadcastR ...

  7. Broadcast Receiver @

    http://developer.android.com/reference/android/content/BroadcastReceiver.html 译文: http://www.2cto.co ...

  8. android 四大组件Broadcast Receiver

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

  9. Broadcast Receiver

    (1)Broadcast Receiver简介 Broadcast Receiver(广播接收者)用于接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast( ...

  10. Broadcast Receiver的两种注册方法

    在Android 中,Broadcast Receiver有两种注册形态,一种是在java文件中进行注册,方法如下: IntentFilter intentFilter = new IntentFil ...

最新文章

  1. Nagios 监控实例部署
  2. linux -- /dev/null 21
  3. leetcode 在排序数组中查找元素的第一个和最后一个位置
  4. PyTorch 深度学习: 60 分钟极速入门
  5. 打印到类阵列的给定序列的所有排列的n皇后问题
  6. leetcode1254. 统计封闭岛屿的数目(dfs)
  7. 利用异步I/O复制文件及详解
  8. Linux配置ospf命令,OSPF单区域配置
  9. Objective-C学习—UIScrollView控件使用
  10. 重载下标操作符,检查内存越界
  11. VirtualBox装VBoxGuestAdditions增强工具失败
  12. Matlab 线性同余法产生随机数
  13. 爬虫-用xpath爬取豆瓣图书的短评
  14. (固态)产品的质量和可靠性标准全系列(JEDEC+ASTM) - 最齐全、最完整及最新版
  15. 如何查看电子元器件的丝印信息
  16. 【python】PLY词法分析实验「编译原理」
  17. 关于微信小程序正式上线的那些事儿
  18. QIIME2-单端数据Deblur
  19. 用mysql设计一个KTV点歌系统_java swing mysql实现的ktv点歌系统项目源码附带视频教程...
  20. pdxp协议 C语言,一文看懂PD协议和Type-C的区别

热门文章

  1. 百度依存句法分析标识说明
  2. Perl之单行命令特技
  3. 你需要知道的软件测试类型和常识【经典长文】
  4. 大学专业课真题(百度拷贝过来的)
  5. linux CLK时钟驱动
  6. CIO40: 学习.遇见更优秀的自己
  7. 高德地图 动态渲染marker
  8. (面经总结)一篇文章带你完整复习 Java 中并发关键字(CountDownLatch/CyclicBarrier/Semaphore/Volatile)
  9. java读取文件并输出内容
  10. MySQL环境变量的配置mysqldump环境变量的配置