Android实现自动提取短信验证码功能

作者:lijiao 时间:2022-11-19 23:58:49 

本文实例讲解了Android自动提取短信验证码解决方案,分享给大家供大家参考,具体内容如下

主要功能及优点

1.收到验证码短信后,自动提取短信中的验证码填写到相应输入框
2.可指定一个号码,只读取与他有关短信,避免提取来源错误
3.利用正则表达式,可匹配各种类型验证码

模块集成关键步骤

将auto_getcode_demo中src包里的SMSContentObserver类复制到你的项目src包中

Android实现自动提取短信验证码功能

   在SMSContentObserver中:
   修改正则表达式内容来匹配自己想要获取的字符串


private String patternCoder = "\\d{4}";  //正则表达式

指定一个号码,只读取与他有关的新消息。


private boolean checkPhone(String phone) {
// TODO Auto-generated method stub  
String c_phone = "10690032980066";  
if(c_phone.equals(phone) )
 return true;
return false;
}

指定一关键字符串,用来确认短信内容是我们想要去提取的


private boolean checkString(String message){
if(TextUtils.isEmpty(message))
 return false;
Pattern p = Pattern.compile("FinalShares"); //这个关键字符串可以自定义
Matcher matcher = p.matcher(message);
if(matcher.find())
 return true;
return false;
}

在MainActivity中:
  注册内容观察者,用来监听手机短信的变动


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
smsContentObserver = new SMSContentObserver(this, mHandler); // 创建1个对象    
registerContentObservers() ;         //注册内容观察者
}

private void registerContentObservers() {
// ”表“内容观察者 ,通过测试我发现只能监听此Uri -----> content://sms
// 监听不到其他的Uri 比如说 content://sms/outbox
Uri smsUri = Uri.parse("content://sms");
getContentResolver().registerContentObserver(smsUri, true,smsContentObserver);
}

创建一个handler来接收观察者监听传来的信息,当接收到指定号码短信时,自动获得相应验证码并填写到对应控件


private Handler mHandler = new Handler() {

public void handleMessage(Message msg) {
 switch (msg.what) {
  case MSG_OUTBOXCONTENT:
   String outbox = smsContentObserver.getstrContent();
   etSmsoutbox.setText(outbox);
   break;
  default:
   break;
 }
}
};

在AndroidManifest中添加相应权限


<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>

环境相关

开发平台:Android

语言: java

开发工具: eclipse

效果展示

Android实现自动提取短信验证码功能

标签:Android,验证码
0
投稿

猜你喜欢

  • 解决bufferedReader.readLine()读到最后发生阻塞的问题

    2022-07-15 06:05:38
  • RocketMQ实现随缘分BUG小功能示例详解

    2023-01-20 04:21:05
  • Android 官推 kotlin-first 的图片加载库——Coil的使用入门

    2022-07-06 00:53:34
  • 关于Controller层和Service层的类报错问题及解决方案

    2023-09-28 15:12:23
  • C#/VB.NET中从 PDF 文档中提取所有表格

    2023-04-07 09:11:03
  • JavaWeb dbutils执行sql命令并遍历结果集时不能查到内容的原因分析

    2022-04-11 22:50:02
  • Java深入浅出掌握SpringBoot之MVC自动配置原理篇

    2022-04-16 02:14:34
  • Java 8 动态类型语言Lambda表达式实现原理解析

    2023-08-05 09:04:25
  • 误将.idea文件提交至git后删除的操作方法

    2022-09-03 09:32:57
  • 深入了解Java核心类库--Math类

    2023-08-19 01:06:21
  • Java+Nginx实现POP、IMAP、SMTP邮箱代理服务

    2023-11-26 10:31:47
  • Java语言描述二叉树的深度和宽度

    2021-12-02 10:59:34
  • VSCode 搭建 Arm 远程调试环境的步骤详解

    2023-06-27 08:54:36
  • JAXB简介_动力节点Java学院整理

    2021-09-15 00:09:32
  • Android中WebView无法后退和js注入漏洞的解决方案

    2021-06-13 01:35:17
  • C#中的虚函数virtual

    2023-09-07 13:49:53
  • EditText监听方法,实时的判断输入多少字符

    2021-08-16 11:32:36
  • spring MVC实践需要注意的地方

    2023-02-07 00:33:07
  • struts2自定义拦截器的示例代码

    2021-12-01 16:24:52
  • Java常用内置注解用法分析

    2023-11-24 04:53:46
  • asp之家 软件编程 m.aspxhome.com