Android 短信验证码自动填充

Android 短信验证码自动填充一、前言:这周项目做优化,为用户操作更加方便,注册、忘记密码、更换手机号、所需要的获取验证码操作,增加获取短信验证码,然后自动填写到输入框中。思路简单,主要是监听短信的广播,然后正则短信中的验证码二、具体代码:packagecom.taikongdan.app.service;importandroid.content.BroadcastReceiver;importan

大家好,又见面了,我是你们的朋友全栈君。

一、前言:

这周项目做优化,为用户操作更加方便,注册、忘记密码、更换手机号、所需要的获取验证码操作,增加 获取短信验证码,然后自动填写到输入框中。思路简单,主要是监听短信的广播,然后正则短信中的验证码

二、具体代码:

package com.taikongdan.app.service;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by merbng on 2016/4/6.
 */
public class SMSReceiver extends BroadcastReceiver {
    public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
    public static final String TAG = "ImiChatSMSReceiver";

    public interface ISMSListener {
        void onSmsReceiver(String verifyCode);
    }

    private static ISMSListener mSMSListener;

    public SMSReceiver(ISMSListener mSMSListener) {
        this.mSMSListener = mSMSListener;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
            SmsMessage[] messages = getMessageFromIntent(intent);
            for (SmsMessage message : messages
                    ) {
            //  在这里你可以对放松的号码进行判断,只接受目标号码的验证码
                String msg = message.getDisplayMessageBody();
                Pattern p = Pattern.compile("\\d{6}");//这里你可以更改数字来指定验证码的位数
                Matcher m = p.matcher(msg);
                String verifyCode = null;
                while (m.find()) {
                    verifyCode = m.group();
                    break;
                }
                if (mSMSListener != null) {
                    mSMSListener.onSmsReceiver(verifyCode);
                }

            }

        }
    }

    private SmsMessage[] getMessageFromIntent(Intent intent) {
        Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
        byte[][] pduObjes = new byte[messages.length][];
        for (int i = 0; i < messages.length; i++) {
            pduObjes[i] = ((byte[]) messages[i]);

        }
        byte[][] pdus = new byte[pduObjes.length][];
        int pduCount = pdus.length;
        SmsMessage[] msgs = new SmsMessage[pduCount];
        for (int i = 0; i < pduCount; i++) {
            pdus[i] = pduObjes[i];
            msgs[i] = SmsMessage.createFromPdu(pdus[i]);
        }
        return msgs;
    }
}

在Activity  onCreate中,注册广播,

<pre name="code" class="java">    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.rememeberactivity);
        mReceiver = new SMSReceiver(this);
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.provider.Telephony.SMS_RECEIVED");
        registerReceiver(mReceiver, filter);

    }


在界面销毁的时候 解绑广播

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mReceiver);
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160334.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么叫侧面指纹识别_屏下指纹和侧面指纹触控有什么区别

    什么叫侧面指纹识别_屏下指纹和侧面指纹触控有什么区别指纹识别作为一种生物识别方案,在手机上的应用为用户日常使用带来了极大的便利,从解锁手机到应用加密再到支付等场景,原本需要输密码的繁琐场景如今按一下手指就行。随着手机的发展,指纹解锁也出现了不同的解决方案,比如OPPOK3所采用的目前主流的屏下指纹解锁,以及荣耀9X所采用侧面指纹解锁。那么在实际应用场景中,哪种指纹识别更实用呢?采用了屏幕指纹的OPPOK3与侧面指纹的荣耀9X都有着真全面屏的设计…

    2022年6月30日
    42
  • 新visio2019专业版最新功能和激活密钥![通俗易懂]

    新visio2019专业版最新功能和激活密钥![通俗易懂]visio2019作为目前最流行的流程图和图标制作软件,它在包含所有Visio2016版本中的所有功能之外,还添加了下面几个新变化:1.组织结构图,头脑风暴和SDL模板具有新的入门图,可帮助您快速启动和运行。2.添加了新的数据库模型图模板准确地将数据库建模为Visio图。无需加载项。3.可以为网站创建线框图。4.添加了一些新的UML工具。很多同学找不到visio2019专业版的官网下…

    2022年6月24日
    77
  • VMware虚拟机下Centos8 设置静态IP地址

    VMware虚拟机下Centos8设置静态IP地址,如何做?

    2022年2月16日
    92
  • Php面试问题_php面试常问面试题

    Php面试问题_php面试常问面试题1、css的定位有哪些方式?以及用法position在英文中表示“位置”的意思 它主要是用于实现对元素的定位在CSS中定位分为三种:position:fixed         固定定位position:relatvie      相对定位position:absolute      绝对定位position:static      无特殊定位 (默认值)。注意:   在使用定位属…

    2022年8月27日
    3
  • CloudSim资源调度「建议收藏」

    CloudSim资源调度「建议收藏」    本菜鸡的毕业设计选择的就是面向数据中心能耗优化的粒子群算法的设计与实现,别问我为啥选这个,我也不知道,在网上查询了很多之后发现也就GitHub上面就4个项目,好像也就第四能用。然后就是YouTube上面有一个印度小哥的视频,做了一个高大上的界面,用的InternetTopologyZoo做了一个界面,非常酷眩,然而没有源代码,全程是成果展示,心痛的要死。但是仅仅是云任务调度,而这…

    2022年10月13日
    0
  • 一系列令人敬畏的.NET核心库,工具,框架和软件[通俗易懂]

    一系列令人敬畏的.NET核心库,工具,框架和软件[通俗易懂]内容一般框架,库和工具API应用框架应用模板身份验证和授权Blockchain博特构建自动化捆绑和缩小高速缓存CMS代码分析和指标压缩编译器,管道工和语言加密数据库数据库驱动数据库工具和实用程序日期和时间分布式计算电子商务和支付例外功能编程图像GUIIDE国际化国际奥林匹克委…

    2022年7月16日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号