Android监听短信获取验证码

android 监听短信并获取验证码 最近想给 ileberry 添加自动获取短信验证码的功能,让注册流程更加友好,在网上搜索了一些资料,主要的实现方法有两种。 第一:实现广播 BroadCastReceiver 来监听收件箱,在需要监听的地方注册广播监听,然后再Activity 结束的地方unregiste。 第二:利用 ContentObserver 来监听短信数据库,当有指定的新信息到来时调用相应的方法来实现信息内容的 阅读详情

现在大部分的注册都是采用手机号码注册的,都要获取验证码进行验证才能注册,为了减少用户的操作,有些应用就会做自动填充验证码的功能。
需求有了,现在就看怎么实现了,有2种方法能监听到收到的短信,一种是通过广播,但是这种方式可能不是很可靠,因为会被有些应用拦截掉。所以这里采用第二种方式,利用ContentObserver,直接上代码。

public class SmsContent extends ContentObserver {
    private ContentResolver mContentResolver=null;
    SmsGetListener smsGetListener;
    Uri inUri = Uri.parse("content://sms/inbox");

    public SmsContent(Context context, Handler handler, SmsGetListener smsGetListener) {
        super(handler);
        mContentResolver = context.getContentResolver();
        this.smsGetListener = smsGetListener;
    }

    @Override
    public void onChange(boolean selfChange, Uri uri) {
        try {
            Cursor cursor = mContentResolver.query(inUri, new String[]{"_id", "address", "read", "body"}, null, null, "date DESC LIMIT 1");

            if (null != cursor && cursor.moveToFirst()) {
                int smsbodyColumn = cursor.getColumnIndex("body");
                String smsBody = cursor.getString(smsbodyColumn);
                Log.d("TimWang", "onChange body : " + smsBody);
                String vertiCode = getDynamicCode(smsBody);
                if (!TextUtils.isEmpty(vertiCode)) {
                    if (smsGetListener != null) {
                        smsGetListener.OnGetSms(vertiCode);
                    }
//                    try {
//                        ContentValues values = new ContentValues();
//                        values.put("read", "0"); // 修改短信为已读
//                        int id = cursor.getInt(cursor.getColumnIndex("_id"));
//                        Uri updateIdUri = ContentUris.withAppendedId(inUri, id);
//                        mContentResolver.update(updateIdUri, values, null, null);
//                    } catch (Exception e) {
//                        e.printStackTrace();
//                    }
                }
            }
            if (null != cursor ) {
                cursor.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取大于4位数字验证码
     * @param str 短信内容
     * @return 截取得到的大于等于4位动态密码
     */
    private String getDynamicCode(String str) {
        Pattern continuousNumberPattern = Pattern.compile("[0-9]{4,}");
        Matcher m = continuousNumberPattern.matcher(str);
        String vertiCode = "";
        while (m.find()) {
            vertiCode = m.group();
        }
        return vertiCode;
    }


    public interface SmsGetListener{
        void OnGetSms(String sms);
    }
}

这是自定义的ContentObserver,然后就在需要的地方使用。

首先在用的地方实现SmsGetListener接口

@Override
    public void OnGetSms(String sms) {
        mAuthCode.setText(sms);
    }

在onCreate注册

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register);
        initView();
        smsContent = new SmsContent(this,new Hanlder(),this);
        getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, smsContent);
    }

在onDestroy反注册

@Override
    protected void onDestroy() {
        super.onDestroy();
        getContentResolver().unregisterContentObserver(smsContent);
    }

完事。

android 读取短信中的验证码(验证码登录) android 读取短信中的验证码(验证码登录) 1.获取读取短信的权限 <uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-permission android:name="android.permission.READ_SMS" /> 2.获取短信验证码 布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout 阅读详情

相关推荐

Android短信验证码监听解决onChange多次调用的方法

先说一句:MIUI请放弃治疗!这里给个传送门: MIUI通知类短信权限的坑 识别短信验证码并提取还是挺常见的一个需求。所要解决的问题主要有: 1、如何监听 2、如何提取短信中的验证码 3、监听多次调用问题 直接看下面代码吧,很明了。需要注意的点有就是onChange会多次调用。其实打Log就看的出了,收到一条短信会调用两次onChange,Log结果如下: mUri===content://sms/raw/20 mUri===content://sms/inbox/20 安卓7.0以上系统,点击标记为已读,也会调用一次 mUri===content://sms 收到一条短信都是uri后面都

