Android实现短信验证码自动填写功能

本实例为大家分享了Android实现短信验证码自动填写功能,供大家参考,具体内容如下

实现思路很简单:

1、在需要输入验证码的Activity代码注册监听短信的广播 2、拦截短信,获取其中的验证码 3、回写到EditText

private SmsReciver smsReciver = new SmsReciver(); /** 收到短信Action **/ String ACTION_SMS_RECIVER = "android.provider.Telephony.SMS_RECEIVED"; /** * 注册广播接受者监听短信验证码自动回写 可在onCreate()中进行注册; */ private void registSmsReciver() { IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_SMS_RECIVER); // 设置优先级 不然监听不到短信 filter.setPriority(1000); registerReceiver(smsReciver, filter); } /** * 短信广播接受者 用户监听短信,自动填写验证码 */ private class SmsReciver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Object[] objs = (Object[]) intent.getExtras().get("pdus"); for (Object obj : objs) { yte[] pdu = (byte[]) obj; SmsMessage sms = SmsMessage.createFromPdu(pdu); // 短信的内容 String message = sms.getMessageBody(); Log.d("log", "message " + message); // 短息的手机号,如果你们公司发送验证码的号码是固定的这里可以进行一个号码的校验 String from = sms.getOriginatingAddress(); Log.d("log", "from " + from); analysisVerify(message); } } } /** * 解析短信并且回写 这里解析的是纯数字的短信,如果小伙伴的验证码包含字母的话,可用正则替换 * * @param message */ private void analysisVerify(String message) { char[] msgs = message.toCharArray(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < msgs.length; i++) { if ('0' <= msgs[i] && msgs[i] <= '9') { sb.append(msgs[i]); } } mEtVerifyCode.setText(sb.toString()); } @Override protected void onDestroy() { super.onDestroy(); // 取消短信广播注册 if (smsReciver != null) { unregisterReceiver(smsReciver); smsReciver = null; } }

可以看到代码逻辑比较简单,需要注意的有几点。我们这里用的代码注册广播,之所以不采取全局广播的形式原因有两天,在高版本的api,注册全局的短信监听会失效。而且就业务而言,我们监听短信只会在输入验证码的Activity里面才会用到,采用代码注册的形式,在当前Activity销毁的时候取消广播注册,更符合我们的预期,提高应用的性能。

第二个需要注意的问题是优先级的问题。

filter.setPriority(1000);

可以看到,我们这里把优先级设置成了最大。保证我们的应用能够尽可能的接受到短信。注意,我使用的是“尽可能”,也就是说我们不能保证短信自动填写一定能执行成功,有个小伙伴可能会问,我们不是把优先级设置成了最高了吗?

为什么还不能保证了?

原因其实很简单,你能把监听短信的优先级设置成最大,同样的,其他的应用也能把短信监听的优先级设置成最大。比如说,你的手机安装有360安全卫士,把你们公司的验证码视为垃圾短信拦截了,这个时候短信拦截就失效了。

以上就是本文的全部内容,希望对大家的学习有所帮助。

时间: 2024-10-23 04:44:49

Android实现短信验证码自动填写功能的相关文章

Android实现短信验证码自动填写功能_Android

android应用经常会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,通常,用户收到短信需要最小化应用去查看短信再填入验证码,必然比较麻烦,因此有必要能够自动获得下发的短信验证码,方便了用户的操作,用户体验更好. 原理讲解: 主要就是实时获取短信信息.涉及到ContentObserver类的使用.使用ContentProvider来监听短信数据库的变化,在自定义的ContentObserver当中实现onChange的方法进行监听特定手机号的短信,然后进行信息截取在填

Android利用CursorLoader实现短信验证码自动填写_Android

概述 Android上实现短信验证码自动填写,常用的有两种方式.一种是利用BroadCastReceiver,还有一种是监听手机上短信数据库的变化.利用BroadCastReceiver来实现会在一些情况下无效,最常见的就是手机上安装了具有垃圾短信拦截功能的软件的情况下,短信验证码自动填写无效.所以,现在一般会选用监听数据库内容变化的方式来实现短信验证码自动填写. 网上对于利用监听数据库内容变化来实现短信验证码自动填写的文章也很多,主要分为一下步骤: 1. 继承ContentObserver实现

Android利用CursorLoader实现短信验证码自动填写

概述 Android上实现短信验证码自动填写,常用的有两种方式.一种是利用BroadCastReceiver,还有一种是监听手机上短信数据库的变化.利用BroadCastReceiver来实现会在一些情况下无效,最常见的就是手机上安装了具有垃圾短信拦截功能的软件的情况下,短信验证码自动填写无效.所以,现在一般会选用监听数据库内容变化的方式来实现短信验证码自动填写. 网上对于利用监听数据库内容变化来实现短信验证码自动填写的文章也很多,主要分为一下步骤: 1. 继承ContentObserver实现

Android 短信验证码自动填写

Android 短信验证码自动填写 1.自定义Observer监听短信数据库变化(注意添加短信权限) import android.app.Activity; import android.content.ContentResolver; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Handler; import

Android短信验证码自动填充功能_Android

笔者发现在很多应用中,都有自动获取验证码的功能:点击获取验证码按钮,收到短信,当前应用不需要退出程序就可以获取到短信中的验证码,并自动填充.觉得这种用户体验很赞,无须用户在短信和App之间来回切换,这个功能是如何实现的呢?其实很简单,就是用到了Android中的一个叫ContentObserver的东西,下面手动简单实现一个~~~ 一.开发ContentObserver 主要是用来监听收件箱的内容,一旦有新消息过来,就去监听是否是我想要的那个号码发过来的短信,如果是,就直接用正则表达式截取 /*

Android短信验证码自动填充功能

笔者发现在很多应用中,都有自动获取验证码的功能:点击获取验证码按钮,收到短信,当前应用不需要退出程序就可以获取到短信中的验证码,并自动填充.觉得这种用户体验很赞,无须用户在短信和App之间来回切换,这个功能是如何实现的呢?其实很简单,就是用到了Android中的一个叫ContentObserver的东西,下面手动简单实现一个~~~ 一.开发ContentObserver 主要是用来监听收件箱的内容,一旦有新消息过来,就去监听是否是我想要的那个号码发过来的短信,如果是,就直接用正则表达式截取 /*

Android实现短信验证码自动拦截读取功能_Android

知识准备: 1.观察者模式的理解[文章稍后来到~~]  2.Android的Cursor使用[Android基础]  3.正则表达式使用[Java基础]  4.Handler使用[Android基础]  代码整理: MainActivity.java import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.suppo

Android实现短信验证码自动拦截读取功能

知识准备:  1.观察者模式的理解[文章稍后来到~~]  2.Android的Cursor使用[Android基础]  3.正则表达式使用[Java基础]  4.Handler使用[Android基础] 代码整理: MainActivity.java import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.suppo

Android实现短信验证码获取自动填写功能(详细版)_Android

现在的应用在注册登录或者修改密码中都用到了短信验证码,那在android中是如何实现获取短信验证码并自动填写的呢? 首先,需要要在manifest中注册接收和读取短信的权限:  <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> <uses-permission android:name="android.permission.READ