安卓ContentObserver模式获取短信用正则自动填充验证码
2014-05-17 21:26
483 查看
最近做注册的时候看到很多app在手机接受到短信的时候直接填写验证码到界面省略用户自动输入,感觉这样确实蛮人性化的呵呵,于是自己也做了一个
步骤:
首先我使用了ContentObserver监听短信,(最好知道您的验证码从那个号码发过来)
然后从短信中用正则的分组去拿到验证码(当然验证码必须是什么格式)
贴出关键代码:
注册监听短信数据库的
//有些验证码是纯数字的那么直接用这个就可以了
//Pattern p = Pattern.compile("(?<![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监听短信,(最好知道您的验证码从那个号码发过来)
然后从短信中用正则的分组去拿到验证码(当然验证码必须是什么格式)
贴出关键代码:
注册监听短信数据库的
ContentObserver c=new ContentObserver(han) { @Override public void onChange(boolean selfChange) { // TODO Auto-generated method stub super.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 = Pattern .compile("(?<![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 = Pattern.compile("(?<![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
相关文章推荐
- Android 中使用ContentObserver模式获取短信用正则自动填充验证码
- 安卓ContentObserver模式获取短信用正则自己主动填充验证码
- 安卓发送验证码倒计时效果和自动获取验证码并填充到输入框
- android获取短信并自动填充
- android读取短信内容 自动填充验证码
- android读取短信内容(自动填充验证码)
- 安卓短信验证码的获取
- atitit.破解 拦截 绕过 网站 手机 短信 验证码 之自动获取手机短信方式 attilax 总结
- android获取短信并自动填充
- android 短信验证自动获取验证码
- 安卓自动获取验证码(忘记密码为例)
- 自动获取短信中的验证码
- android读取短信内容 自动填充验证码
- atitit.破解 拦截 绕过 网站 手机 短信 验证码 之自动获取手机短信方式 attilax 总结
- 仿照支付宝等——自动获取短信中的验证码
- android获取短信并自动填充
- Android获得短信中的验证码并自动填充
- 发送手机短信获取验证码功能
- ThinkPHP中的时间自动填充 无法获取时间
- 安卓应用开发用户体验之禁止EditText自动获取焦点