Android开发:如何仅接收指定电话号码发来的短信?
仅读取指定电话号码短信的实现方案
你只需要在处理短信的逻辑中,先获取短信的发送方号码,再与你指定的号码进行比对,只有匹配时才提取并显示验证码。具体修改如下:
修改后的完整代码
package com.example.probe; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Build; import android.provider.Telephony; import android.telephony.SmsMessage; import android.widget.EditText; import androidx.annotation.RequiresApi; public class OTPReceiver extends BroadcastReceiver { private static EditText editText_otp; // 替换成你需要监听的指定电话号码 private static final String TARGET_PHONE_NUMBER = "10086"; public void setEditText_otp(EditText editText) { OTPReceiver.editText_otp = editText; } @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override public void onReceive(Context context, Intent intent) { SmsMessage[] smsMessages = Telephony.Sms.Intents.getMessagesFromIntent(intent); for (SmsMessage smsMessage : smsMessages) { // 获取短信发送方号码 String senderNumber = smsMessage.getOriginatingAddress(); // 判断发送号码是否与指定号码匹配 if (TARGET_PHONE_NUMBER.equals(senderNumber)) { String message_body = smsMessage.getMessageBody(); // 避免短信无@符号时出现数组越界异常 if (message_body.contains("@")) { String getOTP = message_body.split("@")[1]; editText_otp.setText(getOTP); } } } } }
补充说明
- 号码匹配细节:实际场景中发送号码可能带国家码前缀(如
+8610086)或空格,可统一格式后再比对,示例:// 去除号码中的非数字字符后对比 String cleanSender = senderNumber.replaceAll("[^0-9]", ""); String cleanTarget = TARGET_PHONE_NUMBER.replaceAll("[^0-9]", ""); if (cleanTarget.equals(cleanSender)) { // 处理逻辑 } - 异常防护:原代码直接取
split("@")[1]会在短信无@符号时崩溃,添加contains("@")判断可避免该问题。
内容的提问来源于stack exchange,提问作者mickop9
相关产品推荐
相关产品推荐

