当android系统接收到短信时,会发送一个广播BroadcastReceiver,这个广播是以有序广播的形式发送的。
所谓的有序广播就是广播发出后,接收者是按照设置的优先级一个一个接着接收,前面的接收者可以选择是否终止这条广播以使后面的接收者接收不到,而普遍广播发送后所有的接收者都能同时接到,但是不能终止这条广播,也不能将它的处理结果传递给下个接收者。
今天实现的sms拦截就是通过实现一个BroadcastReceiver并将其的优先级设置的比系统sms接收者高。
首先实现一个BroadcastReceiver
package sy.android.interceptsms;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
public class SMSReceive extends BroadcastReceiver {
static final String TAG="SMSReceive";
static final String smsuri="android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context arg0, Intent arg1) {
if(arg1.getAction().equals(smsuri)){
Bundle bundle= arg1.getExtras();
if(null!=bundle){
Object[] pdus = (Object[])bundle.get("pdus");
SmsMessage[] smg = new SmsMessage[pdus.length];
for(int i=0; i<pdus.length;i++){
smg[i]=SmsMessage.createFromPdu((byte[])pdus[i]);
Log.i(TAG+"smg"+i,smg[i].toString());
}
for(SmsMessage cursmg:smg){
String codeStr=cursmg.getDisplayMessageBody();
String codeStr2=cursmg.getDisplayOriginatingAddress();
String codeStr3=cursmg.getMessageBody();
String codeStr6=cursmg.getOriginatingAddress();
Log.i(TAG+"codeStr",codeStr); Log.i(TAG+"codeStr2",codeStr2); Log.i(TAG+"codeStr3",codeStr3);
(TAG+"codeStr5",codeStr5);
Log.i(TAG+"codeStr6",codeStr6);
}
abortBroadcast(); //终止此条广播
}
}
}
}
然后,我们还要注册它,android:priority就是设置优先级的。
<receiver android:name="SMSReceive">
<intent-filter android:priority="100">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
此为,不要忘了添加接收sms的权限
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
好了,短信拦截就实现了,如果想实现短信黑名单,只需要代码中获取到的号码和已设置的号码匹配然后做相关操作就可以了。
分享到:
相关推荐
这个广播是有序广播,意味着BroadcastReceiver可以按顺序处理,且可以被其他Receiver拦截并处理。 2. `android.provider.Telephony.SMS_DELIVERED`:这个广播在短信被成功交付到收件箱时触发,主要用于确认短信是否...
为了在后台拦截短信,用户必须在设置中手动将应用设为默认的SMS应用。 此外,ContentProvider可以用来读取和操作短信数据库。在某些情况下,可能需要通过ContentResolver查询短信数据库,找出并删除来自指定号码的...
拦截短信的技术核心在于创建一个自定义的BroadcastReceiver。这个Receiver需要重写onReceive()方法,在这里可以对接收到的短信内容进行分析和处理。例如,开发者可能希望阻止某些特定号码的短信,或者在接收到特定...
接下来,我们需要在`AndroidManifest.xml`中注册这个`BroadcastReceiver`,并添加相应的权限,因为拦截短信需要`READ_SMS`和`WRITE_SMS`权限: ```xml ``` 在`onReceive`方法中,我们可以获取到短信...
// 拦截短信,不让其他应用收到 } } } } private boolean shouldBlock(String messageBody, String sender) { // 在这里实现拦截逻辑,例如检查关键字、黑名单等 // ... return false; // 返回true表示拦截...
// 拦截短信 } } } } } private boolean shouldBlock(String sender, String message) { // 实现你的拦截规则,例如:黑名单、关键词匹配等 } ``` 4. **测试与优化** 编写完拦截逻辑后,可以在模拟器或真机...
// 拦截短信 abortBroadcast(); // 阻止短信显示到用户界面 // 可以在这里添加额外的操作,如记录日志、发送通知等 } } } } } private boolean isStrangerNumber(String number) { // 这里可以实现判断...
1. 拦截短信时,由于`abortBroadcast()`会阻止所有应用接收短信,所以这种做法在Android 4.3及以上版本中可能会被系统限制。可以考虑采用复制短信到私有空间并显示自定义通知的方式来实现拦截。 2. 对于电话拦截,...
5. **签名验证**:为了防止其他应用冒充本应用接收短信,可能会在代码中加入签名验证,只有签名匹配的应用才能成功拦截短信。 6. **用户界面**:虽然主要关注的是后台逻辑,但通常这类应用也会有一个简单的用户界面...
1. **BroadcastReceiver**: 短信拦截的核心是BroadcastReceiver,一个Android组件,用于接收并响应系统或应用广播的意图(Intent)。在短信拦截场景中,我们需要创建一个注册了`android.provider.Telephony.SMS_...
本示例中的"android中利用广播实现指定电话号码的短信的拦截 源码"是一个Android应用,它展示了如何通过创建自定义广播接收器来拦截并处理特定来源的短信。下面我们将深入探讨这一主题。 1. **广播接收器**:在...
为了在QQ通讯录之前拦截短信,我们需要创建一个自定义的BroadcastReceiver,并在AndroidManifest.xml文件中注册它。这个BroadcastReceiver需要监听SMS_RECEIVED行动,这是系统发出短信到达的通知。在...
最后,短信拦截涉及到更深层次的操作,因为Android系统默认不允许第三方应用拦截短信。从Android 4.3(API级别18)开始,系统引入了权限`READ_SMS`和`WRITE_SMS`,但仅对系统应用开放。对于普通应用,可以监听短信,...
要实现在QQ通讯录之前拦截短信,我们需要创建一个自定义的BroadcastReceiver,并在AndroidManifest.xml中注册它。注册时,我们的Receiver的优先级应该高于QQ通讯录的Receiver,这样系统在发送短信广播时会先调用我们...
在IT行业中,拦截短信功能通常涉及移动应用开发,特别是Android平台,因为iOS系统对这类操作有严格的限制。这个功能在安全、隐私以及某些特定应用场景下具有重要意义。在这里,我们将深入探讨如何在Android平台上...
4. 在`SmsReceiver`的`onReceive()`方法中,可以通过调用`abortBroadcast()`方法来终止广播的传播,从而实现短信拦截的功能。 #### 系统广播 除了应用内部的广播外,Android系统还提供了多种内置的广播类型,用于...
本文将深入探讨基于安卓平台的短信拦截应用程序的开发与实现,主要通过分析给出的源码进行学习和研究。短信拦截应用程序是一种能够控制和管理手机接收到的短信的应用,它可以阻止特定号码或所有号码的短信在用户手机...
3. **自定义拦截逻辑**:在BroadcastReceiver的onReceive方法中,编写代码来分析来电号码或短信内容,根据预设规则或用户设置决定是否拦截。 4. **UI交互**:为了用户能够设置拦截规则或者查看拦截记录,应用通常会...