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

Android终止广播实现短信拦截

2017-02-02 14:46 405 查看

Android终止广播实现短信拦截

最近在学习广播,下面记录下通过广播拦截短信,并让系统短信应用没有新短信提示。

Setp1

-创建SmsReceiver.java继承BroadcastReceiver代码如下:

public class SmsReceiver extends BroadcastReceiver {

private static final String tag = "SmsReceiver";

public void onReceive(Context context, Intent intent) {

Object[] objects = (Object[]) intent.getExtras().get("pdus");
//循环遍历短信过程
for (Object object : objects) {
// 获取短信对象
SmsMessage sms = SmsMessage.createFromPdu((byte[]) object);
// 获取导向对象的基本信息
String originatingAddress = sms.getOriginatingAddress();
String messageBody = sms.getMessageBody();
Log.i(tag, "号码:" + originatingAddress);
Log.i(tag, "内容" + messageBody);
//终止广播传输
abortBroadcast();
}
}
}


Setp2

-添加权限,这个作为一名开发者是不会忘记的,如果不添加大家都知道是什么应的结果:

<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>

<receiver android:name=".receiver.SmsReceiver">
<!-- 设置优先级为最大 -->
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>


这里有人会问道:为什么会把意图过滤器里面的android:priority=”2147483647”设置为”2147483647”

答案是:谷歌文档里说的优先级最大为1000,但是我们可以使用大于1000的数字,这里用2147483647是在java中最大的自然数。

不能使用高于2147483647,高于则为负数,优先级最低。如果优先级没有系统短信应用的优先级高,就会实现拦截失败的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息