首页 > 代码库 > 安卓发送验证码倒计时效果和自动获取验证码并填充到输入框

安卓发送验证码倒计时效果和自动获取验证码并填充到输入框

在注册,实名认证、修改手机号码的,我们都会用发送验证码的功能,在这里经常就会涉及到2个效果,

第一个:发送验证码倒计时效果;

第二个:自动获取接收到的短信,并且填充验证码。

技术分享


先来说倒计时效果:

其实很简单,就是一个计时器。每秒刷新一次,倒计时完了。就可以重新点击获取了。

<pre name="code" class="java">btn_getYzm.setEnabled(false);
btn_getYzm.setBackgroundResource(R.drawable.daojishi);
task = new TimerTask() {
	@Override
	public void run() {
		runOnUiThread(new Runnable() { // UI thread
			@Override
			public void run() {
				if (time <= 0) {
					// 当倒计时小余=0时记得还原图片,可以点击
					btn_getYzm.setEnabled(true);
					btn_getYzm.setBackgroundResource(R.drawable.btn_yangzhengma_selector);
					btn_getYzm.setTextColor(Color.parseColor("#454545"));
					btn_getYzm.setText("获取验证码");
					task.cancel();
				} else {
					btn_getYzm.setText(time + "秒后重试");
					btn_getYzm.setTextColor(Color.rgb(125, 125, 125));
				}
				time--;
			}
		});
	}
};

time = 60;
timer.schedule(task, 0, 1000);


第二个,自动监听新短信,并解析里面的验证码

package com.smsyzm;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.app.Activity;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.widget.EditText;

/**
 * 注册、实名认证、修改手机号码,自动获取验证码,并且填上
 *
 */
public class GetSmsContent extends ContentObserver {
	public final String SMS_URI_INBOX = "content://sms/inbox";
	private Activity activity = null;
	private String smsContent = "";
	private EditText verifyText = null;
	
	private String SMS_ADDRESS_PRNUMBER = "400888666";//短息发送提供商

	public GetSmsContent(Activity activity, Handler handler, EditText verifyText) {
		super(handler);
		this.activity = activity;
		this.verifyText = verifyText;
	}

	@Override
	public void onChange(boolean selfChange) {
		super.onChange(selfChange);
		Cursor cursor = null;// 光标
		// 读取收件箱中指定号码的短信
		cursor = activity.managedQuery(Uri.parse(SMS_URI_INBOX), 
				new String[] { "_id", "address", "body", "read" }, //要读取的属性
				"address=? and read=?", //查询条件是什么
				new String[] { SMS_ADDRESS_PRNUMBER, "0" },//查询条件赋值
				"date desc");//排序
		if (cursor != null) {// 如果短信为未读模式
			cursor.moveToFirst();
			if (cursor.moveToFirst()) {
				String smsbody = cursor.getString(cursor.getColumnIndex("body"));
				System.out.println("smsbody=======================" + smsbody);
				String regEx = "[^0-9]";
				Pattern p = Pattern.compile(regEx);
				Matcher m = p.matcher(smsbody.toString());
				smsContent = m.replaceAll("").trim().toString();
				if(verifyText != null && null!=smsContent && !"".equals(smsContent)){
					verifyText.setText(smsContent);
					verifyText.setSelection(smsContent.length());
				}
			}
		}
	}
}


调用方法:在Activity的oncreate方法里面注册:

GetSmsContent  content = new GetSmsContent(RegisterByPhone.this, new Handler(), edit_yzm);
// 注册短信变化监听
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);



demo完整的下载链接   点击打开链接




安卓发送验证码倒计时效果和自动获取验证码并填充到输入框