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

观察者模式是软件设计模式中的一种,在此种模式下,一个目标物件管理所有相依于它的观察者物件,并且在他本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法
来实现。此种模式通常被用来实现事件处理系统。
观察者模式(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;}@Overridepublic 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

 //注册observermObserver = 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(){@Overridepublic void handleMessage(Message msg) {if (msg.what == MSG_RECEIVED_CODE){String code = (String) msg.obj;//update UImEditText.setText(code);Toast.makeText(MainActivity.this,code,Toast.LENGTH_LONG).show();}}};

android短信验证码自动填写相关推荐

  1. android短信验证码代码,Android短信验证码自动填写实现代码

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

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

    https://blog.csdn.net/u010399316/article/details/48781319 https://www.01hai.com/note/av123438 https: ...

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

    本文出自:黄敏争的博客 前言: android应用经常会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,通常,用户收到短信需要最小化应用去查看短信再填入验证码,必然比较麻烦, ...

  4. Android 短信验证码自动填写

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

  5. android 短信验证码自动填写的二种方法

    转载自:https://blog.csdn.net/VirusDerekRuler/article/details/78506522 现在开发越来越注重用户体验了,现今Android基本都有短信验证功 ...

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

    http://blog.csdn.net/u014343528/article/details/50899380 本文出自:黄敏争的博客 前言: android应用经常会涉及到注册登录功能,而许多的注 ...

  7. android 自动读取短息,Android实现短信验证码自动拦截读取功能

    本文实例为大家分享了Android短信验证码自动拦截读取 的具体代码,供大家参考,具体内容如下 知识准备: 1.观察者模式的理解[文章稍后来到~~] 2.Android的Cursor使用[Androi ...

  8. Android自定义控件之短信验证码自动填充

    VerifyCodeView VerifyCodeView是一个用于输入验证码的Android自定义控件,它支持数字类型的验证码,支持自定义外观,并且支持短信验证码自动填充. 项目地址:https:/ ...

  9. android获取短信验证码自动填入

    android获取短信验证码自动填入的简单实现,可以直接用 权限 <!--读取短信权限--> <uses-permission android:name="android. ...

  10. ios 短信验证码自动填充时总是被复制两遍

    ios 短信验证码自动填充时总是被复制两遍 解决: 限制input标签的maxlength:

最新文章

  1. python read函数返回值_python read()方法定义及使用(实例解析)
  2. 2018年9月份GitHub上最热门的Python项目
  3. 鸿蒙os 2.0跑分,预装鸿蒙OS 2.0!华为MatePad Pro2跑分曝光:麒麟9000、8GB内存
  4. jdbc Template 介绍和 spring 链接数据源的四种方式
  5. golang 捕获堆栈信息_【网络数据安全】为什么时间戳对于数据包捕获很重要
  6. 图像分类中混淆矩阵精度验证法中的几个指标说明
  7. LayerNorm是Transformer的最优解吗?
  8. SET ARITHABORT ON 对UI的影响
  9. iOS项目功能模块封装SDK使用总结
  10. 索尼首款 AI 图像传感器,让相机处处更智能
  11. Feign 超时设置
  12. Java之一致性hash算法原理及实现
  13. C语言之基本算法09—各位全是a的数列之和
  14. VB6里自动提交/自动填表的一种相对通用的方案
  15. Runtime.getRuntime().exec()----记录日志案例
  16. e站host地址_ip地址基础入门知识
  17. B2B网站平台建设:优势、功能、模块三大方向解析
  18. IE插件加载题目调试
  19. nlohmann json使用
  20. 前台离岗提示语_酒店前台温馨提示语

热门文章

  1. VBA dialogs 调用对话框
  2. 电路原理 的 一些基础知识
  3. 计算机专业的学生也太太太太太惨了吧?
  4. 深入理解TTL 与 CMOS 电路
  5. 前端3D轨迹可视化渲染
  6. c语言解一元二次方程虚根oj,OJ 1040 Problem J 求一元二次方程的根
  7. 幼儿园小程序实战开发教程
  8. Python爬虫系列之得物小程序data算法
  9. 程序员薪酬待遇大调查:学哪种语言的最赚钱?
  10. linux系统如何安装bt5,BT5硬盘安装(多系统linux + win + BT5)