这篇文章主要介绍了机器人自动获取短信验证码功能,通过自定义短信监听器用于自动填充验证码功能,具体实现代码大家可以参考下本文
先给大家展示下效果图,如果大家感觉不错,请参考实现代码。
1.自定义监听类
/**
* 短信监听器,用于自动填充验证码
*/
公共类SMSContentObserver扩展了ContentObserver {
公共最终字符串短信_ URI _收件箱=' content://SMS/INBOX ';//收信箱
私有活动活动=空
私有字符串短信内容=" ";//验证码
private EditText verify text=null;//验证码编辑框
私有字符串SMS _ ADDRESS _ pr号=' 10690329013589 ';//短息发送提供商
私有字符串短信id=
//短信观察者收到一条短信时onchange方法会执行两次,所以比较短信id,如果一致则不处理
公共SMS内容观察器(Activity Activity、Handler handler、EditText verifyText) {
超级(经手人);
this.activity=活动
这个。验证文本=验证文本;
}
@覆盖
公共void onChange(boolean self change){
super.onChange(自我改变);
Cursor cursor=null//光标
//读取收件箱中指定号码的短信
光标=活动。getcontentresolver().查询(uri。解析(短信_ URI _收件箱)、
新字符串[]{'_id ','地址','正文','读取' },//要读取的属性
地址=?然后读=?', //查询条件是什么
新字符串[]{SMS_ADDRESS_PRNUMBER,' 0'},//查询条件赋值
日期desc’);//排序
如果(光标!=null) {
光标。移到第一个();
if (cursor.moveToFirst()) {
//比较和上次接收到短信的身份证明是否相等
如果(!smsid。等于(光标。getstring(游标。getcolumnindex(' _ id ')){
字符串短信正文=光标。getstring(游标。获取列索引(“body”);
//用正则表达式匹配验证码
模式模式=模式。编译(“[0-9]{ 6 }”);
匹配器matcher=模式。matcher(短信正文);
if (matcher.find()) {//匹配到6位的验证码
短信内容=匹配器。group();
if (verifyText!=null null!=smsContent!''.等于(短信内容)){
验证文本。请求焦点();//获取焦点
验证文本。settext(短信内容);//设置文本
验证文本。设置选择(短信内容。length());//设置光标位置
}
}
sm sid=游标。getstring(游标。getcolumnindex(' _ id ');
}
}
}
}
}
2.在登录页面事件化监听类
//实例化短信监听器
SMSContentObserver mObserver=new SMSContentObserver(get activity()、new Handler()、mEt _ auth _ code);
//注册短信变化监听
mContext.getContentResolver().registerContentObserver(uri。parse(' content://SMS/'),true,mob server);
3.声明读取短信权限
uses-permission Android:name=' Android。许可。'接收_短信'/
uses-permission Android:name=' Android。许可。read _ SMS '/
uses-permission Android:name=' Android。许可。write _ SMS '/
4.为了防止内存泄漏,记得注销监听
@覆盖
public void onDestroy() {
超级棒。on destroy();
//注销短信监听
mContext.getContentResolver().unregisterContentObserver(mObserver);
}
小结:
去短信库获取短信比较不容易被拦截
以上所述是小编给大家介绍的机器人自动获取短信验证码功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。