前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android利用广播接收器实现自动填充短信验证码

Android利用广播接收器实现自动填充短信验证码

作者头像
砸漏
发布2020-10-29 19:41:10
4.3K0
发布2020-10-29 19:41:10
举报
文章被收录于专栏:恩蓝脚本恩蓝脚本

今天博主带给小伙伴们一个小功能,就是利用广播接收器实现自动填充短信验证码,话不多说,我们先看看如何去实现这个小功能。

首先我们需要新建一个名为SMSBroadcastReceiver的广播接收器,代码如下:

代码语言:javascript
复制
public class SMSBroadcastReceiver extends BroadcastReceiver {

  private static MessageListener mMessageListener;

  public SMSBroadcastReceiver() {
    super();
  }

  @Override
  public void onReceive(Context context, Intent intent) {
      public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
      if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
        Object[] pdus = (Object[]) intent.getExtras().get("pdus");
        for(Object pdu:pdus) {
          SmsMessage smsMessage = SmsMessage.createFromPdu((byte [])pdu);
          String sender = smsMessage.getDisplayOriginatingAddress();
          //短信内容
          String content = smsMessage.getDisplayMessageBody();
          long date = smsMessage.getTimestampMillis();
          Date tiemDate = new Date(date);
          SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
          String time = simpleDateFormat.format(tiemDate);

          //过滤不需要读取的短信的发送号码,博主这里用的是关键词过滤,小伙伴们也可以用电话号去过滤
          if (content.contains("***")&&content.contains("****")
              &&content.contains("***")) {
            //从短信内容中获取验证码
            String code=getCode(content,6);
             //回调数据
            mMessageListener.onReceived(code);
            abortBroadcast();
          }
        }
      }

  }

  //回调接口
  public interface MessageListener {
    public void onReceived(String message);
  }

  public void setOnReceivedMessageListener(MessageListener messageListener) {
    this.mMessageListener = messageListener;
  }

  public static String getCode(String body, int YZMLENGTH) {
    // 首先([a-zA-Z0-9]{YZMLENGTH})是得到一个连续的YZMLENGTH位数字字母组合
    // (?<![a-zA-Z0-9])负向断言([0-9]{YZMLENGTH})前面不能有数字
    // (?![a-zA-Z0-9])断言([0-9]{YZMLENGTH})后面不能有数字出现


    // 获得数字字母组合
    //  Pattern p = Pattern  .compile("(?<![0-9])([a-zA-Z0-9]{" + YZMLENGTH + "})(?![a-zA-Z0-9])");

    // 获得纯数字
    Pattern p = Pattern.compile("(?<![0-9])([0-9]{" + YZMLENGTH+ "})(?![0-9])");

    Matcher m = p.matcher(body);
    if (m.find()) {
      System.out.println(m.group());
      return m.group(0);
    }
    return null;
  }
}

至此我们短信的广播接收器就完成了。

之后我们需要完成注册广播接收器以及填写验证码的代码,完成代码如下:

代码语言:javascript
复制
private void initSmsReader(){
    public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
    //生成广播处理
    mSMSBroadcastReceiver = new SMSBroadcastReceiver();

    //实例化过滤器并设置要过滤的广播
    IntentFilter intentFilter = new IntentFilter(SMS_RECEIVED_ACTION);
    //设置优先级
    intentFilter.setPriority(Integer.MAX_VALUE);
    //注册广播
    this.registerReceiver(mSMSBroadcastReceiver, intentFilter);

    mSMSBroadcastReceiver.setOnReceivedMessageListener(new SMSBroadcastReceiver.MessageListener() {
      @Override
      public void onReceived(String message) {
    //在相应的编辑框中填写验证码
        passCode.setText(message);

      }
    });
  }

  @Override
  protected void onStart() {
    super.onStart();
    initSmsReader();
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    //注销短信监听广播
    this.unregisterReceiver(mSMSBroadcastReceiver);
  }

至此我们自动填写验证码的功能就实现了。

以上就是本文的全部内容,希望对大家的学习有所帮助。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档