Android实现短信验证码自动填写功能

2019-12-10 19:37:06王振洲
易采站长站为您分析Android实现短信验证码自动填写功能,感兴趣的小伙伴们可以参考一下  

本实例为大家分享了Android实现短信验证码自动填写功能,供大家参考,具体内容如下

实现思路很简单:

  • 1、在需要输入验证码的Activity代码注册监听短信的广播
  • 2、拦截短信,获取其中的验证码
  • 3、回写到EditText
    private SmsReciver smsReciver = new SmsReciver(); 
    /** 收到短信Action **/ 
        String ACTION_SMS_RECIVER = "android.provider.Telephony.SMS_RECEIVED"; 
      /** 
       * 注册广播接受者监听短信验证码自动回写 可在onCreate()中进行注册; 
       */ 
      private void registSmsReciver() { 
        IntentFilter filter = new IntentFilter(); 
        filter.addAction(ACTION_SMS_RECIVER); 
        // 设置优先级 不然监听不到短信  
        filter.setPriority(1000); 
        registerReceiver(smsReciver, filter); 
        } 
     
         /** 
        * 短信广播接受者 用户监听短信,自动填写验证码 
        */ 
         private class SmsReciver extends BroadcastReceiver { 
     
        @Override 
        public void onReceive(Context context, Intent intent) { 
          Object[] objs = (Object[]) intent.getExtras().get("pdus"); 
           for (Object obj : objs) { 
             yte[] pdu = (byte[]) obj; 
             SmsMessage sms = SmsMessage.createFromPdu(pdu); 
             // 短信的内容 
             String message = sms.getMessageBody(); 
             Log.d("log", "message   " + message); 
            // 短息的手机号,如果你们公司发送验证码的号码是固定的这里可以进行一个号码的校验 
             String from = sms.getOriginatingAddress(); 
             Log.d("log", "from   " + from); 
             analysisVerify(message); 
     
          } 
         } 
     
      } 
     
       /** 
       * 解析短信并且回写 这里解析的是纯数字的短信,如果小伙伴的验证码包含字母的话,可用正则替换 
       * 
       * @param message 
       */ 
      private void analysisVerify(String message) { 
        char[] msgs = message.toCharArray(); 
         StringBuffer sb = new StringBuffer(); 
        for (int i = 0; i < msgs.length; i++) { 
          if ('0' <= msgs[i] && msgs[i] <= '9') { 
                  sb.append(msgs[i]); 
          } 
        } 
     
        mEtVerifyCode.setText(sb.toString()); 
       } 
     
      @Override 
      protected void onDestroy() { 
        super.onDestroy(); 
        // 取消短信广播注册 
        if (smsReciver != null) { 
          unregisterReceiver(smsReciver); 
          smsReciver = null; 
        } 
      }