今天写一个常见的功能——手机app中注册或绑定手机号的获取验证码的功能。也就是短信验证功能

  具体效果就是,你在注册界面填写手机号,点击获取验证码按钮,---然后会收到验证短信,填入验证码后点击注册按钮,如果验证正确就可以跳转到另外一个界面

  1.首先大家需要在mob官网注册一个账号,mob是一个免费的短信验证平台

  2.在mob.com后台创建应用

  3.下载对应的sdk

  4.将sdk作为一个library导入到你的项目中

  5.现在就可以在你的项目中编写代码使用mob提供的这个功能了

  具体代码如下:

  首先配置文件加入权限:

XML/HTML代码
  1. <uses-permission android:name="android.permission.READ_CONTACTS" />
  2. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  3. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  4. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  5. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  6. <uses-permission android:name="android.permission.INTERNET" />
  7. <uses-permission android:name="android.permission.RECEIVE_SMS" />
  8. <uses-permission android:name="android.permission.GET_TASKS" />
  9. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

  然后声明activity(这是固定的不能修改,直接复制粘贴到你的配置文件就行)

XML/HTML代码
  1. <activity
  2. android:name="cn.smssdk.SMSSDKUIShell"
  3. android:configChanges="keyboardHidden|orientation|screenSize"
  4. android:theme="@android:style/Theme.Translucent.NoTitleBar"
  5. android:windowSoftInputMode="stateHidden|adjustResize"/>

  注册界面xml布局文件

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6. <EditText
  7. android:id="@+id/login_input_phone_et"
  8. android:layout_width="280dp"
  9. android:layout_height="wrap_content"
  10. android:layout_alignParentTop="true"
  11. android:layout_centerHorizontal="true"
  12. android:layout_marginTop="107dp"
  13. android:ems="10"
  14. android:hint="请输入手机号"
  15. android:inputType="phone" />
  16. <requestFocus />
  17. <EditText
  18. android:id="@+id/login_input_code_et"
  19. android:layout_width="170dp"
  20. android:layout_height="wrap_content"
  21. android:layout_alignLeft="@+id/login_input_phone_et"
  22. android:layout_below="@+id/login_input_phone_et"
  23. android:layout_marginTop="44dp"
  24. android:hint="请输入验证码"
  25. android:inputType="textPassword" >
  26. </EditText>
  27. <Button
  28. android:id="@+id/login_request_code_btn"
  29. android:layout_width="wrap_content"
  30. android:layout_height="wrap_content"
  31. android:layout_alignRight="@+id/login_input_phone_et"
  32. android:layout_alignTop="@+id/login_input_code_et"
  33. android:text="获取验证码" />
  34. <Button
  35. android:id="@+id/login_commit_btn"
  36. android:layout_width="280dp"
  37. android:layout_height="wrap_content"
  38. android:layout_alignLeft="@+id/login_input_code_et"
  39. android:layout_below="@+id/login_input_code_et"
  40. android:layout_marginTop="44dp"
  41. android:text="注册" />
  42. </RelativeLayout>

  注册界面activity

