欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android手机号注册、绑定手机号获取短信验证码实例

程序员文章站 2024-03-01 16:44:22
本文写了一个常见的功能——手机app中注册或绑定手机号的获取验证码的功能,也就是短信验证功能   具体效果就是,你在注册界面填写手机号,点击获取验证码按钮,---然后会收...

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

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

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

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

  3.下载对应的sdk

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

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

具体代码如下:

首先配置文件加入权限:

<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" />  

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

<activity  
android:name="cn.smssdk.smssdkuishell"  
android:configchanges="keyboardhidden|orientation|screensize"  
android:theme="@android:style/theme.translucent.notitlebar"  
android:windowsoftinputmode="statehidden|adjustresize"/>  

注册界面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:orientation="vertical" >  
  
  <edittext  
    android:id="@+id/login_input_phone_et"  
    android:layout_width="280dp"  
    android:layout_height="wrap_content"  
    android:layout_alignparenttop="true"  
    android:layout_centerhorizontal="true"  
    android:layout_margintop="107dp"  
    android:ems="10"  
    android:hint="请输入手机号"  
    android:inputtype="phone" />  
  
  <requestfocus />  
  
  <edittext  
    android:id="@+id/login_input_code_et"  
    android:layout_width="170dp"  
    android:layout_height="wrap_content"  
    android:layout_alignleft="@+id/login_input_phone_et"  
    android:layout_below="@+id/login_input_phone_et"  
    android:layout_margintop="44dp"  
    android:hint="请输入验证码"  
    android:inputtype="textpassword" >  
  </edittext>  
  
  <button  
    android:id="@+id/login_request_code_btn"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:layout_alignright="@+id/login_input_phone_et"  
    android:layout_aligntop="@+id/login_input_code_et"  
    android:text="获取验证码" />  
  
  <button  
    android:id="@+id/login_commit_btn"  
    android:layout_width="280dp"  
    android:layout_height="wrap_content"  
    android:layout_alignleft="@+id/login_input_code_et"  
    android:layout_below="@+id/login_input_code_et"  
    android:layout_margintop="44dp"  
    android:text="注册" />  
  
</relativelayout>  

注册界面activity

package com.mobdemo.view;  
  
  
import cn.smssdk.eventhandler;  
import cn.smssdk.smssdk;  
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.gravity;  
import android.view.view;  
import android.view.view.onclicklistener;  
import android.widget.button;  
import android.widget.edittext;  
import android.widget.framelayout;  
import android.widget.progressbar;  
import android.widget.toast;  
import android.widget.framelayout.layoutparams;  
  
public class loginactivity extends activity implements onclicklistener {  
  string appkey = "101732155b605";  
  string appsecrete = "69d1850f4b74100266ab576b64e6cb16";  
  
  // 手机号输入框  
  private edittext inputphoneet;  
  
  // 验证码输入框  
  private edittext inputcodeet;  
  
  // 获取验证码按钮  
  private button requestcodebtn;  
  
  // 注册按钮  
  private button commitbtn;  
  
  //  
  int i = 30;  
  
  @override  
  protected void oncreate(bundle savedinstancestate) {  
    super.oncreate(savedinstancestate);  
    setcontentview(r.layout.activity_login);  
  
    init();  
  }  
  
