一款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");