今天学习了通过Broadcast广播监听短信内容,与上一篇广播监听拨打电话类似,只是这一次修改了广播的类型为SMS_RECEIVED,SMS是short message service的简称。
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
然后修改自定义的广播内容onReceive()。
public void onReceive(Context context, Intent intent) {
// 获取广播内容,getExtras返回一个bundle对象
Bundle bundle = intent.getExtras();
// pdu是短信的基本承载单元,短信要求长度,超过长度则被分为许多个pdu
Object[] objects = (Object[]) bundle.get("pdus");
for (Object object:objects){
// 创建message对象,把数组元素转化成短信对象
SmsMessage message = SmsMessage.createFromPdu((byte[]) object);
// 获取发件人电话
String number = message.getOriginatingAddress();
// 获取短信内容
String content = message.getMessageBody();
Log.e("TAG",number+":"+content);
// 拦截短信
if (number.equals("15174936837")){
// 拦截广播
abortBroadcast();
}
}
/**
* 测试结果:
* 发送hello java 打印:E/TAG: 15174936837:Hello world
*/
}
监听广播需要申请权限
<!--申请广播接收器监听短信权限-->
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
打算做短信拦截器,通过abortBroadcast()拦截广播的方式,但是没有成功。浏览网页查到是因为Android4.4版本之后只有默认的短信应用才可以对短信进行其他操作,否则只有读的权限。