Android短信验证码(用的Mob短信验证)

发布时间 - 2026-01-11 01:16:11    点击率:

Android短信验证码功能,供大家参考,具体内容如下

1、参考资料

Mob网站:http://www.mob.com/

Mob在Github上的例子:https://github.com/MobClub/SMSSDK-for-Android

教程:Mob短信验证的具体使用

教程的源代码:  http://git.oschina.net/lizhanqi/MobSMSDemo

Dialog教程:Android Dialog对话框

定时器教程:Android 实现定时器的四种方式 

2、前期准备

(1)Mob网站上下载SMS对应的SDK,解压出来为图1,打开图1,将其中的文件拷贝到as项目中的libs文件夹下,另外在add as library。

图1

图2

(2)在as项目中的AndroidManifest.xml文件中添加图3所需权限,由于SMS权限为危险权限,所以还要动态申请,这在下面代码中会有体现。注意权限是写在application外面,不是里面。

图3

(3)如果图4中的targetSdkVersion大于22,那么在代码中必须动态申请权限。

图4

(4)在as项目中的图7中的build.gradle文件中添加图5和图6红色框中内容。

图5

图6

图7

(5)在Mob网站上申请App Key和App Secret。

图8

(6)Toast

3、代码(没整理,将就看)

package com.gxu.lepao.activity;

import android.Manifest;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.gxu.lepao.R;
import com.gxu.lepao.model.UserInfo;
import org.litepal.crud.DataSupport;//LitePal开源数据库框架
import java.util.List;
import cn.smssdk.EventHandler;//Mob短信验证码
import cn.smssdk.SMSSDK;//Mob短信验证码

/**
 * Created by ljy on 2017-05-21.
 * 获取和验证短信验证码界面
 */

public class RegisterActivity extends BaseActivity {

