Broadcast Receiver(一)

发布时间:2016-12-10 22:58:59 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Broadcast Receiver(一)",主要涉及到Broadcast Receiver(一)方面的内容,对于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中模拟短信发送: 在发送短信之后程序就会接收到广播.  

上一篇:Python正则表达式指南
下一篇:Win32 Series - Simple Use of the Clipboard

相关文章

相关评论