Android自动填充短信验证码[通俗易懂]

Android自动填充短信验证码[通俗易懂]前言短信验证码获取并自动填写现在已经成为一个人性化App的标配了,这篇文章将实现一个短信验证码获取并自动填写的demo。其实就是读取指定号码的短信并提取出验证码,然后赋值给EditText显示。demo效果图:读取短信Android系统在接受到一条短信的时候会发出一条Action为android.provider.Telephony.SMS_RECEIVED的有序广播,因此我们读取短信的…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

短信验证码获取并自动填写现在已经成为一个人性化App的标配了,这篇文章将实现一个短信验证码获取并自动填写的demo。其实就是读取指定号码的短信并提取出验证码,然后赋值给EditText显示。
demo效果图:
在这里插入图片描述

读取短信

Android系统在接受到一条短信的时候会发出一条Action为android.provider.Telephony.SMS_RECEIVED的有序广播,因此我们读取短信的验证码只需要监听这个广播然后提取出短信中的验证码即可,如:

/** * Created by 程龙 on 2018/9/27. */ public class SMSBroadcastReceiver extends BroadcastReceiver { 
     private static final String TAG = "SMSBroadcastReceiver"; private OnReceiveSMSListener mOnReceiveSMSListener; public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED"; @Override public void onReceive(Context context, Intent intent) { 
     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(); Log.d(TAG,sender+""); //短信内容 String content = smsMessage.getDisplayMessageBody(); // 筛选 if ("短信发送方号码".equals(sender) && mOnReceiveSMSListener!= null) { 
     Pattern pattern = Pattern.compile("\\d+"); Matcher matcher = pattern.matcher(content); if(matcher.find()) { 
     mOnReceiveSMSListener.onReceived(matcher.group()); } abortBroadcast(); } } } } /** * 回调接口 */ public interface OnReceiveSMSListener { 
     void onReceived(String message); } public void setOnReceiveSMSListener(OnReceiveSMSListener onReceiveSMSListener) { 
     mOnReceiveSMSListener = onReceiveSMSListener; } } 

代码注释比较清楚,通过SmsMessage对象可以得到短信的发送号码,短信内容及相关信息。当短信号码为你要读取的短信发送方号码时用正则表达式提取出短信内容的验证码,然后通过调用监听器的回调方法更新相应的UI。这里只需将短信验证发送方号码替换成相应的号码即可,如“106903561008710”为腾讯云注册发送的短信号码。

通常,我们只会在注册或登录页面读取短信验证码,所以,我们采用动态注册广播的方式注册这个广播,如:

// 注册广播 IntentFilter intentFilter = new IntentFilter(SMSBroadcastReceiver.SMS_RECEIVED_ACTION); // 设置优先级 intentFilter.setPriority(Integer.MAX_VALUE); registerReceiver(mSMSBroadcastReceiver,intentFilter); 

取消注册

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

MainActivity.java的代码为:

public class MainActivity extends AppCompatActivity implements SMSBroadcastReceiver.OnReceiveSMSListener { 
     private SMSBroadcastReceiver mSMSBroadcastReceiver = new SMSBroadcastReceiver(); private EditText mEt_code; @Override protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEt_code = (EditText) findViewById(R.id.et_code); mSMSBroadcastReceiver.setOnReceiveSMSListener(this); // 注册广播 IntentFilter intentFilter = new IntentFilter(SMSBroadcastReceiver.SMS_RECEIVED_ACTION); // 设置优先级 intentFilter.setPriority(Integer.MAX_VALUE); registerReceiver(mSMSBroadcastReceiver,intentFilter); } @Override public void onReceived(String message) { 
     mEt_code.setText(message+""); } @Override protected void onDestroy() { 
     super.onDestroy(); unregisterReceiver(mSMSBroadcastReceiver); } } 

这个demo的代码实现比较简单,就是监听广播,读取收到的短信,然后过滤筛选出我们要的验证码短信,再用正则表达式提取到验证码设置给EditText显示即可。大家下载或者自己编写这个demo并更改发送方短信号码运行,然后可以找个注册网址或是模拟验证码短信进行测试~

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

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

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


相关推荐

  • 提高机器学习模型准确率的八大方法

    提高机器学习模型准确率的八大方法

    2021年11月21日
    42
  • 自定义 DataLoader[通俗易懂]

    自定义 DataLoader[通俗易懂]自定义DataLoader如数据输入一文所介绍,OneFlow支持两种数据加载方式:直接使用NumPy数据或者使用DataLoader及其相关算子。在大型工业场景下,数据加载容易成为训练的瓶颈。在其它的框架中,数据加载流水线往往作为单独的模块存在,需要针对不同场景进行调整,通用性不高。在OneFlow中,DataLoader及相关预处理算子,与其它普通算子地位等同,可以享受与其它算子一样的流水加速效果,轻松解决大规模数据加载的痛点。在OneFlow中使用DataLoader

    2022年5月23日
    99
  • 基于python的情感分析案例_约翰肯尼格的悲伤词典

    基于python的情感分析案例_约翰肯尼格的悲伤词典情感分析是大数据时代常见的一种分析方法,多用于对产品评论的情感挖掘,以探究顾客的满意度程度。在做情感分析时,有两种途径:一种是基于情感词典的分析方法,一种是基于机器学习的方法,两者各有利弊。在此,笔者主要想跟大家分享基于python平台利用情感词典做情感分析的方法。本文主要参考https://blog.csdn.net/lom9357bye/article/details/79058946这篇文章,在此文章中,博主用一句简单的语句“我今天很高兴也非常开心”向我们清楚的展示的利用情感词典做情感分析的方法,这

    2022年8月23日
    3
  • app漏洞检测方法有哪些_安卓app漏洞挖掘

    app漏洞检测方法有哪些_安卓app漏洞挖掘根据国内专业PP漏洞检测平台爱内测(www.detect.cn)介绍,目前关于APP漏洞检测有以下6种功能检测方法: 组件安全检测对四大组件和WebView的规范使用检测分析,发现因为程序中不规范使用导致的组件漏洞。 代码安全检测对dex和so库以及第三方加载库的代码的安全处理进行检测分析,发现代码被反编译和激活成功教程的漏洞。 内存安全检测检测APP运行过程中的内存处理和保护机制进行检测分析…

    2025年7月10日
    4
  • 预训练模型还要训练吗_多模态预训练模型

    预训练模型还要训练吗_多模态预训练模型若使用已保存好的镜像reid_mgn:v1,在本机上可按如下操作训练#1.进入已保存环境的镜像(reid_mgn:v1(8.48G)、pytorch/pytorch:1.0.1-cuda10.0-cudnn7-devel_mgnreid(6.37G))nvidia-dockerrun-it–rm-v/home/lc-deep/sdr:/home/personReID…

    2022年10月6日
    2
  • SSL工作原理

    SSL工作原理

    2021年12月7日
    42

发表回复

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

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