博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android发送短信验证码并自动获取验证码填充文本框
阅读量:6951 次
发布时间:2019-06-27

本文共 3270 字,大约阅读时间需要 10 分钟。

android注册发送短信验证码并自动获取短信,截取数字验证码填充文本框。

一.接入短信平台

首先需要选择短信平台接入,这里使用的是(

两分钟申请测试账号,赠送了100条测试短信。

android使用java的jar包即可开发

jar下载:

API文档:

使用测试账号登录管理后台获取appId、appSecret, 地址:

在"我的应用"->"详情"中打开:

1.安装

下载后的SDK只包含一个jar文件,并且不依赖任何其他jar包或文件,直接导入到工程中即可使用。

2.用法

使用事先申请的AppId、AppSecret初始化ZhenziSmsClient:

ZhenziSmsClient client = new ZhenziSmsClient(appId, appSecret);复制代码

AppId、AppSecret是短信平台分配的

1)发送短信

String result = client.send("15811111111", "您的验证码为4534,有效时间为5分钟");复制代码

send方法用于单条发送短信

参数1:接收者手机号码,参数2:短信内容

返回结果是json格式的字符串, code: 发送状态,0为成功。非0为发送失败,可从data中查看错误信息

{			    "code":0,			    "data":"发送成功"			}			复制代码

二. 自动获取验证码

大致思路

需要做以下几步:

  1. 获取短信内容

  2. 判断短信中是否含有验证码,如果有则提取出来,如果没有就告知用户没有匹配出短信验证码

  3. 将匹配出的短信验证码填充到文本框中

开始制作

1.)申请短信权限

复制代码

注意!!!
由于Google在Android6.0引入了运行时权限,使得只要API版本大于23的都需要进行权限的申请,在这里推荐使用一个非常简单快速的第三方库来进行运行时权限的申请,

2.)注册短信接收者

我们知道,每当系统接收到一条短信便会发出一条广播,

为此,我们首先需要做的就是配置一个广播接收者来响应这条广播

AndroidManifest.xml文件中配置短信接受者:

复制代码

注意设置此广播接收者的级别为最高(1000)

SMSReceiver.java

public class SMSReceiver extends BroadcastReceiver {    private static final String TAG = "SMSReceiver";    @Override    public void onReceive(Context context, Intent intent) {        //进行获取短信的操作        getMsg(context, intent);    }}复制代码

3.)

接下来进行短信内容的获取

private void getMsg(Context context, Intent intent) {        //pdus短信单位pdu        //解析短信内容        Object[] pdus = (Object[]) intent.getExtras().get("pdus");        assert pdus != null;        for (Object pdu : pdus) {            //封装短信参数的对象            SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdu);            String number = sms.getOriginatingAddress();            String body = sms.getMessageBody();            //写自己的处理逻辑            //获取短信验证码            getCode(context, body);        }    }复制代码

通过SmsMessage对象可以得到短信的发送号码,短信内容及相关信息。

匹配出验证码并复制到剪贴板

这里我们就把验证码放到剪切板了,当然你也可以直接把它填充到文本框中

private void getCode(Context context, String body) {        //获取剪贴板管理器:        ClipboardManager cm = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);        Pattern pattern1 = Pattern.compile("(\\d{6})");//提取六位数字        Matcher matcher1 = pattern1.matcher(body);//进行匹配        Pattern pattern2 = Pattern.compile("(\\d{4})");//提取四位数字        Matcher matcher2 = pattern2.matcher(body);//进行匹配        if (matcher1.find()) {//匹配成功            String code = matcher1.group(0);            // 创建普通字符型ClipData            ClipData mClipData = ClipData.newPlainText("Label", code);            // 将ClipData内容放到系统剪贴板里。            cm.setPrimaryClip(mClipData);            Toast.makeText(context, "验证码复制成功", Toast.LENGTH_SHORT).show();            Log.d(TAG, "onReceive: " + code);        } else if (matcher2.find()) {            String code = matcher2.group(0);            // 创建普通字符型ClipData            ClipData mClipData = ClipData.newPlainText("Label", code);            // 将ClipData内容放到系统剪贴板里。            cm.setPrimaryClip(mClipData);            Toast.makeText(context, "验证码复制成功", Toast.LENGTH_SHORT).show();            Log.d(TAG, "onReceive: " + code);        } else {            Toast.makeText(context, "未检测到验证码", Toast.LENGTH_SHORT).show();            Log.d(TAG, "onReceive: " + "未检测到验证码");        }    }复制代码

在这里通过正则表达式匹配出短信内容中的验证码,因为验证码大多数为4位或者6位,所以在这里为了简化就直接进行了4位验证码和6位验证码的判断

ok,大功告成.

转载地址:http://lpyil.baihongyu.com/

你可能感兴趣的文章
Python使用Mysql官方驱动(取出dict类型的数据)
查看>>
数据网格组件 Handsontable 不再开源,采用自拟的非商业许可证
查看>>
PostgreSQL 全文检索 - 词频统计
查看>>
这个“达芬奇”不一般!它是美国医生的好帮手
查看>>
Java中将List转成逗号数组的方案
查看>>
一如此前的回应,王劲将景驰科技总部搬到了广州
查看>>
Docker EE 2.0 版本震撼来袭,全新特性先睹为快(附资源地址)
查看>>
5月上海见-国际产学研专家集结第六届全球云计算大会中国站
查看>>
量子计算会带来什么样的革命?
查看>>
除了停电之外,今年的CES还有这些“意外”……
查看>>
多线程3,线程池封装库
查看>>
2016中国“互联网+”创业创新大赛(华北+东北)赛区决赛成功举办 5支优胜团队晋级海口总决赛...
查看>>
django 1.8 官方文档翻译: 1-1-2 快速安装指南
查看>>
FPGA设计中遇到的奇葩问题之“芯片也要看出身”(二)
查看>>
h.264 FMO
查看>>
SAP在阿里云白皮书-第三章 SAP上阿里云场景介绍
查看>>
asp.net C#后台实现下载文件的几种方法
查看>>
mysql之 xtrabackup原理、备份日志分析、备份信息获取
查看>>
线性查找算法(BFPRT)
查看>>
阿里云成为云原生计算基金会金牌会员
查看>>