Java代码
  1. package com.mobdemo.view;
  2. import cn.smssdk.EventHandler;
  3. import cn.smssdk.SMSSDK;
  4. import android.app.Activity;
  5. import android.content.Intent;
  6. import android.os.Bundle;
  7. import android.os.Handler;
  8. import android.os.Message;
  9. import android.text.TextUtils;
  10. import android.util.Log;
  11. import android.view.Gravity;
  12. import android.view.View;
  13. import android.view.View.OnClickListener;
  14. import android.widget.Button;
  15. import android.widget.EditText;
  16. import android.widget.FrameLayout;
  17. import android.widget.ProgressBar;
  18. import android.widget.Toast;
  19. import android.widget.FrameLayout.LayoutParams;
  20. public class LoginActivity extends Activity implements OnClickListener {
  21. String APPKEY = "101732155b605";
  22. String APPSECRETE = "69d1850f4b74100266ab576b64e6cb16";
  23. // 手机号输入框
  24. private EditText inputPhoneEt;
  25. // 验证码输入框
  26. private EditText inputCodeEt;
  27. // 获取验证码按钮
  28. private Button requestCodeBtn;
  29. // 注册按钮
  30. private Button commitBtn;
  31. //
  32. int i = 30;
  33. @Override
  34. protected void onCreate(Bundle savedInstanceState) {
  35. super.onCreate(savedInstanceState);
  36. setContentView(R.layout.activity_login);
  37. init();
  38. }
  39. /**
  40. * 初始化控件
  41. */
  42. private void init() {
  43. inputPhoneEt = (EditText) findViewById(R.id.login_input_phone_et);
  44. inputCodeEt = (EditText) findViewById(R.id.login_input_code_et);
  45. requestCodeBtn = (Button) findViewById(R.id.login_request_code_btn);
  46. commitBtn = (Button) findViewById(R.id.login_commit_btn);
  47. requestCodeBtn.setOnClickListener(this);
  48. commitBtn.setOnClickListener(this);
  49. // 启动短信验证sdk
  50. SMSSDK.initSDK(this, APPKEY, APPSECRETE);
  51. EventHandler eventHandler = new EventHandler(){
  52. @Override
  53. public void afterEvent(int event, int result, Object data) {
  54. Message msg = new Message();
  55. msg.arg1 = event;
  56. msg.arg2 = result;
  57. msg.obj = data;
  58. handler.sendMessage(msg);
  59. }
  60. };
  61. //注册回调监听接口
  62. SMSSDK.registerEventHandler(eventHandler);
  63. }
  64. @Override
  65. public void onClick(View v) {
  66. String phoneNums = inputPhoneEt.getText().toString();
  67. switch (v.getId()) {
  68. case R.id.login_request_code_btn:
  69. // 1. 通过规则判断手机号
  70. if (!judgePhoneNums(phoneNums)) {
  71. return;
  72. } // 2. 通过sdk发送短信验证
  73. SMSSDK.getVerificationCode("86", phoneNums);
  74. // 3. 把按钮变成不可点击,并且显示倒计时(正在获取)
  75. requestCodeBtn.setClickable(false);
  76. requestCodeBtn.setText("重新发送(" + i + ")");
  77. new Thread(new Runnable() {
  78. @Override
  79. public void run() {
  80. for (; i > 0; i--) {
  81. handler.sendEmptyMessage(-9);
  82. if (i <= 0) {
  83. break;
  84. }
  85. try {
  86. Thread.sleep(1000);
  87. } catch (InterruptedException e) {
  88. e.printStackTrace();
  89. }
  90. }
  91. handler.sendEmptyMessage(-8);
  92. }
  93. }).start();
  94. break;
  95. case R.id.login_commit_btn:
  96. //将收到的验证码和手机号提交再次核对
  97. SMSSDK.submitVerificationCode("86", phoneNums, inputCodeEt
  98. .getText().toString());
  99. //createProgressBar();
  100. break;
  101. }
  102. }
  103. /**
  104. *
  105. */
  106. Handler handler = new Handler() {
  107. public void handleMessage(Message msg) {
  108. if (msg.what == -9) {
  109. requestCodeBtn.setText("重新发送(" + i + ")");
  110. } else if (msg.what == -8) {
  111. requestCodeBtn.setText("获取验证码");
  112. requestCodeBtn.setClickable(true);
  113. i = 30;
  114. } else {
  115. int event = msg.arg1;
  116. int result = msg.arg2;
  117. Object data = msg.obj;
  118. Log.e("event", "event=" + event);
  119. if (result == SMSSDK.RESULT_COMPLETE) {
  120. // 短信注册成功后,返回MainActivity,然后提示
  121. if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {// 提交验证码成功
  122. Toast.makeText(getApplicationContext(), "提交验证码成功",
  123. Toast.LENGTH_SHORT).show();
  124. Intent intent = new Intent(LoginActivity.this,
  125. MainActivity.class);
  126. startActivity(intent);
  127. } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
  128. Toast.makeText(getApplicationContext(), "正在获取验证码",
  129. Toast.LENGTH_SHORT).show();
  130. } else {
  131. ((Throwable) data).printStackTrace();
  132. }
  133. }
  134. }
  135. }
  136. };
  137. /**
  138. * 判断手机号码是否合理
  139. *
  140. * @param phoneNums
  141. */
  142. private boolean judgePhoneNums(String phoneNums) {
  143. if (isMatchLength(phoneNums, 11)
  144. && isMobileNO(phoneNums)) {
  145. return true;
  146. }
  147. Toast.makeText(this, "手机号码输入有误!",Toast.LENGTH_SHORT).show();
  148. return false;
  149. }
  150. /**
  151. * 判断一个字符串的位数
  152. * @param str
  153. * @param length
  154. * @return
  155. */
  156. public static boolean isMatchLength(String str, int length) {
  157. if (str.isEmpty()) {
  158. return false;
  159. } else {
  160. return str.length() == length ? true : false;
  161. }
  162. }
  163. /**
  164. * 验证手机格式
  165. */
  166. public static boolean isMobileNO(String mobileNums) {
  167. /*
  168. * 移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
  169. * 联通:130、131、132、152、155、156、185、186 电信:133、153、180、189、(1349卫通)
  170. * 总结起来就是第一位必定为1,第二位必定为3或5或8,其他位置的可以为0-9
  171. */
  172. String telRegex = "[1][358]\\d{9}";// "[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。
  173. if (TextUtils.isEmpty(mobileNums))
  174. return false;
  175. else
  176. return mobileNums.matches(telRegex);
  177. }
  178. /**
  179. * progressbar
  180. */
  181. private void createProgressBar() {
  182. FrameLayout layout = (FrameLayout) findViewById(android.R.id.content);
  183. FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
  184. LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  185. layoutParams.gravity = Gravity.CENTER;
  186. ProgressBar mProBar = new ProgressBar(this);
  187. mProBar.setLayoutParams(layoutParams);
  188. mProBar.setVisibility(View.VISIBLE);
  189. layout.addView(mProBar);
  190. }
  191. @Override
  192. protected void onDestroy() {
  193. SMSSDK.unregisterAllEventHandler();
  194. super.onDestroy();
  195. }
  196. }

  验证成功的界面我就不写了。

