在Android 中使用ContentObserver怎么获取短信验证码并实现自动填充?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
成都创新互联从2013年成立,先为峨山县等服务建站,峨山县等地企业,进行企业商务咨询服务。为峨山县企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
步骤:
首先我使用了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})是得到一个连续的六位数字字母组合 // (?
监听完成后记得getContentResolver().unregisterContentObserver(c);
注销监听
这样子就可以监听到短信数据库的变化了记住还需要加入权限顺便列出短信权限
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。