Activity
public class ThirdLoginBindPhoneActivity extends BaseActivity implements ITimerCallBack {
private EditText mThirdLoginEditUsername;
private Button mThirdLoginBtnBind;
private String mOpenId;
private String mType;
private String mPhoneNum;
private String mSmsCode;
private Intent mIntent;
private EditText mThirdLoginMsgEt;
private TextView mThirdLoginMsgTv;
private EventHandler mEventHandler;
private TimerUtil mTimerUtil;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_third_login_bind_phone);
mThirdLoginEditUsername = (EditText) findViewById(R.id.third_login_edit_username);
mThirdLoginBtnBind = (Button) findViewById(R.id.third_login_btn_bind);
mThirdLoginBtnBind.setOnClickListener(mOnClickListener);
mThirdLoginMsgEt = (EditText) findViewById(R.id.third_login_msg_et);
mThirdLoginMsgTv = (TextView) findViewById(R.id.third_login_msg_tv);
mThirdLoginMsgTv.setOnClickListener(mOnClickListener);
mTimerUtil = new TimerUtil(this);
mIntent = getIntent();
if (mIntent != null) {
mOpenId = mIntent.getStringExtra("openId");
mType = mIntent.getStringExtra("type");
}
initSmsSdk();
}
@Override
protected void onDestroy() {
super.onDestroy();
SMSSDK.unregisterEventHandler(mEventHandler);
}
private void initSmsSdk() {
// 创建EventHandler对象
SMSSDK.setAskPermisionOnReadContact(false);
mEventHandler = new EventHandler() {
@Override
public void afterEvent(final int event, final int result, final Object data) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (result == SMSSDK.RESULT_COMPLETE) {
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
System.out.println(event +
" =提交验证码成功================" + data.toString());
reqBindPhone();
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
System.out.println(event +
"=获取验证码成功================" + data.toString());
mTimerUtil.start(60);
showToast("验证码发送成功");
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
System.out.println(event +
"=返回支持发送验证码的国家列表======" + data.toString());
}
} else {
if (data instanceof Throwable) {
Throwable throwable = (Throwable) data;
String message = throwable.getMessage();
System.out.println("message=========================" + message);
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
showToast("验证码错误");
System.out.println(event +
" =提交验证码失败================" + data.toString());
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
showToast("发送失败");
System.out.println(event +
"=获取验证码失败================" + data.toString());
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
System.out.println(event +
"=返回支持发送验证码的国家列表失败========" +
data.toString());
}
}
}
}
});
}
};
//注册短信回调
SMSSDK.registerEventHandler(mEventHandler);
}
private View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.third_login_btn_bind:
bindPhone();
break;
case R.id.third_login_msg_tv:
sendMobSms();
break;
}
}
};
private void sendMobSms() {
String phoneNumber = mThirdLoginEditUsername.getText().toString();
if (AppUtils.isEmpty(phoneNumber)) {
showToast("手机号码不能为空");
return;
}
if (!isMobileNO(phoneNumber)) {
showToast("手机号码格式不正确");
return;
}
//发送验证码
SMSSDK.getVerificationCode("86", phoneNumber);
}
private void bindPhone() {
mPhoneNum = mThirdLoginEditUsername.getText().toString().trim();
mSmsCode = mThirdLoginMsgEt.getText().toString().trim();
if (TextUtils.isEmpty(mPhoneNum)) {
ToastUtils.showShort("手机号码不能为空");
return;
}
if (!isMobileNO(mPhoneNum)) {
ToastUtils.showShort("手机号码格式不正确");
return;
}
if (TextUtils.isEmpty(mSmsCode)) {
ToastUtils.showShort("请输入短信验证码");
return;
}
//校验短信验证码
SMSSDK.submitVerificationCode("86", mPhoneNum, mSmsCode);
}
private void reqBindPhone() {
ThirdUserInfo thirdUserInfo = new ThirdUserInfo();
thirdUserInfo.setPhone(mPhoneNum);
if (!TextUtils.isEmpty(mOpenId)) {
thirdUserInfo.setOpenId(mOpenId);
}
if (!TextUtils.isEmpty(mType)) {
thirdUserInfo.setType(mType);
}
UserManager.getInstance().thirdLoginBindPhone(
thirdUserInfo,
new ThirdLoginBindPhoneCallback(ThirdLoginBindPhoneActivity.this)
);
}
@Override
public void timerFireCallBack(int timeSecond) {
mThirdLoginMsgTv.setEnabled(false);
String str = timeSecond + "s";
mThirdLoginMsgTv.setText(str);
mThirdLoginMsgTv.setAlpha(0.5F);
}
@Override
public void timerFinishCallBack() {
mThirdLoginMsgTv.setEnabled(true);
mThirdLoginMsgTv.setText("重新获取");
mThirdLoginMsgTv.setAlpha(1.0F);
}
public boolean isMobileNO(String mobiles) {
//"[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,
//"\\d{9}"代表后面是可以是0~9的数字,有9位。
String telRegex = "[1][34578]\\d{9}";
if (TextUtils.isEmpty(mobiles)) return false;
else return mobiles.matches(telRegex);
}
}
ITimerCallBack
public interface ITimerCallBack {
public void timerFireCallBack(int timeSecond);
public void timerFinishCallBack();
}
TimerUtil
import android.os.Handler;
public class TimerUtil {
private ITimerCallBack mCallBack;
private boolean mIsStop;
private int mTimeSecond;
private Handler mHandler = new Handler();
private Runnable mRunnable = new Runnable() {
public void run() {
if (mTimeSecond == 0) {
if (mCallBack != null) {
mCallBack.timerFinishCallBack();
}
stop();
} else {
if (mCallBack != null) {
mCallBack.timerFireCallBack(mTimeSecond);
}
mTimeSecond--;
if (!mIsStop) {
mHandler.postDelayed(mRunnable, 1000);
}
}
}
};
public TimerUtil(ITimerCallBack callBack) {
mCallBack = callBack;
}
public void start(int timeSecond) {
mTimeSecond = timeSecond;
mHandler.post(mRunnable);
}
public void startDelay(int timeSecond) {
mTimeSecond = timeSecond;
mHandler.postDelayed(mRunnable, 1000);
}
public void stop() {
if (mRunnable != null && mHandler != null) {
mHandler.post(mRunnable);
}
}
}