标签:
生活中的电视频道、收音机、手机、都有自己的特定广播,他们不管是否有人关心、收听等,不管你是否看电视,每个频道都实施按照自己的进步进行播放、收音机也是!所以我理解的android广播机制也就是这样--广播发布者只负责把发生的事件发出,至于是否有接听者或者接听者接收到怎样处理并不关心。
现在我们就来实现一个简单的广播程序。Android提供了两种注册广播接受者的形式,分别是在程序中动态注册和在xml中指定。他们之间的区别就是作用的范围不同,程序动态注册的接收者只在程序运行过程中有效,而在xml注册的接收者不管你的程序有没有启动有会起作用。首先介绍在程序中动态注册的方式。
Android有系统广播也可以自定义广播,要想接受广播信息,那么这个广播接收器就得我们自己来实现了,我们可以继承BroadcastReceiver,就可以有一个广播接受器了。有个接受器还不够,我们还得重写BroadcastReceiver里面的onReceiver方法,当来广播的时候我们要干什么,下面一个小程序来进行展示广播的应用。
一、注册(当实现了广播接收器,还要设置广播接收器接收广播信息的类型,这里是信息:android.provider.Telephony.SMS_RECEIVED)
1
2
3
4
5
6
7
|
//生成广播处理 smsBroadCastReceiver = new SmsBroadCastReceiver(); //实例化过滤器并设置要过滤的广播 IntentFilter intentFilter = new IntentFilter( "android.provider.Telephony.SMS_RECEIVED" ); //注册广播 BroadCastReceiverActivity. this .registerReceiver(smsBroadCastReceiver, intentFilter); |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<?xml version= "1.0" encoding= "utf-8" ?> <manifest xmlns:android= "http://schemas.android.com/apk/res/android" package = "spl.broadCastReceiver" android:versionCode= "1" android:versionName= "1.0" > <application android:icon= "@drawable/icon" android:label= "@string/app_name" > <activity android:name= ".BroadCastReceiverActivity" 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= ".SmsBroadCastReceiver" > <intent-filter android:priority= "20" > <action android:name= "android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> </application> <uses-sdk android:minSdkVersion= "7" /> <!-- 权限申请 --> <uses-permission android:name= "android.permission.RECEIVE_SMS" ></uses-permission> </manifest> |
二、继承BroadcastReceiver,重写onReceiver方法。这里是监听到短信发送,将触发这个广播,然后把短信内容解析出来并展示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class SmsBroadCastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); Object[] object = (Object[])bundle.get( "pdus" ); SmsMessage sms[]= new SmsMessage[object.length]; for ( int i= 0 ;i<object.length;i++) { sms[ 0 ] = SmsMessage.createFromPdu(( byte [])object[i]); Toast.makeText(context, "来自" +sms[i].getDisplayOriginatingAddress()+ " 的消息是:" +sms[i].getDisplayMessageBody(), Toast.LENGTH_SHORT).show(); } //终止广播,在这里我们可以稍微处理,根据用户输入的号码可以实现短信防火墙。 abortBroadcast(); } } |
BroadcastReceiver--Android广播机制
标签:
原文地址:http://www.cnblogs.com/shouce/p/5362060.html