Android 中使用ContentObserver模式获取短信用正则自动填充验证码

Android 中使用ContentObserver模式获取短信用正则自动填充验证码,第1张

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

最近做注册的时候看到很多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" />

 以上所述是小编给大家介绍的AndroID 中使用ContentObserver模式获取短信用正则自动填充验证码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

总结

以上是内存溢出为你收集整理的Android 中使用ContentObserver模式获取短信用正则自动填充验证码全部内容,希望文章能够帮你解决Android 中使用ContentObserver模式获取短信用正则自动填充验证码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1147075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存