失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 安卓ContentObserver模式获取短信用正则自动填充验证码

安卓ContentObserver模式获取短信用正则自动填充验证码

时间:2022-04-23 09:21:28

相关推荐

安卓ContentObserver模式获取短信用正则自动填充验证码

最近做注册的时候看到很多app在手机接受到短信的时候直接填写验证码到界面省略用户自动输入,感觉这样确实蛮人性化的呵呵,于是自己也做了一个

步骤:

首先我使用了ContentObserver监听短信,(最好知道您的验证码从那个号码发过来)

然后从短信中用正则的分组去拿到验证码(当然验证码必须是什么格式)

贴出关键代码:

注册监听短信数据库的

ContentObserver c=new ContentObserver(han) {@Overridepublic void onChange(boolean selfChange) {// TODO Auto-generated method stubsuper.onChange(selfChange);han.sendEmptyMessage(0);}};getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, c);Handler han = new Handler() {@SuppressWarnings("deprecation")public void handleMessage(android.os.Message msg) {String codestr = null;try {codestr = Cus_UnitTools.getsmsyzm(Reg_ForgetPassword.this);code.setText(codestr);requestcode();} catch (Exception e) {Log.e("yung", "验证码提取失败:" + codestr);}};};public static String getsmsyzm(Activity c) {Uri uri = Uri.parse("content://sms/inbox");String[] projection = new String[] { "address", "person", "body" };String selection = " address='" + JTPHONE + "' ";String[] selectionArgs = new String[] {};String sortOrder = "date desc";@SuppressWarnings("deprecation")Cursor cur = c.managedQuery(uri, projection, selection, selectionArgs,sortOrder);if(cur!=null&&cur.getCount()>0){cur.moveToFirst();String body = cur.getString(cur.getColumnIndex("body")).replaceAll("\n", " ");cur.close();return getyzm(body, YZMLENGTH);}cur.close();return null;}/*** 从短信字符窜提取验证码* @param body 短信内容 * @param YZMLENGTH 验证码的长度 一般6位或者4位* @return 接取出来的验证码*/public static String getyzm(String body, int YZMLENGTH) {// 首先([a-zA-Z0-9]{YZMLENGTH})是得到一个连续的六位数字字母组合// (?<![a-zA-Z0-9])负向断言([0-9]{YZMLENGTH})前面不能有数字// (?![a-zA-Z0-9])断言([0-9]{YZMLENGTH})后面不能有数字出现Pattern p = pile("(?<![a-zA-Z0-9])([a-zA-Z0-9]{" + YZMLENGTH + "})(?![a-zA-Z0-9])");Matcher m = p.matcher(body);if (m.find()) {System.out.println(m.group());return m.group(0);}return null;}

//有些验证码是纯数字的那么直接用这个就可以了

//Pattern p = pile("(?<![0-9])([0-9]{" + YZMLENGTH+ "})(?![0-9])");

监听完成后记得getContentResolver().unregisterContentObserver(c);注销监听

这样子就可以监听到短信数据库的变化了记住还需要加入权限顺便列出短信权限

<!-- 发送短信-->

<uses-permission android:name="android.permission.SEND_SMS" />

<!-- 阅读消息 -->

<uses-permission android:name="android.permission.READ_SMS" />

<!-- 写入消息 -->

<uses-permission android:name="android.permission.WRITE_SMS" />

<!-- 接收消息 -->

<uses-permission android:name="android.permission.RECEIVE_SMS" />

demo就不写了呵呵这里很清楚也很简单..不喜勿喷,有错回帖,转载必备 尊重作者-yung7086

如果觉得《安卓ContentObserver模式获取短信用正则自动填充验证码》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。