在Android中,短信拦截可以通过继承 BroadcastReceiver 并拦截特定的短信广播来实现。
以下是一个基础短信的拦截代码示例:
public class SMSReceiver extends BroadcastReceiver {
// 接收短信的 Intent filter action
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() != null && intent.getAction().equals(SMS_RECEIVED)) {
// Retrieve a map of extended data from the intent
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
if (pdus != null) {
for (Object pdu : pdus) {
// 将单个 PDU 转换为 SmsMessage
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
// 从短信中获取发送者
String sender = smsMessage.getDisplayOriginatingAddress();
// 从短信中获取短信内容
String messageBody = smsMessage.getMessageBody();
// 在这里,可以根据需要来拦截具体的短信
if (sender.contains("特定号码或特定的内容")) {
// 终止广播(不让其他应用收到此广播,短信到达手机后,不在通知栏提示)
abortBroadcast();
}
}
}
}
}
}
}
用此代码,记得要在AndroidManifest.xml文件中注册该接收器:
<receiver android:name=".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" />
<uses-permission android:name="android.permission.READ_SMS" />
最后,在应用中必须获得用户的同意以获取接收和读取短信的权限。可以在程序开始时使用请求权限的API请求权限:
if(ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECEIVE_SMS, Manifest.permission.READ_SMS}, 123);
}
注意: Android 4.4(KitKat)及更高版本的系统对于短信的处理有较大的改变。由原来的任何应用都可以接收短信变成只有默认的短信应用可以接收到新的短信。
以上就是基本的短信拦截代码的实现方法。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/171389.html