Android实现短信验证码的功能Android Studio

实现短信验证码的功能,我这里使用的mob。
首先,我们的大环境是Android studio+eclipse+mySQL。
实现短信验证码有两种方式,一是导入相关jar包,这个之前在mob官网上就可以找到,但是更新之后官网上就没有了,所以我之前找了半天没找到,就放弃了…
第二种是使用gradle集成的方式,实现验证码的登录。这个在官网上也有介绍,好了,下面就是集成方式实现的验证码注册功能:
1、我们打开mob的官网,mob官网地址,选择开发者服务中的SMSSDK,点击开始使用:这是我们进入的页面
点击右侧的创建应用,把你项目的logo和名称输入进去,选择SMSSDK就可以了。这个时候你会发现已经创建完成了。点击刚刚新建的项目,就能找到你的appKey和appSecret:
项目截图
2、我们找到自己Android项目里面的bulid.gradle(这是Android下的gradle文件,不是整个项目的gradle文件)文件,在文件中添加(注意:下面的appKey和appSecret是你自己项目的!不要按照我上面的写):

apply plugin: 'com.mob.sdk'
MobSDK {
    appKey "自己的appKey"
    appSecret "自己的appsecret"
    SMSSDK {}
}

然后配置成功后,打开项目下的bulid.gradle文件,在里面添加下面的代码:

buildscript {
    repositories {
   		 .......
    }
    dependencies {
        ...
        classpath "com.mob.sdk:MobSDK:2018.0319.1724"
    }
}

添加完成后,我们再打开AndroidManifest.xml文件,把相应的权限都打开:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.a7560_1525.myapplication">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <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_WIFI_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /
</manifest>

ok,到现在,我们已经把环境都配置好了,现在我们来实现页面以及后台的功能:

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">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="80dp"
        android:paddingLeft="30dp">
        <TextView
            android:id="@+id/btn_register"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="注册"
            android:textSize="30dp"
            android:textColor="@color/colorAccent"
            android:gravity="center"/>
        <TextView
            android:id="@+id/btn_login"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="登录"
            android:textSize="30dp"
            android:gravity="center" />
    </LinearLayout>
    <LinearLayout
        android:layout_centerVertical="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical"
        android:layout_marginTop="30dp">
        <LinearLayout
            android:layout_width="300dp"
            android:layout_height="180dp"
            android:background="@android:color/white"
            android:orientation="vertical"
            android:layout_gravity="center">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:layout_gravity="center"
                android:orientation="horizontal">
                <ImageView
                    android:layout_marginLeft="10dp"
                    android:layout_width="20dp"
                    android:layout_height="30dp"
                    android:layout_gravity="center"
                    android:layout_marginRight="10dp"/>
                <EditText
                    android:id="@+id/phone"
                    android:layout_width="160dp"
                    android:layout_height="60dp"
                    android:background="@null"
                    android:hint="请输入手机号"
                    android:maxLength="15"
                    android:inputType="phone"
                    />
                <Button
                    android:id="@+id/bt_getCode"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="获取验证码"/>

            </LinearLayout>
            <View
                android:layout_width="fill_parent"
                android:layout_height="1dp" />
            <TextView
                android:id="@+id/full"
                android:layout_width="50dp"
                android:layout_height="15dp"
                android:text=""
                android:layout_marginLeft="260dp"/>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="45dp"
                android:layout_gravity="center"
                android:orientation="horizontal"
                android:paddingBottom="7dp">
                <ImageView
                    android:layout_marginLeft="10dp"

                    android:layout_width="20dp"
                    android:layout_height="30dp"
                    android:layout_gravity="center"
                    android:layout_marginRight="10dp"/>
                <EditText
                    android:id="@+id/code"
                    android:layout_width="match_parent"
                    android:layout_height="45dp"
                    android:background="@null"
                    android:hint="请输入验证码"
                    />
            </LinearLayout>
            <View
                android:layout_width="fill_parent"
                android:layout_height="1dp" />
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:layout_gravity="center"
                android:orientation="horizontal">
                <ImageView
                    android:layout_marginLeft="10dp"

                    android:layout_width="20dp"
                    android:layout_height="30dp"
                    android:layout_gravity="center"
                    android:layout_marginRight="10dp"/>
                <EditText
                    android:id="@+id/user_pwd1"
                    android:layout_width="200dp"
                    android:layout_height="60dp"
                    android:background="@null"
                    android:hint="请输入密码"
                    android:inputType="numberPassword"
                    />
                <ImageView
                    android:id="@+id/eyes1"
                    android:layout_width="20dp"
                    android:layout_height="20dp"
                    android:layout_marginLeft="30dp"
                    android:layout_gravity="center" />
            </LinearLayout>
        </LinearLayout>
        <Button
            android:id="@+id/bt_vertify"
            android:layout_width="300dp"
            android:layout_height="50dp"
            android:text="注册"
            android:layout_marginTop="15dp"
            android:textSize="20dp"/>
    </LinearLayout>

