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

 更新时间:2017年12月12日 15:27:11   作者:spy_develop  
这篇文章主要为大家详细介绍了Android利用广播接收器实现自动填充短信验证码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

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;
  }
}

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

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

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);
  }

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

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

相关文章

  • Android基于hover组件实现监控鼠标移动事件的方法

    Android基于hover组件实现监控鼠标移动事件的方法

    这篇文章主要介绍了Android基于hover组件实现监控鼠标移动事件的方法,结合实例形式分析了hover组件监控鼠标光标在view上变化的操作技巧,需要的朋友可以参考下
    2017-02-02
  • android app icon 图标大小尺寸

    android app icon 图标大小尺寸

    应用程序图标 (Icon)应当是一个 Alpha 通道透明的32位 PNG 图片。由于安卓设备众多,一个应用程序图标需要设计几种不同大小。
    2016-05-05
  • Android 侧滑关闭Activity的实例

    Android 侧滑关闭Activity的实例

    这篇文章主要介绍了Android 侧滑关闭Activity的实例的相关资料,好的手机现在没有物理返回键,或者说统一Android 与IOS 软件功能的时候,需要侧滑关闭,需要的朋友可以参考下
    2017-07-07
  • Android自定义View绘制贝塞尔曲线实现流程

    Android自定义View绘制贝塞尔曲线实现流程

    贝塞尔曲线的本质是通过数学计算的公式来绘制平滑的曲线,分为一阶,二阶,三阶及多阶。但是这里不讲数学公式和验证,那些伟大的数学家已经证明过了,所以就只讲讲Android开发中的运用吧
    2022-11-11
  • Android NDK开发(C语言--联合体与枚举)

    Android NDK开发(C语言--联合体与枚举)

    这篇文章主要介绍了Android NDK开发C语言联合体与枚举,共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。下面详细介绍该内容,需要的朋友可以参考一下
    2021-12-12
  • listView的item中有checkbox,导致setOnItemClick失效的原因及解决办法

    listView的item中有checkbox,导致setOnItemClick失效的原因及解决办法

    这篇文章主要介绍了listView的item中有checkbox,导致setOnItemClick失效的原因及解决办法,需要的朋友可以参考下
    2017-01-01
  • Android View移动的3种方式总结

    Android View移动的3种方式总结

    这篇文章主要给大家介绍了Android View移动的三种方式,在介绍这三种方式之前先介绍了Android坐标系的定义规则以及View的一些位置参数。有需要的朋友们可以参考借鉴。
    2016-09-09
  • 详解Flutter中视频播放器插件的使用教程

    详解Flutter中视频播放器插件的使用教程

    视频播放器插件是可用于Flutter的常用插件之一,在这篇文章中,将学习如何应用视频播放器插件以及控制视频播放器的不同功能,感兴趣的可以了解一下
    2022-02-02
  • Android实现ViewPager无限循环效果(一)

    Android实现ViewPager无限循环效果(一)

    这篇文章主要为大家详细介绍了Android实现ViewPager无限循环效果的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android实现图片上传蒙层进度条

    Android实现图片上传蒙层进度条

    这篇文章主要为大家详细介绍了Android实现图片上传蒙层进度条,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09

最新评论