Android 中使用ContentObserver模式获取短信用正则自动填充验证码
最近做注册的时候看到很多app在手机接受到短信的时候直接填写验证码到界面省略用户自动输入,感觉这样确实蛮人性化的呵呵,于是自己也做了一个
步骤:
首先我使用了ContentObserver监听短信,(最好知道您的验证码从那个号码发过来)
然后从短信中用正则的分组去拿到验证码(当然验证码必须是什么格式)
贴出关键代码:
注册监听短信数据库的
ContentObserverc=newContentObserver(han){ @Override publicvoidonChange(booleanselfChange){//TODOAuto-generatedmethodstub super.onChange(selfChange); han.sendEmptyMessage(0); } }; getContentResolver().registerContentObserver(Uri.parse("content://sms"),true,c); Handlerhan=newHandler(){ @SuppressWarnings("deprecation") publicvoidhandleMessage(android.os.Messagemsg){ Stringcodestr=null; try{ codestr=Cus_UnitTools.getsmsyzm(Reg_ForgetPassword.this); code.setText(codestr); requestcode(); }catch(Exceptione){ Log.e("yung","验证码提取失败:"+codestr); } }; }; publicstaticStringgetsmsyzm(Activityc){ Uriuri=Uri.parse("content://sms/inbox"); String[]projection=newString[]{"address","person","body"}; Stringselection="address='"+JTPHONE+"'"; String[]selectionArgs=newString[]{}; StringsortOrder="datedesc"; @SuppressWarnings("deprecation") Cursorcur=c.managedQuery(uri,projection,selection,selectionArgs, sortOrder); if(cur!=null&&cur.getCount()>0){ cur.moveToFirst(); Stringbody=cur.getString(cur.getColumnIndex("body")).replaceAll( "\n",""); cur.close(); returngetyzm(body,YZMLENGTH); } cur.close(); returnnull; } /** *从短信字符窜提取验证码 *@parambody短信内容 *@paramYZMLENGTH验证码的长度一般6位或者4位 *@return接取出来的验证码 */ publicstaticStringgetyzm(Stringbody,intYZMLENGTH){ //首先([a-zA-Z0-9]{YZMLENGTH})是得到一个连续的六位数字字母组合 //(?<![a-zA-Z0-9])负向断言([0-9]{YZMLENGTH})前面不能有数字 //(?![a-zA-Z0-9])断言([0-9]{YZMLENGTH})后面不能有数字出现 Patternp=Pattern .compile("(?<![a-zA-Z0-9])([a-zA-Z0-9]{"+YZMLENGTH+"})(?![a-zA-Z0-9])"); Matcherm=p.matcher(body); if(m.find()){ System.out.println(m.group()); returnm.group(0); } returnnull; } //有些验证码是纯数字的那么直接用这个就可以了 //Patternp=Pattern.compile("(?<![0-9])([0-9]{"+YZMLENGTH+"})(?![0-9])");
监听完成后记得getContentResolver().unregisterContentObserver(c);注销监听
这样子就可以监听到短信数据库的变化了记住还需要加入权限顺便列出短信权限
<!--发送短信--> <uses-permissionAndroid:name="android.permission.SEND_SMS"/> <!--阅读消息--> <uses-permissionandroid:name="android.permission.READ_SMS"/> <!--写入消息--> <uses-permissionandroid:name="android.permission.WRITE_SMS"/> <!--接收消息--> <uses-permissionandroid:name="android.permission.RECEIVE_SMS"/>
以上所述是小编给大家介绍的Android中使用ContentObserver模式获取短信用正则自动填充验证码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!