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

4
回复
788
查看
[复制链接]

400

主题

1104

帖子

336

安币

手工艺人

发表于 2018-1-16 16:35:47 | 显示全部楼层 |阅读模式

            

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

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

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

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

          3.下载对应的sdk

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

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

        具体代码如下:

        首先配置文件加入权限:

[Java] 查看源文件 复制代码
<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(这是固定的不能修改,直接复制粘贴到你的配置文件就行)

[Java] 查看源文件 复制代码
<activity  
android:name="cn.smssdk.smssdkuishell"  
android:configchanges="keyboardhidden|orientation|screensize"  
android:theme="@android:style/theme.translucent.notitlebar"  
android:windowsoftinputmode="statehidden|adjustresize"/>  

        注册界面xml布局文件

[Java] 查看源文件 复制代码
<

        注册界面activity

[Java] 查看源文件 复制代码
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 [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();  
  }  
}  




        

9

主题

9454

帖子

1813

安币

Android大神

Rank: 6Rank: 6

QQ达人

发表于 2018-1-17 09:54:21 | 显示全部楼层
楼主是好人,回个帖会有安币吗?

27

主题

9718

帖子

1873

安币

Android大神

Rank: 6Rank: 6

发表于 2018-1-18 04:21:55 | 显示全部楼层
感觉楼主很用心,辛苦啦~

21

主题

9506

帖子

2047

安币

Android大神

Rank: 6Rank: 6

发表于 2018-1-19 11:23:34 | 显示全部楼层
支持,感谢,祝巴士越来越好~

7

主题

9601

帖子

1969

安币

Android大神

Rank: 6Rank: 6

发表于 2018-1-20 14:46:43 | 显示全部楼层
感谢分享,安卓巴士有你更精彩:lol
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )