欢迎进入西安甲骨文培训机构 乘车路线| 关于我们| 设为首页| 加入收藏
logo 服务热线
1 2 3 3

新闻动态

联系我们

咨询报名电话:
029-85568080,029-85427081
传真:029-85568080
地址:陕西省西安市长安南路355号华银大厦(西北政法大学老校区对面西安银行南侧)

优秀学员

技术中心 当前位置:首页 > 新闻动态 > 技术中心

[android] 广播接收者

点击: 时间:2013-12-30
广播接收者(BroadcastReceiver)
一、什么是广播:
当一个事件产生的时候,就会发出一个广播,所有注册了这个广播的接受者,都可以接收到这个广播。


二、定义广播接收者步骤:(短信的监听器:接收短信的到来时发出的广播,并获取短信的内容)
1、自定义一个类,继承BroadcastReceiver类。覆写onReceive方法

public class SmsReceiver extends BroadcastReceiver {

publicvoid onReceive(Context arg0, Intent data) {

System.out.println("短信到来了");

//pdus为短信的规范,获取短信的数组。

Object[] pdus = (Object[])data.getExtras().get("pdus");

for(Object pdu : pdus){

//获取每一条短信对象

SmsMessage smsmessage = SmsMessage.createFromPdu((byte[]) pdu);

//短信的内容:

Stringcontent = smsmessage.getMessageBody();

System.out.println(content);

if(content.contains("fapiao")){

abortBroadcast();

}

//获取短信的发件人

Stringsender = smsmessage.getOriginatingAddress();

System.out.println(sender);


if("5558".equals(sender)){

abortBroadcast();

//获取短信的管理者

SmsManager manager =SmsManager.getDefault();

//向发送者发短信

manager.sendTextMessage(sender, null,"ni qu siba ", null, null);

}

}


// 终止掉这条广播事件

}


2、在AndroidManifest.xml清单文件中使用receiver 元素配置广播接收者:


package="cn.itcast.listener"

android:versionCode="1"

android:versionName="1.0" >






android:icon="@drawable/ic_launcher"

android:label="@string/app_name" >

//配置广播接收者


//广播接收者的意图过滤器。



//接收短信的动作

android:name="android.provider.Telephony.SMS_RECEIVED"/>







3、注意:想要广播接收者接收不同的事件发出的官博,就在清单文件中广播接收者的意图过滤器中配置相应的事件。

//配置广播接收者


//广播接收者的意图过滤器。

//指定广播优先级


//接收短信的动作

android:name="android.provider.Telephony.SMS_RECEIVED"/>




4、系统的广播事件分为两种类型:

有序广播:按顺序下达的广播,可以指定广播接收者的优先级。

优先级从-1000到1000,1000代表优先级最大。当广播到来时,按广播接收者的优先级高低传播。如果在高优先级的广播接收者中调用abortBroadcast()终止掉这条广播事件。则该广播就不会向优先级低的广播接收者传播。

例:拦截垃圾短信。

无序广播:广播接收者,同时接收这个广播。


三、案例:为拨打的号码增加IP号:
1、定义类:

public class OutGoingCallReceiver extendsBroadcastReceiver {


@Override

publicvoid onReceive(Context context, Intent arg1) {

//IP号

String ipnumber = "17951";

String number = getResultData(); //获取拨打的号码

System.out.println("当前的电话号码为"+number);

//把ip号码添加到 要拨打的号码的前面

String newnumber = ipnumber+number;

setResultData(newnumber);//设置拨打的号码


}


}

2、在清单文件中注册广播接收者:指定接收者的接收的事件和优先级:


android:icon="@drawable/ic_launcher"

android:label="@string/app_name" >





android:name="android.intent.action.NEW_OUTGOING_CALL"/>

-->



3、在清单文件中配置拨打电话的权限:


android:name="android.permission.PROCESS_OUTGOING_CALLS"/>



四、在代码中动态注册广播接收者:
在activity类中

//创建广播接收者

OutGoingCallReceiver receiver = newOutGoingCallReceiver();

//创建意图过滤器

IntentFilter filter = new IntentFilter();

filter.setPriority(1000);//设置优先级

//设置意图

filter.addAction("android.intent.action.NEW_OUTGOING_CALL");

//注册广播接收者

registerReceiver(receiver, filter);


五、广播接收者的生命周期:

如果广播接收者响应超过10秒,会导致主线程无响应。报出anr异常。