本文主要介绍Android的短信验证码自动填充功能,感兴趣的朋友可以参考一下。
本例分享Android自动填写短信验证码的功能,供大家参考。具体情况如下
这个想法很简单:
1.在需要输入验证码的活动代码中注册并监控SMS的广播。
2.拦截短信,获取验证码。
3.写回编辑文本
private SmsReciver SmsReciver=new SmsReciver();
/* *收到短信操作**/
string ACTION _ SMS _ reci ver=' Android . provider . telephony . SMS _ RECEIVED ';
/**
*注册的广播接收端监控短信验证码并自动回写,可在onCreate()中注册;
*/
私有void registSmsReciver() {
intent filter filter=new intent filter();
filter . addaction(ACTION _ SMS _ reci ver);
//设置优先级,否则将无法收听短信。
filter . set priority(1000);
register receiver(SMS receiver,filter);
}
/**
* SMS广播接收器用户监控SMS并自动填写验证码。
*/
私有类SmsReciver扩展BroadcastReceiver {
@覆盖
公共void onReceive(上下文语境,意图意图){
Object[]objs=(Object[])intent . get extras()。get(“PDU”);
for (Object obj : objs) {
yte[]PDU=(byte[])obj;
SMS message SMS=SMS message . createfrompdu(PDU);
//消息的内容
string message=SMS . getmessagebody();
Log.d('log ',' message '消息);
//短信手机号。如果贵公司发送的验证码数量是固定的,可以在这里查看数量。
string from=SMS . getoriginatingaddress();
log . d(" log "," from " from);
analysisVerify(消息);
}
}
}
/**
*解析短信,写回来。这里解析的短信是纯数字。如果小伙伴的验证码中含有字母,可以用常规的代替。
*
* @param消息
*/
私有void analysisVerify(字符串消息){
char[]msgs=message . tochararray();
string buffer sb=new string buffer();
for(int I=0;i msgs.lengthi ) {
if ('0'=msgs[i] msgs[i]='9') {
sb . append(msgs[I]);
}
}
metverifycode . settext(sb . tostring());
}
@覆盖
受保护的void onDestroy() {
super . on destroy();
//取消短信广播的注册
if (smsReciver!=null) {
unregister receiver(SMS receiver);
smsReciver=null
}
}
可以看到,代码逻辑比较简单,有几点需要注意。我们这里用的代码注册广播,之所以不采取全局广播的形式,是因为两天。在更高版本的api中,注册全局短信监控将无效。而且就业务而言,我们只能在输入验证码的活动中监控短信。采用代码注册的形式,在当前活动被破坏时取消广播注册,更符合我们的预期,提高了应用的性能。
第二个需要注意的问题是优先级的问题。
filter . set priority(1000);
如您所见,我们在这里将优先级设置为最高。确保我们的应用程序能够尽可能多地接收短消息。注意,我用的是“尽可能”,也就是说,我们不能保证短信的自动填充会成功执行。有小伙伴可能会问,我们不是把优先级设到最高了吗?
为什么还不能保证了?
其实原因很简单。您可以将短信监控的优先级设置为最高。同样,其他应用程序也可以将短信监控的优先级设置为最高。比如你的手机装了360安全卫士,你公司的验证码被视为垃圾短信拦截。此时短信拦截将失效。
这就是本文的全部内容,希望对大家的学习有所帮助。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。