知识为进步之母,而进步又为富强之源泉。这篇文章主要讲述安卓ContentObserver模式获取短信用正则自己主动填充验证码相关的知识,希望能为你提供帮助。
近期做注冊的时候看到非常多app在手机接受到短信的时候直接填写验证码到界面省略用户自己主动输入,感觉这样确实蛮人性化的呵呵。于是自己也做了一个
步骤:
首先我使用了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就不写了呵呵这里非常清楚也非常easy..不喜勿喷。有错回帖。转载必备 尊重作者-yung7086
【安卓ContentObserver模式获取短信用正则自己主动填充验证码】
推荐阅读
- Android PopupWindow使用方法小结
- 万里征程——Windows App开发DatePickerFlyoutTimePickerFlyout的使用
- Android——4.2 - 3G移植之路之 APN
- Zenmap收集设备信息
- Windows的9种最佳免费带宽监控工具合集
- 8个免费软件(检查和修复SSD硬盘坏道)
- 8款Windows的最佳免费音频频谱分析仪合集
- 11款Windows的最佳免费乐谱软件合集
- 8款Windows的最佳免费MIDI编辑器软件合集