快速实现自动填写验证码的功能

来源:互联网 发布:网络直播 经济效益 编辑:程序博客网 时间:2024/05/23 00:00

今日科技快讯

近日,Uber的创始人卡拉尼克终于被迫离职了。自进入2017年以来,Uber的麻烦事就没有断过。先是由于支持特朗普的限制移民政策而成为众矢之的,接着又被前女性员工控诉在Uber时长期受到性骚扰,之后又被谷歌控诉非法从谷歌这里获取无人驾驶技术。Uber是目前所有未上市公司中估值最高的公司,董事会急于想摆脱公司如此多的负面影响,于是就在上周,卡拉尼克宣布自己将开始无限期休假。但董事会对此明显还是不够满意,继续向卡拉尼克施压。卡拉尼克昨日无奈宣布自己正式辞职,并且会协助招聘新的Uber CEO。

作者简介

又到周五了,开心的周末即将到来。另外今天0点钟《变形金刚5》上映喽,周末快带上女朋友去看电影吧。

本篇是 MichaelX 的第五篇投稿了,分享了一个开源库,主要是自动识别短信验证码,希望对大家有所帮助。

MichaelX 的博客地址:

http://blog.csdn.net/xiong_it

AutoInputAuthCode使用介绍

在 Android Studio 打开你的 app module 中的 build.gradle,添加依赖:

如果无法下载上述依赖,可以打开你的项目根目录下的 build.gradle,添加 maven 仓库地址:

示范代码

AutoInputAuthCode 是一个帮助android开发者快速实现自动填写验证码的类库,客户端示例代码如下:

1. 通过单例获取一个 AuthCode 对象;

2. 提供一个上下文对象给 AuthCode,放心,我会妥善处理你的上下文;

3. 提供一个你的验证码特征描述;

4. 告诉 AuthCode 你想将验证码写入哪个 EditText.

效果图

注意事项

自动填写验证码需要读取短信权限,请在清单中添加权限:

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

由于读取短信在API 23(Android 6.0)上权限级别是 dangerous。所以还需要动态申请权限,但是申请权限需要依赖于 Activity 或者 Fragment 中的 onRequestPermissionsResult() 回调,所以需要开发者自己实现。

实现原理

此技术的实现原理是“广播接收者”和“内容观察者”。利用接收到短信时的系统发出的广播进行短信的读取,并利用正则表达式解析出短信中的验证码。

在部分手机上,该广播被禁用,所以需要使用到内容观察者,在短信收件箱发生变化时,对短信数据库进行读取,得到相应验证码短信,并利用正则表达式解析出短信中的验证码。本文内容请使用于正规用途,请勿用于非法监听用户短信等恶意行为。谢谢合作!

使用广播接收者获取验证码

广播接收者一般用法:

1. 继承 BroadcastReceiver

2. 重写 onReceive(Context context, Intent intent);

3. 注册自定义广播接收者(1.代码动态注册;2.清单文件注册)

使用广播接收者获取验证码实现代码如下:

以上,从短信广播中得到了 Message 实例,并得到短信。验证码获取方法为 parseSmsBody(String smsBody),最后会统一讲解。

使用内容观察者得到短信验证码

内容观察者的一般用法

1. 继承内容观察者 ContentObserver

2. 重写 onChange(boolean selfChange)方法

3. 注册内容观察者

context.getContentResolver().registerContentObserver(uri, true, mReadSmsObserver);

使用内容观察者获取验证码实现代码如下:

注意:注册短信观察者的 Uri 和获取 Cursor 的 Uri 不相同,如果使用获取 Cursor 的 Uri 进行注册,则得不到 onChange 回调。

正则表达式解析短信得到验证码

将上述从广播接收者,内容观察者中得到的 smsCode 填入 EditText 输入框中即可。

项目地址:

https://github.com/xiong-it/AutoInputAuthCode

更多

每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。

如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。

欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号: