一个小功能实现短线验证码验自动填写功能。

拿到这个功能时,首先需要怎么去拦截获取手机短信。就用观察着来观察系统里的短消息的数据库的变化,“表“内容观察者,只要数据库发生变化,都会出发该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);
        }});
}

截取短信验证码,实现自动填写验证码相关推荐

  1. 快速实现自动填写验证码的功能

    今日科技快讯 近日,Uber的创始人卡拉尼克终于被迫离职了.自进入2017年以来,Uber的麻烦事就没有断过.先是由于支持特朗普的限制移民政策而成为众矢之的,接着又被前女性员工控诉在Uber时长期受到 ...

  2. 如何实现游戏陪玩系统源码中注册验证码的自动填写功能

    新用户在注册登录游戏陪玩系统源码时往往需要进行短信验证,如果没有验证码自动填写功能则需要用户自行切换软件进行填写,无异于增添了许多步骤,会影响到用户的使用体验,所以今天我们主要来说一说如何实现游戏陪玩 ...

  3. java对接阿里云短信服务详解(验证码,推广短信,通知短信)

    前言 小前提: - java:springboot框架,maven版本管理. - 阿里云:有账号,已经进行实名认证. java对接阿里云短信服务详解(验证码,推广短信,通知短信) 前言 1. 登录阿里 ...

  4. 国外短信平台收不到验证码,怎么解决?

    背景:国外短信平台,经常遇到验证码收不到的情况 如果您是一家海外企业或跨国公司,那么国外短信平台的使用一定不可或缺.无论您是要给客户发送营销信息,还是给员工发送公司通知,使用国外短信平台都能帮助您实现 ...

  5. 创宇滤镜|API防刷|短信邮件接口防刷|验证码防刷|搜索防刷 - 知道创宇云安全

    创宇滤镜|API防刷|短信邮件接口防刷|验证码防刷|搜索防刷 - 知道创宇云安全 创宇滤镜|API防刷|短信邮件接口防刷|验证码防刷|搜索防刷 - 知道创宇云安全 posted on 2017-02- ...

  6. 爬虫学习_selenium自动填写验证码

    爬虫学习_自动填写验证码 介绍一哈 项目 第一步 打开网站 第二步 获取验证码图片 第二步 获取验证码图片 第三步 识别验证码 结束 完整代码 介绍一哈 最近在跟着静觅大神.............. ...

  7. java实现自动识别验证码并自动填写提交(调用百度通用文字识别OCR接口+大图找小图之图像识别算法+模拟鼠标键盘动作)

    一.使用的技术: 1.调用百度AI通用文字识别OCR接口 2.图像识别算法 二.实现方案与步骤: 1.得到验证码的图片的坐标:先将验证码截图,然后再对整个电脑屏幕截图,通过大图找小图的方法,计算出小图 ...

  8. Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自动填入功能结合实例)

    用户注册或者找回密码时一般会用到短信验证功能,这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注册用户.获取SDK 大家可以 ...

  9. python读取手机短信信息_python 自动获取手机短信验证码

    需要一个有权限的 APK 在手机实时存储短信到手机内存 /sdcard/smslog.txt 里(外部SD卡也可以知道能通过adb命令访问到): /***** ...... try { long ti ...

最新文章

  1. POW矿池挖空块原理和解决方案
  2. TX2 安装QT Creator
  3. S9306开启web功能!
  4. FLutter入门:异步加载组件FutureBuilder
  5. java 解析xls 文件_java简单解析xls文件的方法示例【读取和写入】
  6. 剑指offer面试题41. 数据流中的中位数(二分查找)
  7. PHP------- 继承
  8. 苹果ios啸叫频点测试软件_啸叫抑制之陷波法
  9. 安装win11,跳过TPM2.0限制
  10. 矩阵快速幂 斐波那契数列
  11. java 画趋势图,java画曲线图
  12. unity粒子系统碰撞
  13. 怎么制作一个笔试题库?会计笔试题库中的题型分析?
  14. A股数据分析之收集数据:股票列表和股价
  15. logistic回归报错问题:Warning messages: 1: glm.fit:算法没有聚合 2: glm.fit:拟合機率算出来是数值零或一
  16. Arduino-ESP8266检测温湿度上传阿里云
  17. vue 组件数据共享_Vue共享组件
  18. C语言 二叉树的相关操作
  19. C语言单链表入门讲解(附例题)
  20. 计算机设计大赛-校赛展示

热门文章

  1. 人脸质量评估SER-FIQ (Quality estimation,CVPR 2020)代码解读
  2. php 提取登录QQsid_PHP模拟QQ登录的方法
  3. JavaScript中对象数据存储
  4. 洛谷 P1078 文化之旅
  5. 基于java的大学生社团管理系统设计(含源文件)
  6. Python中画图时候的线类型
  7. MATLAB求实数绝对值——abs
  8. 实时互动RTI技术,生成式AI虚拟数字人,构建元宇宙基础设施,CloudXR开启元宇宙通道...
  9. Qt编写物联网管理平台33-设备面板
  10. 输电线路视频在线监测装置