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年7月25日 下午6:16
下一篇 2022年7月25日 下午6:36


相关推荐

  • 002.AnyCast技术浅析

    002.AnyCast技术浅析  一常见通信方式    1.1UniCastAnyCast    UniCast,即单播,指网络中一个节点与另一个节点之间需要建立一个单独的数据通道,从一个节点发出的信息只被一个节点收到,这种传送方式称为单播。即网络中从源向目的地转发单播流量的过程,IP地址与节点(主机)一一对应,单播流量地址唯一。每个节点必须分别对需要访问的节点发送单独的查询,而被访问节点必须向每个访问节点发送所申请的数…

    2022年5月23日
    41
  • java向上取整和向下取整,万字长文!

    java向上取整和向下取整,万字长文!一面:70分钟突击电话面试正思考着项目功能模块,阿里面试官打来了电话,开始了阿里一面。阿里面试官自我介绍,介绍了5分钟左右,部门的情况,主要的业务提问开始会哪些操作系统Linux会一点说一下操作指令,怎么看cpu,看进程,看端口操作系统进程间通信追问了一个信号相关的问题,我不知道了。io多路复用,说一说面向切面编程,说一说那些场景说说面向切面编程给一个场景,有很多方法,找出耗时长的方法spring的@autowired的作用mybatis和hibernate的区别C,C

    2022年6月21日
    30
  • java setvisible_java value

    java setvisible_java value如果查询返回多个值用list()方法publicvoidtestQuery(){Configurationconfig=newConfiguration().configure();SessionFactoryfactory=config.buildSessionFactory();//创建SessionFactorySessionsession=factory.open…

    2026年4月19日
    9
  • 51单片机入门教程(2)——实现流水灯

    51单片机入门教程(2)——实现流水灯51单片机入门教程(2)——实现流水灯一、搭建流水灯电路二、流水灯程序2.1延时程序2.2延时函数2.3按字节寻址2.4逻辑移位2.5条件判断一、搭建流水灯电路在Proteus中搭建流水灯电路如图二、流水灯程序我们可以把流水灯看作依次点亮若干个灯。程序如下:#include<reg52.h>sbitled1=P2^0;sbitled2=P2^1…

    2022年6月10日
    34
  • 1.26元撬动AI自动化:n8n与LLM的四个工作流变现策略实测

    1.26元撬动AI自动化:n8n与LLM的四个工作流变现策略实测

    2026年3月15日
    3
  • 浅谈欧拉函数[通俗易懂]

    浅谈欧拉函数[通俗易懂]前言欧拉函数听起来很高大上,但其实非常简单,也是NOIP里的一个基础知识,希望大家看完我的博客能有所理解。什么是欧拉函数欧拉函数是小于x的正整数中与x互质的数的个数,一般用φ(x)表示。特殊的,φ(1)=1。如何计算欧拉函数通式:φ(x)=x∏ni=1(1−1pi)∏i=1n(1−1pi)\prod_{i=1}^n{(1-\frac{1}{p_i})}φ(1)=1其…

    2022年8月22日
    11

发表回复

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

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