手机短信验证码---倒计时

一款APP在注册和忘记密码界面都有手机号发送验证码验证功能,下面封装一个工具类可直接使用:


public class SmsHelp {

    public SmsHelp(Context context, Button button) {
        this.mContext = context;
        this.mButton = button;
    }

    private Button mButton;
    private Context mContext;
    private int waitTime = 60;
    private boolean isStop;

    final Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
                case 1:
                    if (waitTime <= 0) {
                        mButton.setText("发送");
                        mButton.setEnabled(true);// 设置可按
                        waitTime = 60;
                        return;
                    }
                    if (isStop)
                        return;
                    mButton.setEnabled(false);// 设置不可按
                    mButton.setText(waitTime + " s ");
                    handler.sendEmptyMessageDelayed(1, 1000);
                    waitTime--;
                    break;
                case 2:
                    isStop = true;
                    waitTime = 60;
                    mButton.setEnabled(true);
                    mButton.setText("发送");
                    break;
            }
        };
    };

    /**
     * 发送验证码
     *
     * @param userName 账号
     * @param type     短信类型 0-注册,1-重置登录密码,2-重置支付密码
     */
    public void buttomSendMsg(String userName, final String type) {

        if (TextUtils.isEmpty(userName)) {
            Toast.makeText(mContext, "用户名不能为空", Toast.LENGTH_SHORT).show();
            return;
        }
        if (!FormatJudge.isMobileNO(userName)) {
            Toast.makeText(mContext, "手机格试不正确", Toast.LENGTH_SHORT).show();
            return;
        }
        isStop=false;
        handler.sendEmptyMessage(1);
        Map<String, String> par = new HashMap<>();
        par.put("MobileNo", userName);
        par.put("CityCode", Config.CITYCODE);
        par.put("ForType", type + "");

        new HttpManager().asyncHttpPost(Conts.SEND_SMS, par, SmsBean.class, new ReqCallBack<SmsBean>() {
            @Override
            public void onComplete() {
            }
            @Override
            public void onReqSuccess(SmsBean result) {
                Toast.makeText(mContext, "短信验证码为:" + result.getCode(), Toast.LENGTH_LONG).show();
            }
            @Override
            public void onReqFailed(String errorMsg) {
                Toast.makeText(mContext, errorMsg, Toast.LENGTH_SHORT).show();
                buttomStopTime();
            }
        });
    }

    /**
     * 停止计时,恢复初始状态
     */
    public void buttomStopTime() {

        if (mButton == null) {
            return;
        }
        handler.sendEmptyMessage(2);
    }
}

在需要使用的地方调用该类的buttomSendMsg()方法即可,例:

mBtnSendCode = (Button) findViewById(R.id.btn_send_code);
smsHelp = new SmsHelp(this,mBtnSendCode);
smsHelp .buttomSendMsg(getPhone(),"1");


猜你喜欢

转载自blog.csdn.net/JustinNick/article/details/80969283
今日推荐