You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 10:27:40