Android短信息验证码自动填写详细介绍

2023-10-06 16:33

本文主要是介绍Android短信息验证码自动填写详细介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近新发现安卓验证码在获取验证码自动填写这块比较火,今天很好奇的去研究了一下,所以马上写博客将这块和大家一起分享,在自己的真机上面测试 通过

1、下面是获取验证码的整个流程图


接下面我就不多说废话了,直接贴我这块的代码了


/***
 * 
 * @类描述:
 * @项目名称:CargoUser
 * @包名: com.cargo.cargouser.utils
 * @类名称:SmsOberver
 * @创建人:wl
 * @创建时间:2015年9月9日下午1:16:26
 * @修改人:John
 * @修改时间:2015年9月9日下午1:16:26
 * @修改备注:
 * @version v1.0
 * @see [nothing]
 * @bug [nothing]
 * @Copyright 
 * @mail *@qq.com
 * 
 * @描述: ContentObserver翻译成中文就是内容观察者,
 * 目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理。
 * ContentObserver一般和系统或第三方程序提供的Provider一起使用,
 * 这些Provider一般情况下会有一个Uri,然后ContentObserver就去监听这些Uri数据的变化,
 * 然后做出相应的处理
 */
public class SmsOberver extends ContentObserver {
    private Handler mHandler;
    private Context mContext;
    private String code;
public SmsOberver(Handler handler,Context context) {
super(handler);
this.mContext=context;
this.mHandler=handler;
}
/**
* @描述:监听短信UR数据的变化,并对收件箱最后一条的内容进行读取  然后利用正则表达式  将短信验证码提取出来
* @方法名: onChange
* @param selfChange
* @param uri
* @创建人:John
* @创建时间:2015年9月9日下午1:18:14
* @修改人:John
* @修改时间:2015年9月9日下午1:18:14
* @修改备注:
* @throws
*/
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
//得到URI  然后将短信提出出来
Uri inbox=uri.parse("content://sms/inbox");
//然后将得到的短信进行倒序进行排序   然后得到最后一条的短信息 使用cursor查询
Cursor c=mContext.getContentResolver().query(inbox, null,null,null,"date desc");
//判断这个短信息是否为空的
if(c!=null)
{
if(c.moveToFirst())
{
//短信息的号码
String address=c.getString(c.getColumnIndex("address"));
Log.i("test","短信息的号码:"+address);
//短信息的内容
String body=c.getString(c.getColumnIndex("body"));
Log.i("test","短信息的内容:"+address);
//拿到短信息后  将连续4位或者6位的短信验证码提取出来
Pattern pattern=Pattern.compile("\\d{6}");
//使用matcher将body提取
Matcher matcher=pattern.matcher(body);
//然后使用matcher进行查找
if(matcher.find())
{
code=matcher.group(0);
//此时拿到code  怎样传递给UI呢???  需要借助hander
mHandler.obtainMessage(RegisterActivity.SMS_RECEVIED_CODE,code).sendToTarget();
}
}
}
//这一次不要忘记  记得及时关闭
c.close();

}


}


二、接下来就要在需要调用的页面  绑定整这个观察者模式


1、初始化
    mSmsOberver=new SmsOberver(timeHandler, this);
    // 注册短信变化监听
   this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, mSmsOberver);


2、在onpurse中去掉这个观察者
     protected void onPause() {
    this.getContentResolver().unregisterContentObserver(mSmsOberver);
super.onPause();
}

3、在Handler中  handleMessage中接受这个消息  并填写进输入框中
      if(msg.what==SMS_RECEVIED_CODE)
{
String code=(String) msg.obj;
codeInput.setText(code);
}

最后一点  千万别忘记了   声明读取短信息这块的权限
 <uses-permission android:name="android.permission.READ_SMS" >
    </uses-permission>
    <uses-permission android:name="android.permission.RECEIVE_SMS" >
    </uses-permission>


最后就大功告成了,本文属于原创,需要转载,请说明出处!

这篇关于Android短信息验证码自动填写详细介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/153494

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级