今天写一个常见的功能——手机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.     
  7.     <EditText    
  8.         android:id="@+id/login_input_phone_et"    
  9.         android:layout_width="280dp"    
  10.         android:layout_height="wrap_content"    
  11.         android:layout_alignParentTop="true"    
  12.         android:layout_centerHorizontal="true"    
  13.         android:layout_marginTop="107dp"    
  14.         android:ems="10"    
  15.         android:hint="请输入手机号"    
  16.         android:inputType="phone" />    
  17.     
  18.     <requestFocus />    
  19.     
  20.     <EditText    
  21.         android:id="@+id/login_input_code_et"    
  22.         android:layout_width="170dp"    
  23.         android:layout_height="wrap_content"    
  24.         android:layout_alignLeft="@+id/login_input_phone_et"    
  25.         android:layout_below="@+id/login_input_phone_et"    
  26.         android:layout_marginTop="44dp"    
  27.         android:hint="请输入验证码"    
  28.         android:inputType="textPassword" >    
  29.     </EditText>    
  30.     
  31.     <Button    
  32.         android:id="@+id/login_request_code_btn"    
  33.         android:layout_width="wrap_content"    
  34.         android:layout_height="wrap_content"    
  35.         android:layout_alignRight="@+id/login_input_phone_et"    
  36.         android:layout_alignTop="@+id/login_input_code_et"    
  37.         android:text="获取验证码" />    
  38.     
  39.     <Button    
  40.         android:id="@+id/login_commit_btn"    
  41.         android:layout_width="280dp"    
  42.         android:layout_height="wrap_content"    
  43.         android:layout_alignLeft="@+id/login_input_code_et"    
  44.         android:layout_below="@+id/login_input_code_et"    
  45.         android:layout_marginTop="44dp"    
  46.         android:text="注册" />    
  47.     
  48. </RelativeLayout>    

  注册界面activity

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

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

本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/example/542.html
2016年3月7日
发布:鸡啄米 分类:Android开发实例 浏览: 评论:0