Broadcast Receiver(一)
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(一)相关推荐
- android 组件(activity,service,content provider,broadcast receiver,intent)详解
Android应用程序由若干个不同类型的组件组合而成,每一个组件具有其特定的安全保护设计方式,它们的安全直接影响到应用程序的安全.Android应用程序组件的主要类型有:活动(Activity),服务 ...
- 007 Android之Broadcast Receiver
文章目录 广播的概念 广播的类型 广播接收实例 IP拨号器 开机自启动 监听应用安装和卸载 广播的概念 现实中的广播:电视台发送广播,使用收听机可以收听广播,得到广播信息 Android中的广播:系统 ...
- Android静态安全检测 - Broadcast Receiver组件暴露
Broadcast Receiver组件暴露 - exported属性 一.android:exported 该属性用来标示,当前Broadcast Receiver是否可以从当前应用外部获取Rece ...
- Qt文档阅读笔记-Broadcast Receiver Example解析
这篇博文的例子是说明如何在局域网上搭建广播包接收端. 这里使用了Qt Network API,搭建本地广播包接收端. 结构如下: 代码如下: receiver.h #ifndef RECEIVER_H ...
- Qt文档阅读笔记-Broadcast Sender Example与Broadcast Receiver Example解析
目录 Broadcast Sender Example Broadcast Receiver Example Broadcast Sender Example 调用QtNetwork API实现发出广 ...
- Android 用 broadcast receiver组件实现音乐盒
Android 用 broadcast receiver详解用例 Android 用 broadcast receiver详解用例 一.BroadcastReceiver概述 1.BroadcastR ...
- Broadcast Receiver @
http://developer.android.com/reference/android/content/BroadcastReceiver.html 译文: http://www.2cto.co ...
- android 四大组件Broadcast Receiver
本文介绍Broadcast Receiver,包括几部分内容:Broadcast Receiver概述及实例.自定义Broadcast Receiver.Broadcast Receiver的实现细节 ...
- Broadcast Receiver
(1)Broadcast Receiver简介 Broadcast Receiver(广播接收者)用于接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast( ...
- Broadcast Receiver的两种注册方法
在Android 中,Broadcast Receiver有两种注册形态,一种是在java文件中进行注册,方法如下: IntentFilter intentFilter = new IntentFil ...
最新文章
- Nagios 监控实例部署
- linux -- /dev/null 21
- leetcode 在排序数组中查找元素的第一个和最后一个位置
- PyTorch 深度学习: 60 分钟极速入门
- 打印到类阵列的给定序列的所有排列的n皇后问题
- leetcode1254. 统计封闭岛屿的数目(dfs)
- 利用异步I/O复制文件及详解
- Linux配置ospf命令,OSPF单区域配置
- Objective-C学习—UIScrollView控件使用
- 重载下标操作符,检查内存越界
- VirtualBox装VBoxGuestAdditions增强工具失败
- Matlab 线性同余法产生随机数
- 爬虫-用xpath爬取豆瓣图书的短评
- (固态)产品的质量和可靠性标准全系列(JEDEC+ASTM) - 最齐全、最完整及最新版
- 如何查看电子元器件的丝印信息
- 【python】PLY词法分析实验「编译原理」
- 关于微信小程序正式上线的那些事儿
- QIIME2-单端数据Deblur
- 用mysql设计一个KTV点歌系统_java swing mysql实现的ktv点歌系统项目源码附带视频教程...
- pdxp协议 C语言,一文看懂PD协议和Type-C的区别