Android短信过滤代码如何实现?
- 行业动态
- 2025-03-03
- 3
java,public class SmsReceiver extends BroadcastReceiver {, @Override, public void onReceive(Context context, Intent intent) {, if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {, Bundle bundle = intent.getExtras();, if (bundle != null) {, Object[] pdus = (Object[]) bundle.get("pdus");, for (Object pdu : pdus) {, SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdu);, String sender = sms.getDisplayOriginatingAddress();, String messageBody = sms.getMessageBody();, // 在这里添加过滤逻辑,例如阻止特定号码的短信, if (sender.equals("特定号码")) {, abortBroadcast(); // 阻止短信传递, }, }, }, }, },},
`
这段代码通过继承
BroadcastReceiver
类并重写
onReceive`方法来监听短信接收广播。当收到短信时,它会检查发送者的号码,并根据需要阻止特定号码的短信。
Android 短信过滤代码详解
一、前提条件
1、创建新项目:在Android Studio中创建一个新的项目,例如命名为"SMSInterceptor"。
2、添加权限:在AndroidManifest.xml文件中,添加读取短信和发送短信的权限。
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
(需在Android 6.0及以上版本动态申请)
二、创建BroadcastReceiver
在项目的java文件夹中,创建一个新的类,命名为"SmsReceiver":
public class SmsReceiver extends BroadcastReceiver { private static final String TAG = "SmsReceiver"; @Override public void onReceive(Context context, Intent intent) { // 接收到短信时的操作 } }
三、注册BroadcastReceiver
在AndroidManifest.xml文件中,注册创建的BroadcastReceiver:
<receiver android:name=".SmsReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>
四、处理短信
在BroadcastReceiver的onReceive方法中,处理接收到的短信:
@Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); if (pdus.length == 0) { return; } SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < pdus.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); } if (messages.length > 0) { String sender = messages[0].getOriginatingAddress(); String messageBody = messages[0].getMessageBody(); long timestamp = messages[0].getTimestampMillis(); // 在这里处理短信,如判断是否需要拦截 if (messageBody.contains("广告")) { abortBroadcast(); // 拦截短信 } } } } }
五、拦截短信
使用abortBroadcast方法来阻止短信被传递给系统的短信应用程序。
步骤 | 描述 | 代码示例 |
创建新项目 | 在Android Studio中创建新项目 | 无 |
添加权限 | 在AndroidManifest.xml中添加权限 |
等 |
创建BroadcastReceiver | 在java文件夹中创建SmsReceiver类 | public class SmsReceiver extends BroadcastReceiver {...} |
注册BroadcastReceiver | 在AndroidManifest.xml中注册SmsReceiver |
|
处理短信 | 在onReceive方法中处理短信 | if (messageBody.contains("广告")) { abortBroadcast(); } |
拦截短信 | 使用abortBroadcast方法拦截短信 | abortBroadcast(); |
七、相关问题与解答
1、问:为什么需要在AndroidManifest.xml中添加权限?
答:在AndroidManifest.xml中添加权限是为了声明应用需要访问或执行受保护操作的权限,对于短信过滤功能,需要读取短信的权限(RECEIVE_SMS)来接收短信内容,以及在某些情况下可能需要发送短信的权限(SEND_SMS)来执行特定操作,这些权限必须在清单文件中明确声明,以便系统知道应用需要这些权限,并在安装时向用户请求授权。
2、问:如何确保短信过滤功能的正常运行?
答:为了确保短信过滤功能的正常运行,需要按照上述步骤正确实现代码,并确保以下几点:
在AndroidManifest.xml中正确添加了所需的权限。
正确创建了BroadcastReceiver类并注册。
在onReceive方法中正确处理了接收到的短信,并根据需求进行了过滤或拦截。
考虑到不同版本的Android系统可能存在的差异,进行充分的测试以确保兼容性。
遵循相关法律法规和隐私政策,确保应用不会滥用权限或侵犯用户隐私。