android短信验证码自动填写

原创 2015年11月21日 00:17:02

首先学习一下观察者模式:

观察者模式是软件设计模式中的一种,在此种模式下,一个目标物件管理所有相依于它的观察者物件,并且在他本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法
来实现。此种模式通常被用来实现事件处理系统。
观察者模式(Observer)完美的将观察者和被观察者的对象分离开,在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。
观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。

ContentObserver

内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于数据库技术中的触发器,当ContentObserver所观察的Uri发生变化时,便会触发它。

观察特定Uri的步骤如下:
1.创建我们特定的ContentObserver派生类,必须重载父类构造方法,必须重载onChange()方法去处理回调后的功能实现。
2.利用context.getContentResolover()获得ContentResolover对象,接着调用registerContentObserver()方法去注册内容观察者。
3.由于ContentObserver的生命周期不同步于Acitivity和Service等,因此,在 不需要时,需要手动的调用unregisterContentObserver()去取消注册。

1.编写SmsContentObserver类

public class SmsObserver extends ContentObserver {

    private Context mContext;
    private Handler mHandler;

    public SmsObserver(Context context ,Handler handler){
        super(handler);
        mContext = context;
        mHandler = handler;

    }


    @Override
    public void onChange(boolean selfChange, Uri uri) {
        super.onChange(selfChange, uri);

        Log.e("DEBUG", "sms has changed");
        Log.e("DEBUG",uri.toString());

        String code = "";

        //短信变化发出第一个变化是下面的uri,但这时短信并未写入到数据库中,因此这次变化不能做出回调
        if ((uri.toString()).equals("content://sms/raw")){
            return;
        }

        Uri inboxUri = Uri.parse("content://sms/inbox");
        Cursor c = mContext.getContentResolver().query(inboxUri,null,null,null,"date desc");//按日期倒序排列
        if (c!=null){
            if (c.moveToFirst()){
                String address =  c.getString(c.getColumnIndex("address"));
                String body = c.getString(c.getColumnIndex("body"));

                //判断发件人
                if (!address.equals("15566668888")){
                    return;
                }

                Log.e("DEBUG", "发件人为:" + address + "   " + "短信内容:" + body);

                Pattern pattern = Pattern.compile("(\\d{6})");//这个正则表达式就是指提取连续6个数字
                Matcher matcher = pattern.matcher(body);

                if (matcher.find()){
                    code = matcher.group(0);
                    Log.e("DEBUG","code is "+code);

                    mHandler.obtainMessage(MainActivity.MSG_RECEIVED_CODE,code).sendToTarget();

                }

            }
            c.close();
        }

    }
}

2.注册observer

 //注册observer
        mObserver = new SmsObserver(MainActivity.this,mHandler);
        Uri uri = Uri.parse("content://sms");//这个uri指代的就是我们的短信
        getContentResolver().registerContentObserver(uri, true , mObserver);

3.最后使用handler修改UI

private Handler mHandler = new Handler(){

        @Override
        public void handleMessage(Message msg) {
            if (msg.what == MSG_RECEIVED_CODE){
                String code = (String) msg.obj;
                //update UI
                mEditText.setText(code);

                Toast.makeText(MainActivity.this,code,Toast.LENGTH_LONG).show();

            }
        }
    };
版权声明:本文为博主原创文章,未经博主允许不得转载。

android 短信验证码自动填写的两种方式

实际应用开发中,会经常用到短信验证的功能,这个时候如果再让用户就查看短信.然后再回到界面进行短信的填写,难免有多少有些不方便,作为开发者.本着用户至上的原则我们也应该来实现验证码的自动填写功能,实现短...
  • u010399316
  • u010399316
  • 2015年09月28日 10:23
  • 2375

Android 短信验证码自动填写

这个也不是什么新东西,目前很多app都有这个功能,最近有几个小伙伴问我是怎么实现的,索性写一篇博客来为大家解答。        实现思路很简单:1、在需要输入验证码的Activity代码注册监听短信...
  • soul_code
  • soul_code
  • 2015年12月17日 09:09
  • 3478

android获取短信验证码并自动填写

参考资料如下,亲测很好用,哈哈: http://blog.csdn.net/kaloda2011/article/details/21032829代码如下: MainActivitypublic ...
  • jane1229
  • jane1229
  • 2016年09月12日 17:11
  • 3360

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

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

Android 自动获取输入短信验证码库AutoVerifyCode

一、简介Android的短信验证码自动输入库,内嵌自动申请权限,兼容性高,支持多项配置。 短信验证码长度 验证码类型(大写字母、小写字母、大小写字母、数字、数字字母) 短信内容过滤 发送者号码过滤 短...
  • niubitianping
  • niubitianping
  • 2017年07月24日 10:44
  • 971

android 短信验证码自动填写

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

android 短信验证码自动填写

contentobserver监听短信内容的变化,利用正则表达式提取 监听短信广播,过滤不需要监听的号码,利用真个表达式提取...
  • u013920681
  • u013920681
  • 2015年09月17日 11:04
  • 295

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

在许多的APP中会涉及到获取短信验证码的选项,如果支持验证码自动填写会帮用户节省一部分操作 下面介绍一种简单的接到短信自动获取验证码填写到验证码输入框的方法分下面几个步骤主要是利用观察者模式,向短信...
  • a591193965
  • a591193965
  • 2015年12月15日 20:56
  • 477

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

今天给大家分享一个短信验证码自动填写的功能。先看下效果图,我发送了一条短信到手机,自动填写验证码。如图: 这个小功能运用到了观察者模式,什么是观察者模式? 观察者模式 :定义对象间的一种一个(...
  • wyj2424
  • wyj2424
  • 2015年09月26日 15:30
  • 561

android获取短信验证码并自动填写的实现一

android获取短信验证码并自动填写的实现一,有需要的朋友可以参考下。 现在的应用在注册登录或者修改密码中都用到了短信验证码,那在android中是如何实现获取短信验证码并自动填写的呢? 首...
  • lyglostangel
  • lyglostangel
  • 2015年09月30日 09:49
  • 1334
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android短信验证码自动填写
举报原因:
原因补充:

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