截取短信验证码,实现自动填写验证码
一个小功能实现短线验证码验自动填写功能。
拿到这个功能时,首先需要怎么去拦截获取手机短信。就用观察着来观察系统里的短消息的数据库的变化,“表“内容观察者,只要数据库发生变化,都会出发该ContentObserver 的派生类。
于是,首先需要一个SMSContentObserver的监听类:
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.database.CursorIndexOutOfBoundsException;
import android.net.Uri;
import android.os.Handler;
import net.panatrip.debugtoolbox.log.Log;import net.panatrip.biqu.manager.SMSManager;import java.lang.ref.WeakReference;//用来观察系统里短消息的数据库变化 ”表“内容观察者,只要信息数据库发生变化,都会触发该ContentObserver 派生类
public class SMSContentObserver extends ContentObserver {private static String TAG = "SMSContentObserver";private WeakReference<Context> mContext;private Handler mHandler; //更新UI线程public SMSContentObserver(Context context, Handler handler) {super(handler);mContext = new WeakReference<Context>(context);mHandler = handler;}/*** 当所监听的Uri发生改变时,就会回调此方法** @param selfChange 此值意义不大 一般情况下该回调值false*/@Overridepublic void onChange(boolean selfChange) {//查询收件箱里的内容Uri outSMSUri = Uri.parse("content://sms/inbox");Cursor c = mContext.get().getContentResolver().query(outSMSUri, null, null, null,"date desc");if (c != null && c.moveToFirst()) {try{Log.e(TAG, "the number of send is" + c.getString(c.getColumnIndex("address")) + " " + c.getString(c.getColumnIndex("body")));StringBuilder sb = new StringBuilder();sb.append(c.getString(c.getColumnIndex("body")));mHandler.obtainMessage(SMSManager.MSG_OUTBOXCONTENT, sb.toString()).sendToTarget();}catch (CursorIndexOutOfBoundsException ex){ex.printStackTrace();}finally {c.close();}}}}
然后,我们需要一个接口回调去把拦截消息显示出去,需要一个开关去接受消息和关闭消息
public class SMSManager {private SMSContentObserver smsContentObserver;public static int MSG_OUTBOXCONTENT = 2;public static String ACTION = "android.provider.Telephony.SMS_RECEIVED";private static volatile SMSManager _instance = null;private IntentFilter intentFilter;private boolean startFlag = false;private MessageListener mMessageListener;//回调接口public interface MessageListener {public void onReceived(String message);}private Handler mHandler = new Handler() {public void handleMessage(Message msg) {String outbox = (String) msg.obj;mMessageListener.onReceived(outbox);}};private SMSManager(){}public static SMSManager getInstance() {if (_instance == null) {synchronized (SMSManager.class) {if (_instance == null) {_instance = new SMSManager();}}}return _instance;}/*** 开始接收** @param context*/public void startReceiveSMS(Context context,MessageListener listener) {smsContentObserver = new SMSContentObserver(context, mHandler);mMessageListener = listener;Uri smsUri = Uri.parse("content://sms");context.getContentResolver().registerContentObserver(smsUri, true,smsContentObserver );}/*** 停止接收** @param context*/public void stopReceiveSMS(Context context) {if(smsContentObserver!=null) {context.getContentResolver().unregisterContentObserver(smsContentObserver);smsContentObserver=null;}}
页面的调用
SMSManager.getInstance().startReceiveSMS(getApplicationContext(), new SMSManager.MessageListener() {@Override public void onReceived(String message) {String code = BQUtils.patternCode(message); etCode.setText(code); }}); }
截取短信验证码,实现自动填写验证码相关推荐
- 快速实现自动填写验证码的功能
今日科技快讯 近日,Uber的创始人卡拉尼克终于被迫离职了.自进入2017年以来,Uber的麻烦事就没有断过.先是由于支持特朗普的限制移民政策而成为众矢之的,接着又被前女性员工控诉在Uber时长期受到 ...
- 如何实现游戏陪玩系统源码中注册验证码的自动填写功能
新用户在注册登录游戏陪玩系统源码时往往需要进行短信验证,如果没有验证码自动填写功能则需要用户自行切换软件进行填写,无异于增添了许多步骤,会影响到用户的使用体验,所以今天我们主要来说一说如何实现游戏陪玩 ...
- java对接阿里云短信服务详解(验证码,推广短信,通知短信)
前言 小前提: - java:springboot框架,maven版本管理. - 阿里云:有账号,已经进行实名认证. java对接阿里云短信服务详解(验证码,推广短信,通知短信) 前言 1. 登录阿里 ...
- 国外短信平台收不到验证码,怎么解决?
背景:国外短信平台,经常遇到验证码收不到的情况 如果您是一家海外企业或跨国公司,那么国外短信平台的使用一定不可或缺.无论您是要给客户发送营销信息,还是给员工发送公司通知,使用国外短信平台都能帮助您实现 ...
- 创宇滤镜|API防刷|短信邮件接口防刷|验证码防刷|搜索防刷 - 知道创宇云安全
创宇滤镜|API防刷|短信邮件接口防刷|验证码防刷|搜索防刷 - 知道创宇云安全 创宇滤镜|API防刷|短信邮件接口防刷|验证码防刷|搜索防刷 - 知道创宇云安全 posted on 2017-02- ...
- 爬虫学习_selenium自动填写验证码
爬虫学习_自动填写验证码 介绍一哈 项目 第一步 打开网站 第二步 获取验证码图片 第二步 获取验证码图片 第三步 识别验证码 结束 完整代码 介绍一哈 最近在跟着静觅大神.............. ...
- java实现自动识别验证码并自动填写提交(调用百度通用文字识别OCR接口+大图找小图之图像识别算法+模拟鼠标键盘动作)
一.使用的技术: 1.调用百度AI通用文字识别OCR接口 2.图像识别算法 二.实现方案与步骤: 1.得到验证码的图片的坐标:先将验证码截图,然后再对整个电脑屏幕截图,通过大图找小图的方法,计算出小图 ...
- Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自动填入功能结合实例)
用户注册或者找回密码时一般会用到短信验证功能,这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注册用户.获取SDK 大家可以 ...
- python读取手机短信信息_python 自动获取手机短信验证码
需要一个有权限的 APK 在手机实时存储短信到手机内存 /sdcard/smslog.txt 里(外部SD卡也可以知道能通过adb命令访问到): /***** ...... try { long ti ...
最新文章
- POW矿池挖空块原理和解决方案
- TX2 安装QT Creator
- S9306开启web功能!
- FLutter入门:异步加载组件FutureBuilder
- java 解析xls 文件_java简单解析xls文件的方法示例【读取和写入】
- 剑指offer面试题41. 数据流中的中位数(二分查找)
- PHP------- 继承
- 苹果ios啸叫频点测试软件_啸叫抑制之陷波法
- 安装win11,跳过TPM2.0限制
- 矩阵快速幂 斐波那契数列
- java 画趋势图,java画曲线图
- unity粒子系统碰撞
- 怎么制作一个笔试题库?会计笔试题库中的题型分析?
- A股数据分析之收集数据:股票列表和股价
- logistic回归报错问题:Warning messages: 1: glm.fit:算法没有聚合 2: glm.fit:拟合機率算出来是数值零或一
- Arduino-ESP8266检测温湿度上传阿里云
- vue 组件数据共享_Vue共享组件
- C语言 二叉树的相关操作
- C语言单链表入门讲解(附例题)
- 计算机设计大赛-校赛展示