欢迎来访李梅博客,希望看的开心!

最新文章 标签集合 在线留言 申请友链 管理登录

当前位置:首页 > Android开发 > Android手机号注册、绑定手机号获取短信验证码实例

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

 

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

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

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

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

  3.下载对应的sdk

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

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

具体代码如下:

首先配置文件加入权限:

1
2
3
4
5
6
7
8
9
<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(这是固定的不能修改,直接复制粘贴到你的配置文件就行)

1
2
3
4
5
<activity 
android:name="cn.smssdk.SMSSDKUIShell" 
android:configChanges="keyboardHidden|orientation|screenSize" 
android:theme="@android:style/Theme.Translucent.NoTitleBar" 
android:windowSoftInputMode="stateHidden|adjustResize"/> 

注册界面xml布局文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
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获取短信验证码的实现技巧。

除特别注明外,本站所有文章均为李梅 ’BLOG原创,转载请注明出处来自https://www.xslds.com/post/169.html

«   2019年9月   »
1
2345678
9101112131415
16171819202122
23242526272829
30
网站分类
  • (1).阿里云服务器【产品幸运券】
  • (2).阿里云服务器【产品幸运券】
  • 作者列表
    最新留言
    最近发表
    文章归档
    站点信息
    • 文章总数:234
    • 页面总数:4
    • 分类总数:22
    • 标签总数:522
    • 评论总数:605
    • 浏览总数:3946384

    分享:

    支付宝

    微信