android中獲取手機驗證碼的倒計時操作

話不多說,直接上代碼

private EditText et;
	private Button btn;
	private static final String PHONE_PATTERN = "[1]{1}[3,4,5,8]{1}[0-9]{9}";
	private static final String EMAIL_PATTERN = "^([a-zA-Z0-9]+[_|\\-|\\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\\-|\\.]?)*[a-zA-Z0-9]+\\.[a-zA-Z]{2,3}$";
	private int time = 120;
	private Timer timer = new Timer();
	TimerTask task;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		et = (EditText) findViewById(R.id.edittext);
		btn = (Button) findViewById(R.id.button);
		btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				String s = et.getText().toString();
				if(isValidPhone(s)){
					Toast.makeText(MainActivity.this, "此處很可能是手機號", Toast.LENGTH_SHORT).show();
				}else if(isValidEmail(s)){
					Toast.makeText(MainActivity.this, "此處很可能是郵箱", Toast.LENGTH_SHORT).show();
				}else{
					btn.setEnabled(false);
					task = new TimerTask() {
						@Override
						public void run() {

							runOnUiThread(new Runnable() { // UI thread
								@Override
								public void run() {
									if (time <= 0) {
										btn.setEnabled(true);
										btn.setText("獲取驗證碼");
										task.cancel();
									} else {
										btn.setText("" + time);
									}
									time--;
								}
							});
						}
					};
					time = 10;
					timer.schedule(task, 0, 1000);
				}
			}
		});
	}

	private boolean isValidPhone(String phone) {
		if (TextUtils.isEmpty(phone))
			return false;
		return phone.matches(PHONE_PATTERN);
	}

	private boolean isValidEmail(String email) {
		if (TextUtils.isEmpty(email))
			return false;
		return email.matches(EMAIL_PATTERN);
	}

代碼中加了個郵箱與手機號的判斷,分別有各自的方法,鞋友們可以參考,有更好更簡便更準確的還麻煩提醒一下。

此處用了timer.schedule(task, 0, 1000); 其中的參數第一個代表所執行的任務,第二個代表第一次執行的延遲時間,第三個代表多長時間執行一次。這段代碼需要注意的是任務可以取消,每次倒計時的時候都新建一個任務,但是別把timer取消了,否則會出錯。  一般最好的處理辦法就是加了個btn.setEnabled(false);來控制按鈕的點擊事件。


btn.setEnabled(false);
btn.setEnabled(false);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章