  /** 
   * 初始化控件 
   */  
  private void init() {  
    inputphoneet = (edittext) findviewbyid(r.id.login_input_phone_et);  
    inputcodeet = (edittext) findviewbyid(r.id.login_input_code_et);  
    requestcodebtn = (button) findviewbyid(r.id.login_request_code_btn);  
    commitbtn = (button) findviewbyid(r.id.login_commit_btn);  
    requestcodebtn.setonclicklistener(this);  
    commitbtn.setonclicklistener(this);  
  
    // 启动短信验证sdk  
    smssdk.initsdk(this, appkey, appsecrete);  
    eventhandler eventhandler = new eventhandler(){  
      @override  
      public 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(eventhandler);  
  }  
  
  @override  
  public void onclick(view v) {  
    string phonenums = inputphoneet.gettext().tostring();  
    switch (v.getid()) {  
    case r.id.login_request_code_btn:  
      // 1. 通过规则判断手机号  
      if (!judgephonenums(phonenums)) {  
        return;  
      } // 2. 通过sdk发送短信验证  
      smssdk.getverificationcode("86", phonenums);  
  
      // 3. 把按钮变成不可点击,并且显示倒计时(正在获取)  
      requestcodebtn.setclickable(false);  
      requestcodebtn.settext("重新发送(" + i + ")");  
      new thread(new runnable() {  
        @override  
        public void run() {  
          for (; i > 0; i--) {  
            handler.sendemptymessage(-9);  
            if (i <= 0) {  
              break;  
            }  
            try {  
              thread.sleep(1000);  
            } catch (interruptedexception e) {  
              e.printstacktrace();  
            }  
          }  
          handler.sendemptymessage(-8);  
        }  
      }).start();  
      break;  
  
    case r.id.login_commit_btn:  
      //将收到的验证码和手机号提交再次核对  
      smssdk.submitverificationcode("86", phonenums, inputcodeet  
          .gettext().tostring());  
      //createprogressbar();  
      break;  
    }  
  }  
  
  /** 
   *  
   */  
  handler handler = new handler() {  
    public void handlemessage(message msg) {  
      if (msg.what == -9) {  
        requestcodebtn.settext("重新发送(" + i + ")");  
      } else if (msg.what == -8) {  
        requestcodebtn.settext("获取验证码");  
        requestcodebtn.setclickable(true);  
        i = 30;  
      } else {  
        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(loginactivity.this,  
                mainactivity.class);  
            startactivity(intent);  
          } else if (event == smssdk.event_get_verification_code) {  
            toast.maketext(getapplicationcontext(), "正在获取验证码",  
                toast.length_short).show();  
          } else {  
            ((throwable) data).printstacktrace();  
          }  
        }  
      }  
    }  
  };  
  
  
  /** 
   * 判断手机号码是否合理 
   *  
   * @param phonenums 
   */  
  private boolean judgephonenums(string phonenums) {  
    if (ismatchlength(phonenums, 11)  
        && ismobileno(phonenums)) {  
      return true;  
    }  
    toast.maketext(this, "手机号码输入有误!",toast.length_short).show();  
    return false;  
  }  
  
  /** 
   * 判断一个字符串的位数 
   * @param str 
   * @param length 
   * @return 
   */  
  public static boolean ismatchlength(string str, int length) {  
    if (str.isempty()) {  
      return false;  
    } else {  
      return str.length() == length ? true : false;  
    }  
  }  
  
  /** 
   * 验证手机格式 
   */  
  public static boolean ismobileno(string mobilenums) {  
    /* 
     * 移动:134、135、136、137、138、139、150、151、157(td)、158、159、187、188 
     * 联通:130、131、132、152、155、156、185、186 电信:133、153、180、189、(1349卫通) 
     * 总结起来就是第一位必定为1,第二位必定为3或5或8,其他位置的可以为0-9 
     */  
    string telregex = "[1][358]\\d{9}";// "[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。  
    if (textutils.isempty(mobilenums))  
      return false;  
    else  
      return mobilenums.matches(telregex);  
  }  
  
  /** 
   * progressbar 
   */  
  private void createprogressbar() {  
    framelayout layout = (framelayout) findviewbyid(android.r.id.content);  
    framelayout.layoutparams layoutparams = new framelayout.layoutparams(  
        layoutparams.wrap_content, layoutparams.wrap_content);  
    layoutparams.gravity = gravity.center;  
    progressbar mprobar = new progressbar(this);  
    mprobar.setlayoutparams(layoutparams);  
    mprobar.setvisibility(view.visible);  
    layout.addview(mprobar);  
  }  
  
  @override  
  protected void ondestroy() {  
    smssdk.unregisteralleventhandler();  
    super.ondestroy();  
  }  
}  

验证成功的界面我就不写了,希望大家通过这个实例可以学习掌握android获取短信验证码的实现技巧。