Android短信验证(手机号注册,绑定手机号获取验证码)实例相关推荐

  1. Android 短信验证 SDK 接入(Mob SMSSDK)

    博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载.本文由博主 威威喵 原创,请多支持与指教. 本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/ ...

  2. mob android 短信验证,Mob短信验证码插件使用说明

    欢迎使用Mob短信验证码插件 插件地址: https://ext.dcloud.net.cn/plugin?id=399 MobSms实现了注册时短信验证,取回密码手机验证功能,使用此模块之前需要先去 ...

  3. Android短信验证

    短信验证借助了mob.com(移动开发者服务平台),该服务平台提供了以下功能模块(需要自己注册账号) ShareSDK:让App快速拥有强大的分享功能,提供全面的社会化数据统计. 短信验证码:可轻松实 ...

  4. 注册app短信验证平台_怎样挑选网站验证码短信平台?

    短信验证码对于一个网站来说,已经是管理用户和保障网站安全的重要手段了.短信验证码在网站中负责注册登录.修改密码/找回密码.支付转账.账户异常行为.敏感操作(修改账号信息,修改重要设置,修改手机号码)等 ...

  5. android 短信验证计时,Android自定义Chronometer实现短信验证码秒表倒计时功能

    本文实例为大家分享了chronometer实现倒计时功能,android提供了实现按照秒计时的api,供大家参考,具体内容如下 一.自定义chronometerview 继续自textview 主要原 ...

  6. Luffy之注册认证(容联云通讯短信验证)

    用户的注册认证 前端显示注册页面并调整首页头部和登陆页面的注册按钮的链接. 注册页面Register,主要是通过登录页面进行改成而成. 先构造前端页面 <template><div ...

  7. springboot整合阿里云短信验证(无需签名和模板,通过阿里云api测试实现短信验证)

    一.开通阿里云短信服务 开通步骤如下图所示 开通完成后,进入阿里云短信验证首页,点击国内消息 一般来说,在短信验证时需要签名管理和模板管理,但是签名管理需要备案或者上线服务,所以对于没有备案和上线应用 ...

  8. 短信验证(手机号注册,绑定手机号获取验证码)

    今天写一个常见的功能--手机app中注册或绑定手机号的获取验证码的功能.也就是短信验证功能 具体效果就是,你在注册界面填写手机号,点击获取验证码按钮,---然后会收到验证短信,填入验证码后点击注册按钮 ...

  9. Android实现第三方Mob短信验证登录以及手机号显示和修改用户名(简易新闻 五)

    Android实现第三方Mob短信验证登录以及手机号显示和修改用户名(简易新闻 五) 关于之前的功能实现可以从制作简易新闻App导航篇中查看 因为这篇是写了有一段时间的博客,所以这篇(包括后面的简易新 ...

最新文章

  1. 四川音乐学录音艺术与计算机音乐,艺考中作曲专业和录音专业有什么不同呢?...
  2. 如何区分Android wrap_content和fill_parent的详细说明
  3. android rn 和webview,RN 组件webView 有可能出现的问题
  4. git stash 个人理解
  5. VUE从零开始系列(路由钩子及插件开发),呆萌小白上手VUE
  6. YBTOJ洛谷P4068:数字配对(网络流)
  7. linux path环境变量起什么作用,shell基础(5)PATH环境变量的作用和使用方法
  8. vgc机器人编程1到13题_工业机器人编程与实操-期末试题
  9. Oreilly.Python.Cookbook(3rd.Edition.May.2013)pdf
  10. Python使用数学形态学方法处理图像
  11. c语言 动态数组_C语言的学习笔记!助你一路成长!
  12. Promise面试题
  13. 家用计算机的辐射,计算机辐射有多大?
  14. 阶段3 2.Spring_01.Spring框架简介_06.spring的体系结构
  15. 如何在excel中使用REFPROP属性库
  16. Retinex算法介绍
  17. linux下如何关闭端口占用,Linux端口被占用? -- Linux查看端口使用状态、关闭端口方法...
  18. linux 编译libvlc,libvlc-源码编译流程记录
  19. java 二进制加减_二进制加法Java实现
  20. 基于java的高速公路收费系统——计算机毕业设计

热门文章

  1. ue编辑器漏洞_7. 编辑器漏洞整理
  2. Acwing2058. 笨拙的手指
  3. 华为秋招机试三道编程题(2021-09-01)
  4. 我国智能变电站建设到什么程度了
  5. Booth乘法器设计
  6. 怎么用博客来把自己网站“养大”
  7. 普华i-VirtualCloud应用案例之--国家海洋局北海分局
  8. Java泛型应用之打造Android中ListView和GridView万能适配器【CommonAdapter】--超简洁写法
  9. 报错:ABRT 已检测到 ‘1‘ 个问题。预了解详细信息请执行:abrt-cli list --since 1653881497
  10. 明年放假时间表总共29天7个节假日