短信验证码自动填写

来源:互联网 发布:apache下载64位 编辑:程序博客网 时间:2024/06/05 07:47

    在项目开发中,经常涉及到手机发送验证码登录,例如百度外卖手机号验证码登录,再次为了提高用户体验度,再次分享了短信验证码自动填写,提高用户体验度,下面是我的代码:


//继承ContentObserver  观察者观察数据的变化

public class SmsObserver extends ContentObserver {


    private Context mContext;
    private Handler mHandler;


    public SmsObserver(Context context, Handler handler) {
        super(handler);
        mContext = context;
        mHandler = handler;
    }


    @Override
    public void onChange(boolean selfChange, Uri uri) {
        super.onChange(selfChange, uri);


        Log.e("DEBUG", "SMS has changed!");
        Log.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 address = c.getString(c.getColumnIndex("address"));
                String body = c.getString(c.getColumnIndex("body"));


                if (!address.equals("18443333333")) {
                    return;
                }

                //添加验证码正则表达式
                Pattern pattern = Pattern.compile("(\\d{6})");
                Matcher matcher = pattern.matcher(body);

                //正则表达是匹配
                if (matcher.find()) {
                    code = matcher.group(0);
                    Log.e("DEBUG", "code is " + code);


                    mHandler.obtainMessage(MainActivity.MSG_RECEIVED_CODE, code).sendToTarget();
                }

            }
            c.close();
        }


    }
}




MainActivity使用

 public static final int MSG_RECEIVED_CODE = 1;


    private EditText et_ValidateCode = null;


    private SmsObserver mObserver;
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == MSG_RECEIVED_CODE) {
                String code = (String)msg.obj;
                //update the UI
                et_ValidateCode.setText(code);
            }
        }
    };


    @Override
    protected void onPause() {
        super.onPause();
        getContentResolver().unregisterContentObserver(mObserver);
    }


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


        et_ValidateCode = (EditText)findViewById(R.id.et_validateCode);


        mObserver = new SmsObserver(MainActivity.this, mHandler);
        Uri uri = Uri.parse("content://sms");
        getContentResolver().registerContentObserver(uri, true, mObserver);
    }


0 0
原创粉丝点击