 private EditText phoneEdit;
 private EditText smsEdit;
 private Button getSms;
 private Button submitSms;
 private TextView login;
 private TextView reset;
 private CountDownTimer countDownTimer;
 //倒计时
 private int TIME = 60;
 //这是中国区号,如果需要其他国家列表,可以使用getSupportedCountries();获得国家区号
 public String country = "86";
 //APPKEY
 private static String appKey = "1e0d15118480d";
 // 填写从短信SDK应用后台注册得到的APPSECRET
 private static String appSecret = "daa97d794e2436abcae624ac3785d2ef";
 //表示是否使用了registerEventHandler
 private boolean ready;


 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Log.d("RegisterActivity","Task; id is " + getTaskId());
  setContentView(R.layout.activity_register);
  // 初始化界面
  initView();
  //初始化SMSSDK
  initSDK();
  getSms.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v) {
    boolean isLogin = false;
    //判断手机号码是否已注册过
    isLogin = isRegister();
    if(!TextUtils.isEmpty(phoneEdit.getText().toString())){
     if(!isLogin){
       //发送短信权限
      if(ContextCompat.checkSelfPermission(RegisterActivity.this
        ,Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED){
       //显示申请权限弹窗
       showRequestPermission();
      }else{
       //弹窗确认
       alterWarning();
      }
     }else{
      Toast.makeText(RegisterActivity.this,"此手机号码已经注册过",Toast.LENGTH_SHORT).show();
     }
    }else{
     Toast.makeText(RegisterActivity.this,"请输入手机号码",Toast.LENGTH_SHORT).show();
    }
   }
  });
  submitSms.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v) {
    String sms = smsEdit.getText().toString();
    String phone = phoneEdit.getText().toString();
    if(!TextUtils.isEmpty(sms)){
     SMSSDK.submitVerificationCode( country, phone, sms);
    }else{
     Toast.makeText(RegisterActivity.this,"请输入验证码",Toast.LENGTH_SHORT).show();
    }
   }
  });
  login.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v) {
    Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
    startActivity(intent);
   }
  });
  reset.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v) {
    Intent intent = new Intent(RegisterActivity.this,ResetPwdActivity.class);
    startActivity(intent);
   }
  });
 }

 //申请权限弹窗
 private void showRequestPermission(){
  //先new出一个监听器,设置好监听
  DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){
   @Override
   public void onClick(DialogInterface dialog, int which) {
    switch(which){
     case Dialog.BUTTON_POSITIVE:
      //接收短信权限
      ActivityCompat.requestPermissions(RegisterActivity.this,new String[]{Manifest.permission.RECEIVE_SMS},1);
      //发送短信权限
      ActivityCompat.requestPermissions(RegisterActivity.this,new String[]{Manifest.permission.SEND_SMS},2);
      //弹窗确认
      alterWarning();
      break;
     case Dialog.BUTTON_NEGATIVE:
      Toast.makeText(RegisterActivity.this, "拒绝" + which, Toast.LENGTH_SHORT).show();
      break;
    }
   }
  };
  //dialog参数设置
  AlertDialog.Builder builder=new AlertDialog.Builder(RegisterActivity.this); //先得到构造器
  builder.setTitle("申请权限"); //设置标题
  builder.setMessage("要允许lepao接收验证码短信吗?"); //设置内容
  builder.setIcon(R.mipmap.ic_launcher);//设置图标,图片id即可
  builder.setPositiveButton("允许",dialogOnclicListener);
  builder.setNegativeButton("拒绝", dialogOnclicListener);
  builder.create().show();
 }

 //申请权限
 public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
  switch (requestCode){
   case 1:
    if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
     //initSDK();
     Toast.makeText(this,"你授权。。。接收短信权限",Toast.LENGTH_SHORT).show();
    }else{
     Toast.makeText(this,"你拒绝。。。接收短信权限",Toast.LENGTH_SHORT).show();
    }
    break;
   case 2:
    if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
     Toast.makeText(this,"你授权。。。发送短信权限",Toast.LENGTH_SHORT).show();
    }else{
     Toast.makeText(this,"你拒绝。。。发送短信权限",Toast.LENGTH_SHORT).show();
    }
    break;
   default:
  }
 }

 // 初始化短信SDK
 private void initSDK() {
  SMSSDK.initSDK(this, appKey, appSecret, true);
  //final Handler handler = new Handler();
  EventHandler eventHandler = new EventHandler() {
   public void afterEvent(int event, int result, Object data) {
    //回调完成
    if (result == SMSSDK.RESULT_COMPLETE)
    {
     //验证码验证成功
     if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE)
     {
      toast("验证成功");
      Intent intent = new Intent(RegisterActivity.this,SetPwdActivity.class);
      intent.putExtra("phone",phoneEdit.getText().toString());
      startActivity(intent);
      finish();
     }
     //已发送验证码
     else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE)
     {
      toast("验证码已经发送");
     } else
     {
      ((Throwable) data).printStackTrace();
      String str = data.toString();
      toast(str);
     }
    }
    if(result==SMSSDK.RESULT_ERROR) {
     toast("验证码错误");
    }

   }
  };
  // 注册回调监听接口
  SMSSDK.registerEventHandler(eventHandler);
  ready = true;
 }

 //吐司的一个小方法
 private void toast(final String str) {
  runOnUiThread(new Runnable() {
   @Override
   public void run() {
    Toast.makeText(RegisterActivity.this, str, Toast.LENGTH_SHORT).show();
   }
  });
 }


 //销毁短信注册
 @Override
 protected void onDestroy() {
  // 注销回调接口registerEventHandler必须和unregisterEventHandler配套使用,否则可能造成内存泄漏。
  if(ready){
   SMSSDK.unregisterAllEventHandler();
  }
  super.onDestroy();
 }

 //初始化界面
 private void initView(){
  phoneEdit = (EditText) findViewById(R.id.phone);
  smsEdit = (EditText) findViewById(R.id.sms);
  getSms = (Button) findViewById(R.id.getSms);
  submitSms = (Button) findViewById(R.id.submitSms);
  login = (TextView) findViewById(R.id.login);
  reset = (TextView) findViewById(R.id.reset);
 }

 //弹窗确认
 private void alterWarning(){
  //先new出一个监听器,设置好监听
  DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){
   @Override
   public void onClick(DialogInterface dialog, int which) {
    switch(which){
     case Dialog.BUTTON_POSITIVE:
      dialog.dismiss();
      //通过sdk发送短信验证(请求获取短信验证码,在监听(eventHandle)中返回)
      SMSSDK.getVerificationCode(country, phoneEdit.getText().toString());
      //设置获取验证码按钮不能点击
      getSms.setClickable(false);
      //倒计时,执行次数为(TIME+1)*1000/1000,countDownTimer每次执行间隔:1000(单位为毫秒)
      countDownTimer = new CountDownTimer((TIME+1)*1000, 1000) {
       @Override
       public void onTick(long millisUntilFinished) {
        getSms.setText(TIME-- + "秒后再次获取验证码");
       }

       @Override
       public void onFinish() {
        //设置获取验证码按钮可以点击
        getSms.setClickable(true);
        getSms.setText("点击获取短信验证码");
       }
      };
      countDownTimer.start();
      break;
     case Dialog.BUTTON_NEGATIVE:
      dialog.dismiss();
      Toast.makeText(RegisterActivity.this, "已取消", Toast.LENGTH_SHORT).show();
      break;
    }
   }
  };
  //dialog参数设置
  AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到构造器
  builder.setTitle("发送短信"); //设置标题
  builder.setMessage("我们将把验证码发送到以下号码:\n"+country+"-"+phoneEdit.getText().toString()); //设置内容
  builder.setIcon(R.drawable.icon);//设置图标,图片id即可
  builder.setPositiveButton("确认",dialogOnclicListener);
  builder.setNegativeButton("取消", dialogOnclicListener);
  builder.create().show();
 }

 //判断手机号码是否已注册过
 public boolean isRegister(){
  boolean isLogin = false;
  。。。。。299   return isLogin;
 }


}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android短信验证码  # Mob短信验证  # Android短信验证  # Android用 Mob 实现发送短信验证码实例  # Android使用第三方服务器Bmob实现发送短信验证码  # Android中用Bmob实现短信验证码功能的方法详解  # Android使用MobSDK短信验证  # Android开发工程中集成mob短信验证码功能的方法  # 用MOB实例开发实现短信验证功能  # 验证码  # 发送短信  # 回调  # 请输入  # 倒计时  # 参数设置  # 这是  # 会有  # 所需  # 可以使用  # 发送到  # 就看  # 这在  # 四种  # 参考资料  # 写在  # 对话框  # 中国  # 开源  # 具体内容 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  Laravel如何发送系统通知?(Notification渠道示例)  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  网站页面设计需要考虑到这些问题  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Python图片处理进阶教程_Pillow滤镜与图像增强  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  用v-html解决Vue.js渲染中html标签不被解析的问题  高性能网站服务器配置指南:安全稳定与高效建站核心方案  实例解析Array和String方法  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  如何在Windows虚拟主机上快速搭建网站?  如何为不同团队 ID 动态生成多个独立按钮  开心动漫网站制作软件下载,十分开心动画为何停播?  html5的keygen标签为什么废弃_替代方案说明【解答】  PHP正则匹配日期和时间(时间戳转换)的实例代码  怎么用AI帮你为初创公司进行市场定位分析?  Python数据仓库与ETL构建实战_Airflow调度流程详解  Android自定义控件实现温度旋转按钮效果  Laravel安装步骤详细教程_Laravel环境搭建指南  文字头像制作网站推荐软件,醒图能自动配文字吗?  如何用好域名打造高点击率的自主建站?  Laravel怎么使用artisan命令缓存配置和视图  网站建设保证美观性,需要考虑的几点问题!  Laravel集合Collection怎么用_Laravel集合常用函数详解  香港网站服务器数量如何影响SEO优化效果?  高端企业智能建站程序:SEO优化与响应式模板定制开发  高端网站建设与定制开发一站式解决方案 中企动力  JavaScript如何实现错误处理_try...catch如何捕获异常?  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何获取免费开源的自助建站系统源码?  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何在新浪SAE免费搭建个人博客?  Android Socket接口实现即时通讯实例代码  iOS验证手机号的正则表达式  如何在宝塔面板中创建新站点?  详解jQuery停止动画——stop()方法的使用  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  如何在橙子建站中快速调整背景颜色?  JavaScript如何实现类型判断_typeof和instanceof有什么区别  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  原生JS获取元素集合的子元素宽度实例  JS去除重复并统计数量的实现方法  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