Android&java的成长之路之八(Android短信验证 亲测)

来源:互联网 发布:唢呐软件下载 编辑:程序博客网 时间:2024/05/16 16:22


第三方登陆,注册,分享,等等是每个APP基本必备的一项功能,首先,我们今天先说一下Android短信验证。

这里要用到第三方包,进入mob网站,下载集成好的Android短信的SDK 即SMS SDK 下载下来如下图显示:

第一个是我们用不到的 后面四个加载到项目里面 如下图显示:

 然后再根据mob官网上的文档进行相应的配置 ,配置好了之后,我们就可以在应用中用到SMSSDK这个类了 不妨作一下测试。

接下来 就说一下具体代码是怎么实现的吧。

package com.example.administrator.sms_sdk;import android.graphics.Color;import android.os.Bundle;import android.os.CountDownTimer;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import org.json.JSONException;import org.json.JSONObject;import cn.smssdk.EventHandler;import cn.smssdk.SMSSDK;public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private EditText phone, phoneRandom;    private Button btnRegister, btnCheckPass;    private EventHandler eh;    private CountTimer countTimer;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        inttView();        initEvent();    }    //初始化控件    private void inttView() {        phone = (EditText) findViewById(R.id.phone);        phoneRandom = (EditText) findViewById(R.id.phoneRandom);        btnCheckPass = (Button) findViewById(R.id.btnCheckPass);        btnRegister = (Button) findViewById(R.id.btnRegister);        countTimer = new CountTimer(60000, 1000);    }    private void initEvent() {        btnRegister.setOnClickListener(this);        btnCheckPass.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.btnCheckPass:                if (phone.getText().toString().equals("") || phone.getText().toString().length() != 11                        || (!phone.getText().toString().substring(0, 2).equals("13")) && (!phone.getText().toString().substring(0, 2).equals("15"))) {                    Toast.makeText(MainActivity.this, "请正确输入手机号码", Toast.LENGTH_SHORT).show();                    return;                }                sendSMSRandom();                countTimer.start();                break;            case R.id.btnRegister://点击了提交的按钮                if (phoneRandom.getText().toString().length()!=4) {                    Toast.makeText(MainActivity.this, "请输入正确验证码", Toast.LENGTH_SHORT).show();                    return;                }                SMSSDK.submitVerificationCode("86", phone.getText().toString(), phoneRandom.getText().toString());                break;        }    }    @Override    protected void onDestroy() {        super.onDestroy();        SMSSDK.unregisterEventHandler(eh);//解除注册的回掉    }    //发送短信验证码的方法    public void sendSMSRandom() {        //初始化短信验证        SMSSDK.initSDK(this, "fe42edb9cf9c", "d955f95b891af1d0f36842645d413432");        //监听事件        eh = new EventHandler() {            @Override            public void afterEvent(int event, int result, final Object data) {                if (result == SMSSDK.RESULT_COMPLETE) {                    //回调完成                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {                        //提交验证码成功                        Message ms = Message.obtain();                        ms.arg1 = 2;                        ms.arg2 = 2;                        ms.obj = data.toString().substring(21);                        handler.sendMessage(ms);                    } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {                        //获取验证码成功                        Log.i("TTTTTTTTTT", data + "");                    } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {                        //返回支持发送验证码的国家列表                    }                } else {                    Message ms = Message.obtain();                    ms.arg1 = 1;                    ms.arg2 = 1;                    ms.obj = data.toString().substring(21);                    handler.sendMessage(ms);                    ((Throwable) data).printStackTrace();                }            }        };        SMSSDK.registerEventHandler(eh); //注册短信回调        SMSSDK.getVerificationCode("86", phone.getText().toString());    }    //每隔一分钟可以点击一次验证码    public class CountTimer extends CountDownTimer {        /**         * @param millisInFuture    时间间隔是多长时间         * @param countDownInterval 回调onTick方法,每隔多久执行一次         */        public CountTimer(long millisInFuture, long countDownInterval) {            super(millisInFuture, countDownInterval);        }        //间隔时间内执行的操作        @Override        public void onTick(long millisUntilFinished) {            //更新页面组件            btnCheckPass.setText(millisUntilFinished / 1000 + "后重新发送");            btnCheckPass.setBackgroundColor(Color.rgb(169, 169, 169));            btnCheckPass.setClickable(false);        }        //间隔时间结束的时候才会调用        @Override        public void onFinish() {            //更新页面的组件            btnCheckPass.setText("获取验证码");            btnCheckPass.setBackgroundColor(Color.rgb(255, 255, 255));            btnCheckPass.setClickable(true);        }    }    public Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            String code = "";            if (msg.arg1 == 1) {                JSONObject object = null;                try {                    Log.i("TTTTTTTT", (msg.obj + ""));                    object = new JSONObject(msg.obj + "");                    code = object.getString("status");                    //这里进行返回的码数来提醒用户                    switch (code) {                        case "466":                            Toast.makeText(MainActivity.this, "校验的验证码为空", Toast.LENGTH_SHORT).show();                            break;                        case "467":                            Toast.makeText(MainActivity.this, "校验验证码请求频繁", Toast.LENGTH_SHORT).show();                            break;                        case "468":                            Toast.makeText(MainActivity.this, "需要校验的验证码错误", Toast.LENGTH_SHORT).show();                            break;                    }                } catch (JSONException e) {                    e.printStackTrace();                    Log.i("TTTTTTTT", e.getMessage());                }            }else if(msg.arg1 == 2){                Toast.makeText(MainActivity.this,"注册成功",Toast.LENGTH_SHORT).show();            }        }    };}

代码量是有点多,不过看着解释都能理解的。这里有三个知识点需要提一下 一个是Handler Message 这个 还有个是JSON数据的处理 如果不用gson包的时候是怎么样处理的 这个应该复习下。还有短信验证的时候按钮倒计时 看看是怎么实现的。

0 0
原创粉丝点击