android 短信验证倒计时功能

android中都有注册的功能,现在很多注册的都是用手机号,因为用手机号注册,app可以根据注册的手机号推送一些数据给客户端,为了防止有的用户频繁的去获取验证码,可以用时间做一些操作防止此情况的发生,比如用户只能一分钟才能点击,否则不让它点击,在一分钟之内的让按钮不能被点击,一分钟之后才让用户可以点击, 当用户输入手机号,获取验证码的过程中,有一个倒计时的功能,今天就讲讲这个实现,其实在android中就已经为我们提供了此类方便操作 在android.os.CountDownTimer包中,


实例代码:

public class MainActivity extends Activity {
	private EditText et_phone;
	private Button   btn_coder;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		et_phone = (EditText) findViewById(R.id.et_phone);
		btn_coder = (Button) findViewById(R.id.btn_coder);
		
		
		et_phone.addTextChangedListener(new TextWatcher() {
			@Override
			public void onTextChanged(CharSequence s, int start, int before, int count) {
				if(s.toString().length()==11){//当用户输入的手机不为11位时,就不能点击获取验证码的按钮
					 btn_coder.setClickable(true);
				 }else{
					 btn_coder.setClickable(false);
				 }
			}
			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
			}
			@Override
			public void afterTextChanged(Editable s) {
			}
		});
		btn_coder.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				    startTimer(); 
			}
		});
	}
	protected void startTimer() {
		CountDownTimer countDownTimer = new CountDownTimer(60*1000,1000) {
			
			@Override
			public void onTick(long millisUntilFinished) {
				btn_coder.setText(millisUntilFinished/1000+"");
				btn_coder.setClickable(false);//防止重复点击
				Log.e("CountDownTimer","millisUntilFinished="+millisUntilFinished/1000);
			}
			
			@Override
			public void onFinish() {
				//可以在这做一些操作,如果没有获取到验证码再去请求服务器
				btn_coder.setClickable(true);//防止重复点击
				btn_coder.setText("获取验证码");
			}
		};
		countDownTimer.start();
	}
}

如图:

还可以通过Handler的方式进行

public class MainActivity extends Activity {
	private EditText et_phone;
	private Button   btn_coder;
	private int mCount = 60;
	private Handler  mHandler = new Handler();
	Runnable runnable = new Runnable() {
        @Override
        public void run() {
            mCount--;
            if (mCount > 0) {
                btn_coder.setText(""+mCount);
                mHandler.postDelayed(this, 1000);
            } else {
            	btn_coder.setText("获取验证码");
                mHandler.removeCallbacks(this);
            }
        }
    };
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		et_phone = (EditText) findViewById(R.id.et_phone);
		btn_coder = (Button) findViewById(R.id.btn_coder);
		et_phone.addTextChangedListener(new TextWatcher() {
			@Override
			public void onTextChanged(CharSequence s, int start, int before, int count) {
				if(s.toString().length()==11){//当用户输入的手机不为11位时,就不能点击获取验证码的按钮
					 btn_coder.setClickable(true);
				 }else{
					 btn_coder.setClickable(false);
				 }
			}
			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
			}
			@Override
			public void afterTextChanged(Editable s) {
			}
		});
		btn_coder.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				     handlerDown();
			}
		});
	}
	protected void handlerDown() {
		  mCount = 60;
		  mHandler.postDelayed(runnable, 1000);//延迟一秒执行
          //在此调短信的接口,
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值