android 高兼容性的自动填充验证码工具类(四步代码搞定)

来源:互联网 发布:所以语音软件 编辑:程序博客网 时间:2024/05/16 08:22

验证码自动填充对于移动开发来说是很实用并常见的事。在4.4以前实现验证码填充可以用广播监听,获取验证码。那么4.4以后我们怎么办呢?方法还是有点,或许你以前就是用这种方法来实现的。这是一个工具类,没啥难到的,不多说。对本工具类中提到不懂的类或者字段请自行百度或Bing或Google。

本工具类使用很简单三行代码搞定一个验证码自动填充。

1、在onCreate()中实例化SmsValidateCodeUtils 类,如

mSmsValidateCodeUtils = new SmsValidateCodeUtils(this);
mSmsValidateCodeUtils.register().setOnValidateCodeListener(this).setmValidateName(getResources().getString(R.string.SmsValidateCode));

2、重写接口方法

public void resultValidateCode(String code){
  // TODO

}

3、在onDestroy()中注销 mSmsValidateCodeUtils.unregister();

4、在AndroidManifest.xml中加上这个权限<uses-permission android:name="android.permission.READ_SMS"/>

是不是很简单啊!该类还可以优化,代码不是很规范。这是一个BUG我正在努力调试中……


import android.content.Context;import android.database.ContentObserver;import android.database.Cursor;import android.net.Uri;import android.os.Handler;import android.os.Message;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * desc:自动获取短信验证码 * Created: 2016/5/23. */public class SmsValidateCodeUtils {    private static final int MSG_RECEIVED_CODE = 1;    private Context mContext;    private SmsObserver1 mObserver;    private String mValidateName = "";    private String mAddress = "";    private String mRegex_address = "\\d{4,6}";    private String mRegex_validateName = "【(([\\u4e00-\\u9fa5]+|\\w+)|([\\u4e00-\\u9fa5]+\\w+)|(\\w+[\\u4e00-\\u9fa5]+))】";    private OnValidateCodeListener mOnValidateCodeListener;    private Handler mHandler;    public SmsValidateCodeUtils(Context context) {        this.mContext = context;    }    private class SmsObserver1 extends ContentObserver {        public SmsObserver1(Handler handler) {            super(handler);        }        @Override        public void onChange(boolean selfChange, Uri uri) {            super.onChange(selfChange, uri);            Dlog.e("DEBUG", "SMS has changed!");            Dlog.e("DEBUG", uri.toString());            String code = "";            if (uri.toString().equals("content://sms/raw")) {                return;            }            Uri inboxUri = Uri.parse("content://sms/inbox");            Cursor c = mContext.getContentResolver().query(inboxUri, null, null, null, "date desc");            if (c != null) {                if (c.moveToFirst()) {                    String tempaddress = c.getString(c.getColumnIndex("address"));                    String body = c.getString(c.getColumnIndex("body"));                    Dlog.e("DEBUG", "发件人为:" + tempaddress + " " + "短信内容为:" + body);                    Dlog.e("address ", "".equals(mAddress) + " : " + mAddress);                    if (!"".equals(mAddress)) {                        if (!tempaddress.equals(mAddress)) {                            return;                        }                    }                    Dlog.e("tempaddress ", " : " + tempaddress);                    Dlog.e("validateName", " : " + mValidateName);                    if (!"".equals(mValidateName)) {                        Pattern pattern = Pattern.compile(mRegex_validateName);                        Matcher matcher = pattern.matcher(body);                        if (matcher.find()) {                            code = matcher.group(0);                            Dlog.e("DEBUG", "name is " + code);                        }                        Dlog.e("validateName", " : " + mValidateName);                        if (!mValidateName.equals(code)) {                            return;                        }                    }                    Pattern pattern = Pattern.compile(mRegex_address);                    Matcher matcher = pattern.matcher(body);                    if (matcher.find()) {                        code = matcher.group(0);                        Dlog.e("DEBUG", "code is " + code);                        mHandler.obtainMessage(MSG_RECEIVED_CODE, code).sendToTarget();                    }                }                c.close();            }        }    }    public SmsValidateCodeUtils setOnValidateCodeListener(OnValidateCodeListener OnValidateCodeListener) {        mOnValidateCodeListener = OnValidateCodeListener;        return this;    }    public interface OnValidateCodeListener {        public void resultValidateCode(String code);    }    public SmsValidateCodeUtils register() {        mHandler = new Handler() {            @Override            public void handleMessage(Message msg) {                if (msg.what == MSG_RECEIVED_CODE) {                    String code = (String) msg.obj;                    Dlog.e("mHandler ", code);                    if (null != mOnValidateCodeListener) {                        mOnValidateCodeListener.resultValidateCode(code);                        Dlog.e("resultValidateCode ", code);                    }                }            }        };        Uri uri = Uri.parse("content://sms");        mObserver = new SmsObserver1(mHandler);        mContext.getContentResolver().registerContentObserver(uri, true, mObserver);        return this;    }    public void unregister() {        try {            if (null != mContext) {                mContext.getContentResolver().unregisterContentObserver(mObserver);                mContext = null;                mHandler = null;                mObserver = null;                mOnValidateCodeListener = null;            }        } catch (Exception e) {            System.out.println(e.toString());        }    }    public String getmValidateName() {        return mValidateName;    }    public SmsValidateCodeUtils setmValidateName(String mValidateName) {        this.mValidateName = mValidateName;        return this;    }    public String getmRegex_address() {        return mRegex_address;    }    public SmsValidateCodeUtils setmRegex_address(String mRegex_address) {        this.mRegex_address = mRegex_address;        return this;    }    public String getmRegex_validateName() {        return mRegex_validateName;    }    public SmsValidateCodeUtils setmRegex_validateName(String mRegex_validateName) {        this.mRegex_validateName = mRegex_validateName;        return this;    }    public String getmAddress() {        return mAddress;    }    public SmsValidateCodeUtils setmAddress(String mAddress) {        this.mAddress = mAddress;        return this;    }}




0 0
原创粉丝点击