是否可以获取我在android中收到的短信的手机号码?我们正在尝试通过发送SMS并从运营商处获取用户的手机号码来进行身份验证,但是下一步涉及通过读取SMS进行身份验证。我们面临的问题是,如果我从其他任何移动设备发送相同的消息,则无法验证原始SMS号码。它盲目地阅读SMS。
答案 0 :(得分:5)
为了避免错误的SMS检索,使用SMS Retriever API获取发件人的手机号码将是一个不错的选择。但是很遗憾,到目前为止,您无法获取使用此API检索的SMS的发件人手机号码。将来的版本中可能会提供此功能。
但是,如果您已经拥有OTP验证机制,则无需担心,因为...
奖励
Google还发布了一个名为SMS用户同意API的新API,该API具有通过“一键式”自动填充OTP的功能。幸运的是,该API还提供了发件人的手机号码过滤功能。意思是,如果您的SMS提供商从特定的手机号码向您发送SMS,则可以在代码中进行指定,并且它只会读取从该手机号码收到的SMS。
参考:
SMS检索器API:https://developers.google.com/identity/sms-retriever/overview
SMS用户同意API:https://developers.google.com/identity/sms-retriever/user-consent/overview
答案 1 :(得分:0)
我实际上在我的项目中实现了它。
.xml(清单)中有一个广播接收器->
android:name=".messaging.SmsReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="999">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
and you can get it doing this in the onReceive method:
String format = "";
List<String> contents = new ArrayList<>();
for (int i = 0; i < pdus.length; i++) {
SmsMessage message;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
format = bundle.getString("format");
message = getFromPdu(pdus, format, i);
} else {
message = getFromPdu(pdus, i);
}
contents.add(Strings.emptyToNull(CharMatcher.whitespace().trimFrom(message.getMessageBody())));
sourceNumber = message.getDisplayOriginatingAddress();
}