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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 卷积神经网络如何进行图像识别的

    卷积神经网络如何进行图像识别的在机器视觉的概念中,图像识别是指软件具有分辨图片中的人物、位置、物体、动作以及笔迹的能力。计算机可以应用机器视觉技巧,结合人工智能以及摄像机来进行图像识别。 什么是图像识别?为什么要进行图像识别? 在机器视觉的概念中,图像识别是指软件具有分辨图片中的人物、位置、物体、动作以及笔迹的能力。计算机可以应用机器视觉技巧,结合人工智能以及摄像机来进行图像识别。 …

    2022年6月10日
    39
  • unity 3D_unitywebrequest

    unity 3D_unitywebrequest感觉Restsharp和unity3D提供的WWW有很多相似的地方,但是unity3D的WWW分装了跟多的东西,比如TextureMovieTexture等等: 互联网上关于.NET(C#)的HTTP相关的辅助类还是比较多的,这里再为大家推荐一个.NET的HTTP辅助类,它叫RestSharp。RestSharp是一个轻量的,不依赖任何第三方的组件或者类库的H

    2025年10月4日
    3
  • PTA 列车调度 python

    PTA 列车调度 python火车调度PTApython实现两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?

    2022年7月14日
    17
  • linux流量分析「建议收藏」

    linux流量分析「建议收藏」目录1.案例分析2.命令详解1.案例分析查看流量端口号sudoiftop-i-Pn->显示主机ip和主机名 N->显示端口号或者端口服务名称 P->暂定或者继续根据端口号查询进程netstat-nap|grepport查看进程信息:ps-aux|greppid2.命令详解2.1iftop2.1.1运行if…

    2022年5月8日
    68
  • codeif idea_ps插件安装在什么位置

    codeif idea_ps插件安装在什么位置1、点击File->Settings->Plugins->设置->InstallPluginfromDisk2、选中MappingSearch.jar3、重启IDEA,在Help菜单下有个“MappingSearch映射搜索”选项表示安装成功此后就可以使用插件的变量名搜索功能,右键CodeIf,则会弹出许多适合的变量名。以后就不用头秃的想变量名问题了。附上jar包下载地址:https://download.csdn.net/download/qq_44752641/1

    2022年9月21日
    2
  • 操作系统分为用户态和内核态_内核态 用户态

    操作系统分为用户态和内核态_内核态 用户态这节课给你带来了一道非常经典的面试题目:用户态线程和内核态线程有什么区别?这是一个组合型的问题,由很多小问题组装而成,比如:用户态和内核态是什么?用户级线程和内核级线程是一个怎样的对应关系?内核响应系统调用是一个怎样的过程?……而且这个问题还关联到了我们后面要学习的多线程、I/O模型、网络优化等。所以这是一道很不错的面试题目,它不是简单考某个概念,而是通过让求职者比较两种东西,从而考察你对知识整体的认知和理解。今天就请你顺着这个问题,深入学习内核的工作机制,和我一起去理解用户

    2025年12月12日
    4

发表回复

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

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