Android 获取短信验证码并自动填充(踩坑小米、荣耀、OPPO、华为)

安卓短信自动填充踩坑:小米短信权限问题,荣耀无法接收广播问题,OPPO收不到广播、读取短信不准确问题

silencefly的博客 7074

VM与欧姆龙PLC通讯设置实战:Fins TCP/UDP协议详解

本文详细解析了VM(VisionMaster)与欧姆龙PLC通过Fins TCP/UDP协议进行通讯的实战设置。内容涵盖网络配置、协议选择(TCP可靠性与UDP实时性)、VM端地址映射与数据点添加、以及数据接收解析流程,并提供了常见错误排查与高级调试技巧,帮助视觉与自动化工程师快速实现稳定可靠的工业通讯集成。

weixin_29172963的博客 327

android读取短信获取验证码功能实现

一般在账号注册时我们会用到自动读取短信里的随机验证码,增强用户体验 ① 短信一共有以下的权限                                      ②在activity中注册内容观察者监听短信的变化     public class MainActivity extends Activity {     @Override     pr

qq_20957417的专栏 916

PCIe 物理层(Physical Layer)详解

PCIe物理层关键技术解析 PCIe物理层作为协议栈底层核心,承担着比特流传输、链路训练与电气特性管理等关键功能。该层采用分层架构,包含逻辑物理层(负责编解码/加扰)和电气物理层(处理信号收发)。关键技术亮点包括: 智能链路管理:通过LTSSM状态机实现11种状态转换,涵盖链路检测(Detect)、协商(Polling/Configuration)、功耗管理(L0s/L1)等全生命周期控制 高效编码方案:Gen1/Gen2采用8b/10b编码(20%开销),Gen3+升级为128b/130b(仅1.5%开销

珂珂可爱多 726

【商业化】【msix打包】Python 应用打包为 MSIX 的正确流程:入口点问题与解决方案

发现用msix打包工具打包python做的exe时总找不到程序入口点,后来理了一下才发现自己误会了,需要先生成一个基本的setup.exe,msix的打包是基于这个初始的安装程序进行的。只需要点击Buile-》Compile,然后Open Output Folder就可以得到exe安装程序了。可以使用免费工具inno setup来创建初始安装包。其中{group}这样的变量会自动匹配,不用自己指定。如果点击Run会运行安装程序。

每日出拳老爷子的博客 1103

Android开发 亲测可用--多种方式获取手机短信验证码自动填入

Android开发 监控获取手机验证码并自动复制到剪切板 Android开发 利用广播接收器,监控获取手机验证码并自动复制到剪切板,用户可粘贴填入软件。写处理逻辑 可以加线程,用处多多,随缘脑补哦! AndroidManifest.xml添加权限及广播服务 <!--发送接收读取短信的权限 都加上吧--> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permi

杰孑的博客 7598

OpenEuler22.04 快速部署Docker:华为云镜像源配置指南

本文详细介绍了在OpenEuler 22.04系统上快速部署Docker的完整流程。针对系统默认源版本老旧的问题,重点讲解了如何配置华为云镜像源以加速安装,并涵盖Docker引擎、Docker Compose的安装、服务启动验证、权限配置、镜像加速等核心步骤与常见问题排查,帮助用户高效搭建稳定的容器化开发环境。

http9protocoller的博客 173

Android 监听短信(同时监听广播和数据库)

暗扣,强烈谴责这种侵害用户利益的行为。。。 下面给大家介绍Android暗扣原理.......  Android4.4以下的系统玩游戏就要小心了哈 暗扣方式之一:短信订购,即监听--------拦截------------处理短信。 暗扣方式之二:模拟人为操作(又叫模拟流量),通过后台程序代码模拟人的点击行为,暗自给用户订购业务,由运营商收取你的费用,当然这其中也需要涉及监听/拦截/处理短信

JDazy的博客 1021

020、Sensor 供电设计:AVDD、DVDD、IOVDD 的上电时序与纹波要求

本文总结了图像传感器(Sensor)供电设计中的关键要点与常见问题:1. 三路供电特性差异:AVDD(模拟供电)对纹波最敏感(通常<30mVpp),DVDD需应对大电流瞬态变化,IOVDD需满足MIPI接口电压稳定要求。2. 上电时序至关重要,应遵循"模拟→数字→IO"的启动顺序,时序偏差可能导致初始化失败。3. 纹波控制需合理选择电容组合(如10μF+0.1μF),注意布局走线及电容ESR/ESL特性。4. 调试建议使用示波器多通道测量时序和纹波,重点关注传感器启动瞬间的电源特性。5. 经验教训包括预留设

sundong_81的博客 523

基于情感分析+聚类分析+LDA主题分析对服装产品类的消费者评论分析

本研究旨在通过对服装产品类的消费者评论进行综合分析,为企业提供更全面、更深入的市场洞察和决策支持。同时,本研究的方法和结果也可以为其他领域的消费者评论分析提供借鉴和参考。

m0_64336780的博客 2万+

(七)android开发中两种方式监听短信的原理和实现

一、监听短信的两种方式的简介 Android程序开发中,有两种方式监听短信内容:一、接收系统的短信广播;二、应用观察者模式,监听短信数据库。 第一种方式接收系统的短信广播:A、这种方式只对新收到的短消息有效,运行代码,并不会读取收件箱中已读或未读的消息,只有当收到新来的短消息时,才会执行onReceive()方法。 ...

a7m8111的博客 836

2ED2410-EM:12v / 24v智能模拟高侧MOSFET栅极驱动器

12v / 24v智能模拟高侧MOSFET栅极驱动器。2ED2410-EM具有输入CPP和CPN的电压比较器。该比较器可用于基于任何模拟电压触发SAFESTATE模式,甚至是外部电压2ED2410-EM。CPP为比较器的正输入,CPN为负输入。VcPREF可以通过微控制器进行调节,也可以通过板载电源芯片(如英飞凌SBC)或简单的分压器在限制VcP(REF)内进行固定,以保持稳定性。使用此比较器允许2ED2410-EM进入SAFESTATE并独立于微控制器关闭MOSFET。

让学习成为一种习惯 2188

【android】利用ContentObserver监听短信来获取验证码

我们知道,可以通过注册广播的方法来读取短信,进而获取验证码,但实际应用起来是会有问题的,因为短信的广播是有序广播,假如有其他应用先捕获广播并终止传递,那么我们就永远也收不到这条短信变化的广播了。 所以,本文介绍的是一种更好的办法————————利用ContentObserver监听短信来获取验证码 先来点介绍性文字吧。 “ContentObserver——内容观察者,目的是观察(

u011494050的专栏 3851

华为云计算——FusionCompute创建虚拟机

华为云计算——FusionCompute创建虚拟机

jks212454的博客 3676

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android自动读取短信验证码

实现自动获取手机的短信验证码,原理通过监听短信数据库的变化来解析短信,获取验证码。 1.建立一个监听数据库的类 import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.database.ContentObserver; impor

产品改变世界,技术驱动未来 935

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android 短信验证码自动填写

今天看到一篇文章关于短信验证码自动填写的感觉不错,这里记录一下:       其实,实现短信验证自动填写,就是监听短信数据库,当数据库信息有变化时,选择性的获取信息。下面是github上看到的demo,作者实现了一个类库,封装的挺好,可以参考一下:      https://github.com/Robin-jiangyufeng/SmsObserverForAndroid

不系之舟王的专栏 507

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android多条短信监听不到,Android短信验证码监听,解决onChange多次调用

先说一句:MIUI请放弃治疗!这里给个传送门:MIUI通知类短信权限的坑识别短信验证码并提取还是挺常见的一个需求。所要解决的问题主要有:1、如何监听2、如何提取短信中的验证码3、监听多次调用问题直接看下面代码吧,很明了。需要注意的点有就是onChange会多次调用。其实打Log就看的出了,收到一条短信会调用两次onChange,Log结果如下:mUri===content://sms/raw/20...

weixin_29204205的博客 639

android自动获取短信验证码

 前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码。 主要就是实时获取短信信息。

struggling的专栏 515

仿照支付宝等——自动获取短信中的验证码

仿照淘宝支付宝等,自动获取服务器端fang

2762

Android获取短信验证码并自动填充的两种方式

有些项目为了方便客户操作,减去客户输入短信验证码的时间,会要求安卓app能够获取收到的短信验证码并自动填充到输入框。所以,我整理了安卓获取短信验证码并自动填充输入框的两种方法,而且正式在项目中使用并无bug。        一:监听短信库的变化,获取收到的短信内容,并通过正则表达式取出数字验证码填充到输入框中。代码如下:        public class ObtainSmsVerifyC

dwj611的博客 1万+
上一篇: Android应用程序的资源选择规则
下一篇: 排序算法-插入排序
艾寨兮
博客等级 码龄14年 1粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值