android发送短信验证码并自动获取验证码填充文本框
android注册发送短信验证码并自动获取短信,截取数字验证码填充文本框。
一.接入短信平台
首先需要选择短信平台接入,这里使用的是榛子云短信平台(http://smsow.zhenzikj.com),
两分钟申请测试账号,赠送了100条测试短信。
android使用java的jar包即可开发
jar下载: http://smsow.zhenzikj.com/doc/sdk.html
API文档:http://smsow.zhenzikj.com/doc/java_sdk_doc.html
使用测试账号登录管理后台获取appId、appSecret, 地址: http://sms.zhenzikj.com/zhenzisms_user

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

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.)申请短信权限
<uses-permission android:name="android.permission.RECEIVE_SMS" /> <!-- 接收短信权限 -->
<uses-permission android:name="android.permission.READ_SMS" /> <!-- 读取短信权限 -->
注意!!!
由于Google在Android6.0引入了运行时权限,使得只要API版本大于23的都需要进行权限的申请,在这里推荐使用一个非常简单快速的第三方库来进行运行时权限的申请,Android 6.0运行时权限第三方库的使用—–RxPermissions
2.)注册短信接收者
我们知道,每当系统接收到一条短信便会发出一条广播,
为此,我们首先需要做的就是配置一个广播接收者来响应这条广播
AndroidManifest.xml文件中配置短信接受者:
<receiver android:name=".SMSReceiver">
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
注意设置此广播接收者的级别为最高(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,大功告成.
android发送短信验证码并自动获取验证码填充文本框的更多相关文章
- android 发送短信的两种方式,以及接收报告和发送报告
android发送短信,以及接收报告和发送报告 android中发送短信其实有两种方式,这个和打电话类似,大家可以了解一下: 一.调起系统发短信功能 ...
- android 发送短信 怎样做到一条一条的发送,仅仅有在上一条发送成功之后才发送下一条短信
android发送短信截获上一条发送是否成功,然后再来发送下一条短信 1.问题:在项目中遇到例如以下要求:待发短信有N条,实现一条一条的发送并在上一条短信发送成功之后再来发送下一条. for(int ...
- 关于Android发送短信获取送达报告的问题
最近公司开发一个项目,要求app能够发送短信并获取送达报告.这本不是一个什么难题,实现这一功能的代码一搜一大把,那么这么简单的一个问题,为什么我要在这里提出来呢?那是因为我在写代码的时候掉入了一个坑, ...
- 【Android】Android 发送短信和打电话的方法
发送短信的方法 有两种方法可以实现发送短信,其一是使用intent-startActivity,URI数据格式为"smsto:num",调用的action为Intent.ACTIO ...
- Android 发送短信总结
SMS涉及的主要类SmsManager 实现SMS主要用到SmsManager类,该类继承自java.lang.Object类,下面我们介绍一下该类的主要成员. 公有方法: ArrayList< ...
- android发送短信样例
Android应用开发中我们经常须要发送手机短信.这对于android平台来说,是最简单只是的功能了,无需太多代码,也无需自己定义代码,仅仅须要调用android提供的消息管理类SmsManager就 ...
- Android发送短信核心代码
核心代码:(1)SmsManager manager = SmsManager.getDefault(); //获得默认的消息管理器(2)ArrayList<String> list = ...
- Android发送短信
// 发送短信 public void sendMsg(){ String content = edtSend.getText().toString(); SmsManager smsManager ...
- jquery 发送短信60后重新获取
先需要form表单,获取短信的按钮做成两个相同的,一个显示,一个隐藏. <div class="item"> <p clas ...
随机推荐
- [物理学与PDEs]第1章第9节 Darwin 模型 9.3 Darwin 模型
1. $\Omega$ 中 ${\bf A}={\bf A}_T+{\bf A}_L$, 其中 $\Div{\bf A}_T=0$, $\rot{\bf A}_L={\bf 0}$. 若 $$\bex ...
- js检测移动设备并跳转到相关适应页面。
PS:网页自适应的方式有多种.有通过CSS样式表来实现自适应(主流),也有通过显示不同的页面来实现的方式. 下面代码是记录通过判断设备特征来跳转到相关的页面的方法. 实现要求: 当手机,平板访问 a. ...
- Linux中执行C++程序
参考:https://blog.csdn.net/qq_31125955/article/details/79343498 https://blog.csdn.net/weixin_35477207/ ...
- Sql server not in优化
使用EXISTS(或NOT EXISTS)通常将提高查询的效率,由于NOT IN子句将对子查询中的表执行了一个全表遍历. oracle在执行IN子查询过程中,先执行子查询结果放入临时表再进行主查询: ...
- Tupper自我指涉公式生成器
- 网络学习day01_计算机网络与分层思想
2018.9.1 网络学习day01_计算机网络与分层思想 网络安全 计算机网络 分层思想 LAN与WAN LAN(Local Area Network)--局域网 局域网(Local ...
- [HAOI2015]树上操作-树链剖分
#include<bits/stdc++.h> using namespace std; const int maxn = 1e6+5; #define mid ((l+r)>> ...
- 【原创】运维基础之Docker(2)通过docker部署zookeeper nginx tomcat redis kibana/elasticsearch/logstash mysql kafka mesos/marathon
通过docker可以从头开始构建集群,也可以将现有集群(配置以及数据)平滑的迁移到docker部署: 1 docker部署zookeeper # usermod -G docker zookeeper ...
- SVN 版本控制安装
客户端 一路点击next即可 注意事项: 这个一定要选,否则后面使用会出现问题. 选择下拉菜单的第一项
- 《学习之道》第八章孤军奋战or组队合作
孤军奋战与组队合作:别再苦思冥想,拖延行为需要差别对待 对拖延我得提一个小建议,你要暂时把自己与那些会干扰你的人和事隔离开.自己到一个房间里去,或者去图书馆,这样就没什么事能让你分心了. 如果一门课让 ...