用户注册或者找回密码时一般会用到短信验证功能,这里我们使用第三方的短信平台进行验证实例。

我们用到第三方短信验证平台是Mob,地址为:http://mob.com/

一、注册用户、获取SDK

大家可以自行注册,得到APPKEY和APPSECRET,然后下载SDK,包的导入方式如截图:

二、主要代码

SMSSendForRegisterActivity.java:(获取验证码页)

package com.qiandaobao.activity;import java.util.regex.Matcher;
import java.util.regex.Pattern;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;import com.qiandaobao.broadcast.SMSBroadcastReceiver;
import com.qiandaobao.broadcast.SMSBroadcastReceiver.MessageListener;
import com.qiandaobao.view.DeletableEditText;
import com.qiaodaobao.activity.R;public class SMSSendForRegisterActivity extends Activity implementsOnClickListener {// 填写从短信SDK应用后台注册得到的APPKEYprivate static String APPKEY = "9aef0d828910";// 填写从短信SDK应用后台注册得到的APPSECRETprivate static String APPSECRET = "11b6db0240c87e2839a2995e05fcd7c5";private DeletableEditText mPhoneDeletableEditText, mCodeDeletableEditText;private Button mGetCodeButton, mNextButton;private String mPhoneString, mCodeString;private SMSBroadcastReceiver mSMSBroadcastReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_sendsms);initViews();SMSSDK.initSDK(this, APPKEY, APPSECRET);EventHandler eh = new EventHandler() {@Overridepublic void afterEvent(int event, int result, Object data) {Message msg = new Message();msg.arg1 = event;msg.arg2 = result;msg.obj = data;handler.sendMessage(msg);}};SMSSDK.registerEventHandler(eh);}private void initViews() {mPhoneDeletableEditText = (DeletableEditText) findViewById(R.id.et_phone_sendsms);mCodeDeletableEditText = (DeletableEditText) findViewById(R.id.et_code_sendsms);mGetCodeButton = (Button) findViewById(R.id.btn_getcode_sendsms);mNextButton = (Button) findViewById(R.id.btn_next_sendsms);mGetCodeButton.setOnClickListener(this);mNextButton.setOnClickListener(this);mSMSBroadcastReceiver = new SMSBroadcastReceiver();mSMSBroadcastReceiver.setOnReceivedMessageListener(new MessageListener() {public void OnReceived(String message) {mCodeDeletableEditText.setText(getDynamicPassword(message));// 截取6位验证码mCodeDeletableEditText.setSelection(getDynamicPassword(message).length());}});}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_getcode_sendsms:if (!TextUtils.isEmpty(mPhoneDeletableEditText.getText().toString())) {SMSSDK.getVerificationCode("86", mPhoneDeletableEditText.getText().toString());mPhoneString = mPhoneDeletableEditText.getText().toString();} else {Toast.makeText(this, "电话不能为空", 1).show();}break;case R.id.btn_next_sendsms:if (!TextUtils.isEmpty(mCodeDeletableEditText.getText().toString())) {SMSSDK.submitVerificationCode("86", mPhoneString,mCodeDeletableEditText.getText().toString());} else {Toast.makeText(this, "验证码不能为空", 1).show();}break;default:break;}}Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);int event = msg.arg1;int result = msg.arg2;Object data = msg.obj;Log.e("event", "event=" + event);if (result == SMSSDK.RESULT_COMPLETE) {// 短信注册成功后,返回MainActivity,然后提示新好友if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {// 提交验证码成功Toast.makeText(getApplicationContext(), "提交验证码成功",Toast.LENGTH_SHORT).show();Intent intent = new Intent(SMSSendForRegisterActivity.this,RegisterActivity.class);startActivity(intent);} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {Toast.makeText(getApplicationContext(), "验证码已经发送",Toast.LENGTH_SHORT).show();}} else {((Throwable) data).printStackTrace();Toast.makeText(SMSSendForRegisterActivity.this, "验证码错误",Toast.LENGTH_SHORT).show();}}};@Overrideprotected void onDestroy() {super.onDestroy();SMSSDK.unregisterAllEventHandler();}/*** 从字符串中截取连续4位数字组合 ([0-9]{" + 4+ "})截取六位数字 进行前后断言不能出现数字 用于从短信中获取动态密码* * @param str*            短信内容* @return 截取得到的4位动态密码*/public String getDynamicPassword(String str) {// 6是验证码的位数一般为六位Pattern continuousNumberPattern = Pattern.compile("(?<![0-9])([0-9]{"+ 4 + "})(?![0-9])");Matcher m = continuousNumberPattern.matcher(str);String dynamicPassword = "";while (m.find()) {System.out.print(m.group());dynamicPassword = m.group();}return dynamicPassword;}}

上面代码中所用到的SMSBroadcastRecevier代码在 《Android实战简易教程-第三十六枪(监听短信-实现短信验证码自动填入)》中可以找到。

三、布局文件

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/white" ><RelativeLayoutandroid:id="@+id/head_relat"android:layout_width="match_parent"android:layout_height="44dp"android:background="@color/green" ><ImageButtonandroid:id="@+id/back_btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_centerVertical="true"android:layout_marginLeft="5dp"android:background="@drawable/back" /><TextViewstyle="@style/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:layout_centerVertical="true"android:layout_marginLeft="5dp"android:layout_toRightOf="@id/back_btn"android:ellipsize="end"android:gravity="center"android:singleLine="true"android:text="手机验证" /><ImageViewandroid:layout_width="fill_parent"android:layout_height="0.5dp"android:layout_alignParentBottom="true"android:background="#dddddd" /></RelativeLayout><com.qiandaobao.view.DeletableEditTextandroid:id="@+id/et_phone_sendsms"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/head_relat"android:layout_margin="15dp"android:layout_marginTop="35dp"android:drawableLeft="@drawable/password_iv"android:drawableRight="@drawable/user_delete"android:gravity="center_vertical"android:hint="请输入手机号" /><com.qiandaobao.view.DeletableEditTextandroid:id="@+id/et_code_sendsms"android:layout_width="200dp"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_below="@+id/et_phone_sendsms"android:layout_margin="15dp"android:layout_marginTop="35dp"android:drawableLeft="@drawable/password_iv"android:drawableRight="@drawable/user_delete"android:gravity="center_vertical"android:hint="验证码" /><Buttonandroid:id="@+id/btn_getcode_sendsms"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_below="@+id/et_phone_sendsms"android:layout_marginTop="15dp"android:layout_toRightOf="@+id/et_code_sendsms"android:background="@color/white"android:paddingBottom="5dp"android:text="获取验证码"android:textColor="@color/green"android:textSize="12sp" /><Buttonandroid:id="@+id/btn_next_sendsms"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/btn_getcode_sendsms"android:layout_centerHorizontal="true"android:layout_margin="15dp"android:background="@drawable/login_btn_bg"android:text="下一步"android:textSize="14sp" /></RelativeLayout>

四、权限添加和配置文件

打开您项目的“AndroidManifest.xml”,在其中添加如下的权限:

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

然后打“application”下添加如下activity:

<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize">

五、运行实例

这时点击获取验证码,短信来了之后就会自动输入到验证码EditText中。

短信验证码还可以用到找回密码的功能中,大家可以自行设置Intent的跳转就可以了。

喜欢的朋友可以关注我!谢谢!

Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自动填入功能结合实例)相关推荐

  1. Android实战简易教程-第三十六枪(监听短信-实现短信验证码自动填入)

    一般用户喜欢用手机号作为用户名注册APP账号,这时一般都是通过手机验证码的方式进行验证,下面我们就研究一个非常实用的方法,通过监听短信-实现短信验证码的自动填入,提高用户体验. 首先我们看一下如何监听 ...

  2. Android实战简易教程-第三十四枪(基于ViewPager和FragmentPagerAdapter实现滑动通用Tab)...

    上一段时间写过一篇文章<基于ViewPager实现微信页面切换效果> 里面实现了相似微信Tab的页面.可是这样的实现方法有个问题.就是以后全部的代码逻辑都必须在MainActivity中实 ...

  3. Android实战简易教程-第六十五枪(自定义控件实现数字液晶时钟Demo)

    下面我们研究一下如何实现一个数字液晶时钟,本质属于特效一种哈. 首先创建一个布局文件: <?xml version="1.0" encoding="utf-8&qu ...

  4. Android实战简易教程-第七十五枪(WIFI直连工具类)

    设置指定的WIFI用户名密码和加密方式,可以进行WIFI直连. 1.工具类-WifiUtil.java: package demo.androidwar.com.myapplication;impor ...

  5. Android实战简易教程-第六十六枪(服务器端搭建和服务器端Json数据交互)

    学习Android有一段时间了,对服务器端有很深的好奇,决定对服务器端的实现进行一些研究,这里实现了一个简单的小例子,用于获取服务器端的json数据,例子很简单,适合初学者学习使用. 服务器端 首先我 ...

  6. Android实战简易教程-第五十一枪(ListView实现子控件的动态显示和隐藏、checkbox全选和反选)

    前段时间写过一篇文章:Android实战简易教程-第四十七枪(ListView多选-实现点餐系统)有的同学留言建议,可不可以动态控制checkbox的显示和全选反选功能,我研究了一下,发现实现也比较容 ...

  7. Android实战简易教程-第五十枪(工具类的测试)

    在开发中,为了提高开发效率,我们一般会自定义自己的工具类.为了保证项目的可靠性,在将工具类引入项目之前,我们一般都会对工具类进行单元测试,下面我们通过一个实例看一下如何搭建测试环境. 1.首先自定义一 ...

  8. Android实战简易教程-第六十枪(分享一个城市选择功能模块)

    在做一些APP的时候可能会用到城市选择模块的功能,本实例可以提供位置自定定位和手动选择的功能,非常好用,大家可以修改后加入自己的项目中. 首先看一下效果: 1.进入有的手机可能会提示权限要求,这时我们 ...

  9. Android之Mob第三方短信验证服务

    目录 mob简单介绍 前期准备 2.1注册登录 2.2创建应用 2.3下载sdk 2.4引入sdK 调用有界面接口 3.1效果图 3.2配置AndroidManifest.xml 3.3添加代码 调用 ...

