您的位置:首页 > 移动开发 > Android开发

Androidx学习笔记(57)--- 短信拦截器

2016-02-14 06:15 381 查看
系统收到短信时会产生一条广播,广播中包含了短信的号码和内容

定义广播接收者接收短信广播
public void onReceive(Context context, Intent intent) {
//拿到广播里携带的短信内容
Bundle bundle = intent.getExtras();
Object[] objects = (Object[]) bundle.get("pdus");
for(Object ob : objects ){
//通过object对象创建一个短信对象
SmsMessage sms = SmsMessage.createFromPdu((byte[])ob);
System.out.println(sms.getMessageBody());
System.out.println(sms.getOriginatingAddress());
}


}

系统创建广播时,把短信存放到一个数组,然后把数据以pdus为key存入bundle,再把bundle存入intent

清单文件中配置广播接收者接收的广播类型,注意要设置优先级属性,要保证优先级高于短信应用,才可以实现拦截
<receiver android:name="com.exp.smslistener.SmsReceiver">
<intent-filter android:priority="1000">
<action android:name="
android.provider.Telephony.SMS_RECEIVED
"/>
</intent-filter>
</receiver>


添加权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/>


4.0以后广播接收者安装以后必须手动启动一次,否则不生效

4.0以后广播接收者如果被手动关闭,就不会再启动了


代码

public class SmsReceiver extends BroadcastReceiver {
 
@Override
public void onReceive(Context context, Intent intent) {
//拿到短信的信息
//短信内容封装在intent中
Bundle bundle = intent.getExtras();
//以pdus为键,取出一个object数组,数组中的每一个元素,都是一条短信
//pdu:协议数据单元    pdu在这里代表的就是短信
Object[] objects = (Object[]) bundle.get("pdus");
//拿到广播中的所有短信
for (Object object : objects) {
	//通过pdu来构造短信
	SmsMessage sms = SmsMessage.createFromPdu((byte[])object);
	//这里使用的模拟数据13800138000  该数据应该从数据库中获取
	if(sms.getOriginatingAddress().equals("13800138000")){
//阻止其他广播接收者收到这条广播
abortBroadcast();
//SmsManager.getDefault().sendTextMessage(sms.getOriginatingAddress(), null, "你是个好人", null, null);
}
//	System.out.println(sms.getMessageBody());
	
}
}
 
}



AndroidManifest.xml

在该文件中进行配置优先级和Action

<receiver android:name="com.exp.smslanjie.SmsReceiver">
<!--此处要配置优先级  范围-1000~1000 -->
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: