当前位置: 移动技术网 > IT编程>移动开发>Android > Android短信验证码(用的Mob短信验证)

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

倚天之无垢青书,一贵的妄想日记,甜味白开水

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

1、参考资料

mob网站:

mob在github上的例子:https://github.com/mobclub/smssdk-for-android

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

教程的源代码: 

dialog教程:android dialog对话框

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

2、前期准备

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

图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;
 }


}

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网