最新文章

  1. TensorFlow Lite指南实战,附48页ppt
  2. OvS、OvS-DPDK、VPP 基准性能对比
  3. 聚类算法(3):DBSCAN密度聚类
  4. VirtualBox压缩vmdk、vagrant打包box一口气全对
  5. 第27章:MongoDB-索引--唯一索引
  6. MAC--PPTP教程
  7. C++学习系列笔记(八)
  8. java后台接收参数_java 后台如何 接收 uploader UploadFileOptions 参数
  9. Python的find、rfind、index、rindex方法的区别
  10. kernel笔记——库文件与系统调用
  11. 微服务配置中心是干啥的_微服务化改造系列之三:配置中心
  12. 2015-11-19 转载 DPDK支持的网卡类型
  13. 开发中一些常用的代码片段(持续更新,要是各位大牛看见了麻烦也给在评论区添一下常用的代码)
  14. 《LabVIEW 虚拟仪器程序设计从入门到精通(第二版)》一导读
  15. warning C4482: 使用了非标准扩展: 限定名中使用了枚举
  16. 基于matlab的暴雨强度公式参数推求,小样本流域降雨强度公式和设计降雨分布的推求方法...
  17. 学会编单片机必须会c语言吗,十天学会单片机和C语言编程.docx
  18. Spring核心JAR包
  19. Java文字转语音功能实现
  20. Unity新手开发VR项目

热门文章

  1. 使用HTML CSS制作静态网站【中秋节】
  2. ReentrantLock源码走读分析
  3. flume1.9自定义hbaseSink(实际是自定义序列化类)
  4. 手机京东菜单html,jQuery仿京东商城手机端商品分类滑动切换特效
  5. 金融申请评分卡(2)
  6. setenv,getenv,fork
  7. 安卓游戏--浅塘之辅助开发(C/S模式)
  8. JavaEE:使用Dubbo发布/调用服务(SpringBoot)
  9. 吊打面试官!Spring Boot的35道灵魂拷问面试题,看看你能答对多少?
  10. 如何书写游戏设计文档