android实现短信验证码自动填充

有时候,为了更好的用户体验,在验证码这个环节,不需要用户手工输入,直接监听短信内容,实现验证码自动填充功能,比如百度外卖等APP上面都有. 在这里,我用比较粗糙的方式去实现它.

1. 先上界面 ,就一editText, 简单粗暴

device-2016-07-17-103218.png

2. 代码块 , 原理是通过短信接收器去监听所接受短信的内容 , 然后获取短信内容中的验证码部分 ,更新到界面上

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editText = (EditText) findViewById(R.id.validate);
    filter = new IntentFilter();
    //创建短信BroadcastReceiver
    filter.addAction("android.provider.Telephony.SMS_RECEIVED");
    //优先级设置为最高
    filter.setPriority(Integer.MAX_VALUE);
    smsReceiver = new BroadcastReceiver() {
        
        @Override
        public void onReceive(Context context, Intent intent) {
            //[1]获取发短信送的号码 和内容,  注意"pdus"是短信的key
            Object[] objects = (Object[]) intent.getExtras().get("pdus");
            for(Object pdu : objects){
                //[2]获取smsmessage实例 
                SmsMessage smsMessage = SmsMessage.createFromPdu((byte[])pdu);
                //[3]获取发送短信的内容 
                String smsBody = smsMessage.getMessageBody();
                //[4]匹配验证码
                Matcher m = Pattern.compile("[^0-9]").matcher(smsBody.toString());
                String valCode = m.replaceAll("").trim().toString();
                //[5]更新输入框
                editText.setText(valCode);
                //[6]验证码自动填充后 ,将光标移到文本后面
                editText.setSelection(valCode.length());
            }
        }
    };
    //注册接收器
    registerReceiver(smsReceiver, filter);
}

//取消注册接收器
@Override
protected void onDestroy() {
    unregisterReceiver(smsReceiver);
    super.onDestroy();
}

3. 注册清单添加用户权限-接收短信, 十分重要

<uses-permission android:name="android.permission.RECEIVE_SMS"/>

完成 , 就这么简单!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容