在应用中登陆、注册、修改密码等都会使用到通过短信的方式获取验证码,验证码时间大部分为60秒,如果用户没有输入,可以点击再次发送,通过Android中的handler可以实现这样的效果!
public class MainActivity extends AppCompatActivity {
private TextView tvTime;
private static final int VERIFY_CODE = 60;
/**
* 倒计时时间
*/
private int time = VERIFY_CODE;
private boolean isTimeOut = true;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvTime = (TextView) findViewById(R.id.tv_count_down);
tvTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isTimeOut) {
time = VERIFY_CODE;
sendMsg();
}
}
});
}
/**
* handler 发送消息 实现倒计时
*/
private void sendMsg() {
isTimeOut = false;
tvTime.setClickable(false);
if (mHandler == null) {
mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (time > 0) {
// 再发一条延时消息,实现递归循环效果
mHandler.sendEmptyMessageDelayed(1, 1000);
time--;
tvTime.setText("获取验证码\r\n(" + time + "秒)");
} else {
tvTime.setText("重取验证码\r");
tvTime.setClickable(true);
isTimeOut = true;
}
}
;
};
}
// 再发一条延时消息,实现递归循环效果
if (time > 0) {
mHandler.sendEmptyMessageDelayed(1, 1000);
time--;
tvTime.setText("获取验证码\r\n(" + time + "秒)");
}
}
}