本实例为大家分享了Android实现短信验证码自动填写功能,供大家参考,具体内容如下
实现思路很简单:
1、在需要输入验证码的Activity代码注册监听短信的广播 2、拦截短信,获取其中的验证码 3、回写到EditText
private SmsReciver smsReciver = new SmsReciver();
String ACTION_SMS_RECIVER = "android.provider.Telephony.SMS_RECEIVED";
private void registSmsReciver() {
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_SMS_RECIVER);
// 设置优先级 不然监听不到短信
filter.setPriority(1000);
registerReceiver(smsReciver, filter);
}
private class SmsReciver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Object[] objs = (Object[]) intent.getExtras().get("pdus");
for (Object obj : objs) {
yte[] pdu = (byte[]) obj;
SmsMessage sms = SmsMessage.createFromPdu(pdu);
// 短信的内容
String message = sms.getMessageBody();
Log.d("log", "message " + message);
// 短息的手机号,如果你们公司发送验证码的号码是固定的这里可以进行一个号码的校验
String from = sms.getOriginatingAddress();
Log.d("log", "from " + from);
analysisVerify(message);
}
}
}
private void analysisVerify(String message) {
char[] msgs = message.toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < msgs.length; i++) {
if ('0' <= msgs[i] && msgs[i] <= '9') {
sb.append(msgs[i]);
}
}
mEtVerifyCode.setText(sb.toString());
}
@Override
protected void onDestroy() {
super.onDestroy();
// 取消短信广播注册
if (smsReciver != null) {
unregisterReceiver(smsReciver);
smsReciver = null;
}
}
可以看到代码逻辑比较简单,需要注意的有几点。我们这里用的代码注册广播,之所以不采取全局广播的形式原因有两天,在高版本的api,注册全局的短信监听会失效。而且就业务而言,我们监听短信只会在输入验证码的Activity里面才会用到,采用代码注册的形式,在当前Activity销毁的时候取消广播注册,更符合我们的预期,提高应用的性能。
第二个需要注意的问题是优先级的问题。
filter.setPriority(1000);
可以看到,我们这里把优先级设置成了最大。保证我们的应用能够尽可能的接受到短信。注意,我使用的是“尽可能”,也就是说我们不能保证短信自动填写一定能执行成功,有个小伙伴可能会问,我们不是把优先级设置成了最高了吗?
为什么还不能保证了?
原因其实很简单,你能把监听短信的优先级设置成最大,同样的,其他的应用也能把短信监听的优先级设置成最大。比如说,你的手机安装有360安全卫士,把你们公司的验证码视为垃圾短信拦截了,这个时候短信拦截就失效了。
您可能感兴趣的文章:Android开发工程中集成mob短信验证码功能的方法Android开发中通过手机号+短信验证码登录的实例代码Android实现短信验证码获取自动填写功能(详细版)Android获取和读取短信验证码的实现方法Android实现自动提取短信验证码功能Android获取短信验证码的实现方法Android用 Mob 实现发送短信验证码实例Android中用Bmob实现短信验证码功能的方法详解Android如何通过手机自动获取短信验证码Android短信验证服务分享