Broadcast Receiver(一)
来源:互联网 发布:淘宝注册开店要多少钱 编辑:程序博客网 时间:2024/05/18 14:23
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(一)
- Broadcast Receiver(一)
- 广播接收器—Broadcast Receiver(一)
- broadcast receiver
- Broadcast Receiver
- Broadcast Receiver
- Broadcast Receiver
- Broadcast Receiver
- Broadcast Receiver
- Broadcast Receiver
- Broadcast Receiver
- Broadcast Receiver
- Broadcast Receiver
- Broadcast Receiver
- Broadcast Receiver
- Broadcast Receiver
- BroadCast Receiver
- Broadcast Receiver
- 二维码扫描第三库ZXing的使用
- X264中SATD实现分析
- HDU 3549 Flow Problem(有向边网络流)
- Android 命令行打包和签名
- SQLServlet 更新前10条数据
- Broadcast Receiver(一)
- Win32 Series - Simple Use of the Clipboard
- 人人网为什么在移动互联网时代无所作为?
- Eclipse导出jar文件的两种方式
- 成功连接oracle数据库后读不出来数据!
- Win32 Series - Beyond Simple Clipboard Use
- ubuntu 安装svn问题总结
- php定时计划任务介绍
- 判断二进制数中1的个数