Android——自动填写短信验证码

原创 2015年12月15日 20:56:46

在许多的APP中会涉及到获取短信验证码的选项,如果支持验证码自动填写会帮用户节省一部分操作
下面介绍一种简单的接到短信自动获取验证码填写到验证码输入框的方法

分下面几个步骤

主要是利用观察者模式,向短信服务(Sms),注册一个ContentObserver
创建一个ContentObserver

//可以写一个自定义的类继承自ContentObserver接口,也可以实现一个匿名ContentObserver的实现

 public static class SmsObserver extends ContentObserver {

        private Context context;
        private Handler handler;

        /**
         * Creates a content observer.
         *
         * @param handler The handler to run {@link #onChange} on, or null if none.
         */
         //构造方法里面传递一个Context和一个Handler,handler是用来更新UI线程
        public SmsObserver(Context context, Handler handler) {
            super(handler);
            this.context = context;
            this.handler = handler;
        }

        //当系统中短信发生变化(接收到短信)时,会调用这个函数,在这个函数中使用handler更新UI
        @Override
        public void onChange(boolean selfChange, Uri uri) {
           // super.onChange(selfChange, uri);
            Log.e("tag", uri.toString());
            //当接收到短信时,会两次调用onChange函数,第一次数据库并没有发生变化(第一次调用uri为content://sms/raw),所以第二次调用才能取到短信内容,
            if (uri.toString().equals("content://sms/raw"))
                return;
            Uri inbox = null;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
                inbox = Telephony.Sms.Inbox.CONTENT_URI;
            }
            //取得系统的短信数据库内容,传递回来的是 一个cursor
            Cursor c = context.getContentResolver().query(inbox,
                    null, null, null, null);
            if (c != null && c.moveToFirst()) {
                //取得短信的发件人
                String address = c.getString(c.getColumnIndex(Telephony.Sms.ADDRESS));
                //取得短信的内容
                String body = c.getString(c.getColumnIndex(Telephony.Sms.BODY));
                //使用正则表达式来过滤短信的验证码
                Pattern pattern = Pattern.compile("(\\d{6})");
                //进行正则表达式过滤
                Matcher matcher = pattern.matcher(body);
                String validerCode = "";
                //如果满足条件,找到了验证码
                if (matcher.find())
                    validerCode = matcher.group(0);
                Log.e("tag", validerCode);
                //将验证码通过handler传递给UI线程,在UI线程里面进行页面的更新
                handler.obtainMessage(1, validerCode).sendToTarget();
            }
        }
    }

在主线程注册短信观察Observer

//新建一个观察者,参数是Context和一个用于更新UI的handler
 observer = new SmsObserver(this, handler);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            //注册观察者,参数为URI,Flag和观察者对象
            getContentResolver().registerContentObserver(CONTENT_URI, true, observer);
        }

在Handler中实现主UI的更新

 private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            //取个msg中的obj数据,并显示到TextView中
            tv.setText(msg.obj.toString());
            //取消注册
            getContentResolver().unregisterContentObserver(observer);
        }
    };

主要过程就是,向系统短信服务注册一个观察者,当接收到短信时,会调用观察者的onChange函数,在该函数中取得系统的第一条短信的信息,可以判断发件人是否正确,然后取出短信的内容进行验证码的提取,最后通过构造函数传递进去的handler发送Message给UI线程,在UI线程中的handler的handleMessage(Message msg)中取出msg.obj进行UI页面的更新。

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

安卓开发采用观察者模式ContentObserver监听短信用正则获取短信验证码
  • yung7086
  • yung7086
  • 2014年05月17日 21:26
  • 13571

Android短信验证码自动填写功能的实现

android应用经常会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,通常,用户收到短信需要最小化应用去查看短信再填入验证码,必然比较麻烦,因此有必要能够自动获得下发的短信...
  • u014343528
  • u014343528
  • 2016年03月15日 20:08
  • 2762

Android获取短信验证码并自动填充的两种方式

有些项目为了方便客户操作,减去客户输入短信验证码的时间,会要求安卓app能够获取收到的短信验证码并自动填充到输入框。所以,我整理了安卓获取短信验证码并自动填充输入框的两种方法,而且正式在项目中使用并无...
  • dwj611
  • dwj611
  • 2017年04月13日 13:42
  • 1518

android--监听短信实现短信验证码自动填充

android中短信验证码的自动填充
  • biaobiao1217
  • biaobiao1217
  • 2016年07月08日 14:51
  • 1052

短信验证码自动填写

在应用的开发过程中 我们需要向用户发送验证码以验证用户的身份,但是用户收到短信验证码后,需要离开当前的应用去查看验证码,然后再返回我们的应用来填写验证码,这样会给用户带来诸多的不便。android系统...
  • leiliang568
  • leiliang568
  • 2016年01月12日 17:25
  • 787

Android 自动填写验证码

获取验证码几乎是每个应用所必备的,很多应用在用户注册的时候设置一个验证码的功能,根据手机号获取验证码的作用就是防止恶意注册。先来看一下效果图 上面的效果就是读取短信的信息,然后根据信息内容将验证...
  • u014452224
  • u014452224
  • 2016年12月28日 17:00
  • 1275

Android 之短信验证码自动填写

最近做项目。老板提到自动填写后台发送的短信验证码狠人性化,老板的话。就是我们的目标,那就开始做咯。 其实也很简单。不多说直接上代码 public class SmsContent extends...
  • qq1221jyj
  • qq1221jyj
  • 2015年07月22日 11:35
  • 219

android 短信验证码自动填写

android 短信验证码自动填写
  • coderinchina
  • coderinchina
  • 2016年04月11日 19:04
  • 296

Android 短信验证码自动填写

转自:http://blog.csdn.net/soul_code/article/details/50337221 这个也不是什么新东西,目前很多app都有这个功能,最近有几个小伙伴问我是怎么实现...
  • linder_qzy
  • linder_qzy
  • 2015年12月17日 10:45
  • 249

android短信验证码自动填写

首先学习一下观察者模式:观察者模式是软件设计模式中的一种,在此种模式下,一个目标物件管理所有相依于它的观察者物件,并且在他本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法 来实现。此...
  • shi1451042748
  • shi1451042748
  • 2015年11月21日 00:17
  • 213
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android——自动填写短信验证码
举报原因:
原因补充:

(最多只允许输入30个字)