在 Android 中实现自动获取短信验证码的功能可以分为以下几个步骤:
<uses-permission android:name="android.permission.READ_SMS"/>
public class SMSReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdusObj = (Object[]) bundle.get("pdus");
if (pdusObj != null) {
for (Object pdus : pdusObj) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus);
String messageBody = smsMessage.getMessageBody();
// 提取短信中的验证码
String verificationCode = extractVerificationCode(messageBody);
// 处理获取到的验证码
// ...
}
}
}
}
}
private String extractVerificationCode(String messageBody) {
// 根据短信的内容提取验证码
// 例如通过正则表达式匹配验证码的格式
// ...
}
}
// 在需要接收短信的页面或者 Application 类中注册 BroadcastReceiver
SMSReceiver smsReceiver = new SMSReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(smsReceiver, intentFilter);
注意:在不需要获取短信验证码的时候,记得要取消注册 BroadcastReceiver。
// 取消注册 BroadcastReceiver
unregisterReceiver(smsReceiver);
这样,当有新的短信到来时,系统会发送一个广播到注册的 BroadcastReceiver 中,其中包含了短信的内容,我们可以在 BroadcastReceiver 中提取出短信中的验证码,并进行相应的处理。