</RelativeLayout>

Java文件:

import androidx.appcompat.app.AppCompatActivity;
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.mob.MobSDK;
import java.util.Timer;
import java.util.TimerTask;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static cn.smssdk.SMSSDK.getVerificationCode;
import static cn.smssdk.SMSSDK.submitVerificationCode;
import static com.mob.wrappers.SMSSDKWrapper.getSupportedCountries;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private final String TAG="--MainActivity--";
    private TimerTask tt;
    private Timer tm;
    //你们自己的
    private final String appKey="自己项目的aappkey";
    private final String appSercret="自己项目的appsercret";
    private Handler handler=new Handler(){
        public void handleMessage(Message msg){
            switch (msg.arg1){
                case 0:
                    //客户端验证成功,可以进行注册,返回校验的手机和国家代码phone/country
                    Toast.makeText(MainActivity.this,msg.obj.toString(),Toast.LENGTH_SHORT).show();
                    break;
                case 1:
                    //获取验证码成功
                    Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    };
    private Button bt_getCode;
    private Button bt_vertify;
    private EditText phone;
    private EditText code;
    private boolean isChange;
    private boolean tag=true;
    public String country="86";
    private int i=60;
    private static final int CODE_REPEAT=1;
    private String sphone;
    private String scode;
    private EventHandler eh;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MobSDK.init(this,appKey,appSercret);
        initviews();
        eh=new EventHandler(){
            @Override
            public void afterEvent(int event, int result, Object data) {
                if (result == SMSSDK.RESULT_COMPLETE) {
                    //回调完成
                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                        //提交验证码成功
                        Message msg = new Message();
                        msg.arg1 = 0;
                        msg.obj = data;
                        handler.sendMessage(msg);
                        Log.d(TAG, "提交验证码成功");
                    } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                        Message msg = new Message();
                        //获取验证码成功
                        msg.arg1 = 1;
                        msg.obj = "获取验证码成功";
                        handler.sendMessage(msg);
                        Log.d(TAG, "获取验证码成功");
                    }
                } else {
                    Message msg = new Message();
                    //返回支持发送验证码的国家列表
                    msg.arg1 = 3;
                    msg.obj = "验证失败";
                    handler.sendMessage(msg);
                    Log.d(TAG, "验证失败");
                    ((Throwable) data).printStackTrace();
                }
            }
        };
        SMSSDK.registerEventHandler(eh); //注册短信回调
    }

    private void initviews() {
        phone=findViewById(R.id.phone);
        code=findViewById(R.id.code);
        bt_getCode=findViewById(R.id.bt_getCode);
        bt_vertify=findViewById(R.id.bt_vertify);
        bt_getCode.setOnClickListener(this);
        bt_vertify.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.bt_getCode:
                sphone=phone.getText().toString();
                if(sphone.equals("")){
                    Toast.makeText(MainActivity.this,"手机号不能为空",Toast.LENGTH_SHORT).show();
                }else{
                    //填写了手机号码
                    if(isMobileNO(sphone)){
                        //如果手机号码无误,则发送验证请求
                        bt_getCode.setClickable(true);
                        changeBtnGetCode();
                        getSupportedCountries();
                        getVerificationCode("86",sphone);
                    }else{
                        //手机号格式有误
                        Toast.makeText(MainActivity.this,"手机号格式错误,请检查",Toast.LENGTH_SHORT).show();
                    }
                }
                break;
            case R.id.bt_vertify:
                scode=code.getText().toString();
                if (scode.equals("")){
                    Toast.makeText(MainActivity.this,"验证码不能为空",Toast.LENGTH_SHORT).show();
                }else{
                    submitVerificationCode("86", sphone,scode);
                }
                break;
        }

    }
    //当发送验证码成功时,按钮样式变成倒计时
    private void changeBtnGetCode() {
        Thread thread = new Thread() {
            @Override
            public void run() {
                if (tag) {
                    while (i > 0) {
                        i--;
                        //如果活动为空
                        if (MainActivity.this == null) {
                            break;
                        }
                        MainActivity.this.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                bt_getCode.setText("获取验证码(" + i + ")");
                                bt_getCode.setClickable(false);
                            }
                        });
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    tag = false;
                }
                i = 60;
                tag = true;
                if (MainActivity.this != null) {
                    MainActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            bt_getCode.setText("获取验证码");
                            bt_getCode.setClickable(true);
                        }
                    });
                }
            }
        };
        thread.start();
    }
    private boolean isMobileNO(String sphone) {
        String telRegex = "[1][358]\\d{9}";
        if (TextUtils.isEmpty(sphone))
            return false;
        else
            return sphone.matches(telRegex);

    }
}

好了,暂时就这么多,我没有用到服务器和数据库,只是把最原始的获取验证码分享出来了,大家有需要的话可以在代码上加;

  • 4
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值