自动获取短信验证码

//获取验证码广播
public class SmsObserver extends ContentObserver {
	public SmsObserver(Handler handler, EditText et_name, Status status, Context context) {
		super(handler);
		this.et_name = et_name;
		this.status = status;
		this.context = context;
		this.et_vpw = et_name;
	}

	public SmsObserver(Handler handler, EditText et_vpw, Status status) {
		super(handler);
		this.et_vpw = et_vpw;
		this.status = status;
	}

	Context context = null;

	private Uri uri;
	private String patternCoder = "(?<!\\d)\\d{6}(?!\\d)";//匹配6位数字的验证码
	private String strContent;

	public Status status;

	private Builder builder;

	private Map<String, String> map;

	public void setStatus(Status status) {
		this.status = status;
	}

	private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case 1:
				SmsInfo smsInfo = getSmsInfo();
				String content = smsInfo.getSmsbody();
				Log.e("TAG", "=============" + content);

				if (content == null) {
					Message mMessage = handler.obtainMessage();
					mMessage.what = 1;
					handler.sendMessageDelayed(mMessage, 1000);
					return;
				}

				String code = patternCode(content);
			break;
			}

		};
	};

	@Override
	public void onChange(boolean selfChange) {
		Message mMessage = handler.obtainMessage();
		mMessage.what = 1;
		handler.sendMessageDelayed(mMessage, 1000);

		// super.onChange(selfChange);
	}

	public SmsInfo getSmsInfo() {
		SmsInfo smsinfo = new SmsInfo();
		Uri uri = Uri.parse("content://sms/inbox");// 收件箱查询地址
		String[] projection = new String[] { "_id", "address", "person", "body", "date", "type" };
		// Cursor cusor = ((Activity) context).managedQuery(uri, projection,
		// null, null, "date desc");
		ContentResolver cr = context.getContentResolver();
		Cursor cusor = cr.query(uri, projection, "type=1 AND date>" + (System.currentTimeMillis() - 30 * 1000), null, "date desc");
		try {
			if (cusor != null) {
				Log.v("a", "==========cusor==========" + cusor.getCount());
				if (cusor.getCount() > 0) {
					cusor.moveToFirst();
					int nameColumn = cusor.getColumnIndex("person");
					int phoneNumberColumn = cusor.getColumnIndex("address");
					int smsbodyColumn = cusor.getColumnIndex("body");
					int dateColumn = cusor.getColumnIndex("date");
					int typeColumn = cusor.getColumnIndex("type");

					smsinfo.setName(cusor.getString(nameColumn));
					smsinfo.setDate(cusor.getString(dateColumn));
					smsinfo.setPhoneNumber(cusor.getString(phoneNumberColumn));
					smsinfo.setSmsbody(cusor.getString(smsbodyColumn));
					smsinfo.setType(cusor.getString(typeColumn));
				}
			}
		} catch (Exception e) {
		} finally {

			if (cusor != null) {
				cusor.close();
			}

			if (cr != null) {
				cr.unregisterContentObserver(this);
			}
		}

		return smsinfo;
	}

	/**
	 * 匹配短信中间的6个数字(验证码等)
	 * 
	 * @param patternContent
	 * @return
	 */
	private String patternCode(String patternContent) {
		if (TextUtils.isEmpty(patternContent)) {
			return null;
		}
		Pattern p = Pattern.compile(patternCoder);
		Matcher matcher = p.matcher(patternContent);
		if (matcher.find()) {
			return matcher.group();
		}
		return null;
	}

	/**
	 * 密码 验证码标示
	 * 
	 * @author zhoufeng
	 */
	public enum Status {
		PWD, VPW

	}
}

利用广播来获取短信验证码

getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true,new SmsObserver (new Handler(), et_fg_pw, SmsObserver.Status.VPW, context));


你可能感兴趣的:(android,自动,短信,手机验证码)