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


相关推荐

  • 路由懒加载详解[通俗易懂]

    路由懒加载详解[通俗易懂]1.什么是路由懒加载?整个网页默认是刚打开就去加载所有页面,路由懒加载就是只加载你当前点击的那个模块。按需去加载路由对应的资源,提高首屏加载速度(tip:首页不用设置懒加载,而且一个页面加载过后再次访问不会重复加载)。实现原理:将路由相关的组件,不再直接导入了,而是改写成异步组件的写法,只有当函数被调用的时候,才去加载对应的组件内容。2.传统路由配置:importVuefrom’vue’importVueRouterfrom’vue-router’importLogi

    2022年10月7日
    1
  • Windows server 2003 ××× 配置

    Windows server 2003 ××× 配置

    2021年8月1日
    49
  • DotNet开发的微商分销系统源码,微信三级分销系统源码

    DotNet开发的微商分销系统源码,微信三级分销系统源码DotNet开发的微商分销系统源码,微信三级分销系统源码开发环境:vs2017+sqlserver2012部署环境:iis7,.netframework4.0,应用程序池为4.0经典模式。安装请注意:1、将安装目录:UI.Web拷贝到服务器上,搭建站点;1、打开网站xxx.com域名/Installer/Default.aspx,按照安装提示一步一步走(傻瓜式的安装)2、安装完毕后,请打开web.config文件,找到节点:CurDomainUrl,设置vlaue的值…

    2022年5月17日
    35
  • Apifox(2)快速上手apifox

    Apifox(2)快速上手apifox快速上手使用场景Apifox是接口管理、开发、测试全流程集成工具,使用受众为整个研发技术团队,主要使用者为前端开发、后端开发和测试人员。前端开发接口文档管理接口数据Mock接口调试前

    2022年7月30日
    8
  • 代理服务器调研[通俗易懂]

    代理服务器调研[通俗易懂]1.名词解释:代理服务器是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用。代理服务器大多被用来连接国际互联网和局域网。2.相关概念(1)代理也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保

    2022年5月5日
    36
  • MFC中使用CreateThread创建线程[通俗易懂]

    MFC中使用CreateThread创建线程[通俗易懂]HANDLEm_hListenThread=CreateThread(NULL,0,ThreadProc,this,0,NULL);DOWRDWINAPIThreadProc(LPVOIDlpParameter){xxxx*pxxx=(xxxx*)lpParameter;while(TRUE){//dosomethingSleep

    2022年7月27日
    1

发表回复

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

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