Android实现自动提取短信验证码功能
作者:lijiao 时间:2022-11-19 23:58:49
本文实例讲解了Android自动提取短信验证码解决方案,分享给大家供大家参考,具体内容如下
主要功能及优点
1.收到验证码短信后,自动提取短信中的验证码填写到相应输入框
2.可指定一个号码,只读取与他有关短信,避免提取来源错误
3.利用正则表达式,可匹配各种类型验证码
模块集成关键步骤
将auto_getcode_demo中src包里的SMSContentObserver类复制到你的项目src包中
在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,验证码
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
解决bufferedReader.readLine()读到最后发生阻塞的问题
2022-07-15 06:05:38
RocketMQ实现随缘分BUG小功能示例详解
2023-01-20 04:21:05
![](https://img.aspxhome.com/file/2023/8/64038_0s.jpg)
Android 官推 kotlin-first 的图片加载库——Coil的使用入门
2022-07-06 00:53:34
![](https://img.aspxhome.com/file/2023/7/89527_0s.png)
关于Controller层和Service层的类报错问题及解决方案
2023-09-28 15:12:23
![](https://img.aspxhome.com/file/2023/2/101912_0s.jpg)
C#/VB.NET中从 PDF 文档中提取所有表格
2023-04-07 09:11:03
![](https://img.aspxhome.com/file/2023/7/94557_0s.png)
JavaWeb dbutils执行sql命令并遍历结果集时不能查到内容的原因分析
2022-04-11 22:50:02
![](https://img.aspxhome.com/file/2023/8/72338_0s.png)
Java深入浅出掌握SpringBoot之MVC自动配置原理篇
2022-04-16 02:14:34
![](https://img.aspxhome.com/file/2023/8/94328_0s.png)
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
![](https://img.aspxhome.com/file/2023/7/59327_0s.jpg)
Java语言描述二叉树的深度和宽度
2021-12-02 10:59:34
VSCode 搭建 Arm 远程调试环境的步骤详解
2023-06-27 08:54:36
![](https://img.aspxhome.com/file/2023/8/104448_0s.png)
JAXB简介_动力节点Java学院整理
2021-09-15 00:09:32
Android中WebView无法后退和js注入漏洞的解决方案
2021-06-13 01:35:17
![](https://img.aspxhome.com/file/2023/9/90149_0s.jpg)
C#中的虚函数virtual
2023-09-07 13:49:53
![](https://img.aspxhome.com/file/2023/4/106524_0s.png)
EditText监听方法,实时的判断输入多少字符
2021-08-16 11:32:36
![](https://img.aspxhome.com/file/2023/1/94981_0s.jpg)
spring MVC实践需要注意的地方
2023-02-07 00:33:07
struts2自定义拦截器的示例代码
2021-12-01 16:24:52
![](https://img.aspxhome.com/file/2023/3/78243_0s.jpg)
Java常用内置注解用法分析
2023-11-24 04:53:46