700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 短信验证码自动填充

短信验证码自动填充

时间:2018-12-29 23:55:46

相关推荐

短信验证码自动填充

短信验证码自动填充

1、简述

不知道大家有没觉得,注册一个app的时候,还要手动输入短信验证码,挺烦的?反正我觉得是挺烦的!其实这也不是什么高深的技术,我们可以通过代码的形式,完成短信验证码的自动填充。

思路:

①、继承系统的ContentObserver类,当内容发生变化时,那么系统就会回调ContentObserver的onChange方法,观察者模式,这些都是系统帮我们完成的,我们需要做的就是写一个类继承ContentObserver即可;

public void onChange(boolean selfChange, Uri uri)

②、根据onChange方法回调的uri判断是否是接收短信的Uri,如果是,那么根据ContentResolver查询短信的内容,获取到短信验证码,并通过接口回调的形式返回给调用者;

2、代码示例

①、继承ContentObserver的SmsObserver类:

public class SmsObserver extends ContentObserver {private Context mContext;private IValidateCode iValidateCode;public SmsObserver(Context context, Handler handler) {super(handler);mContext = context;}public SmsObserver(Context context, Handler handler, IValidateCode iValidateCode) {super(handler);mContext = context;this.iValidateCode = iValidateCode;}@Overridepublic void onChange(boolean selfChange, Uri uri) {super.onChange(selfChange, uri);String code = "";if (uri.toString().equals("content://sms/raw")) {return;}Uri inboxUri = Uri.parse("content://sms/inbox");//根据ContentResolver解析收信箱新的短信Cursor c = mContext.getContentResolver().query(inboxUri, null, null, null,"date desc");if (c != null) {if (c.moveToFirst()) {String address = c.getString(c.getColumnIndex("address"));String body = c.getString(c.getColumnIndex("body"));if (!address.equals(AppConstant.validateCodeNum)) {return;}Pattern pattern = pile("(\\d{6})");Matcher matcher = pattern.matcher(body);if (matcher.find()) {code = matcher.group(0);//通过接口回调给调用者返回验证码iValidateCode.getCode(code);}}c.close();}}}

②、回调接口

public interface IValidateCode {void getCode(String code);}

③、在需要的页面调用

private void initSmsObserver() {if (timer != null) {timer.cancel();}smsObserver = new SmsObserver(this, null, new IValidateCode() {@Overridepublic void getCode(final String code) {runOnUiThread(new Runnable() {@Overridepublic void run() {et_validate_code.setText(code);}});}});getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, smsObserver);}

当页面进入后台时,取消短信验证码的监听

@Overrideprotected void onPause() {super.onPause();if (smsObserver != null)getContentResolver().unregisterContentObserver(smsObserver);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。