yirj 2021-08-01 19:15 采纳率: 50%
浏览 84

Android开发 如何监听手机短信的通知,将验证码复制到剪切板?

最近搞安卓时遇到一个问题,监听手机短信的通知获取验证码,总是不能达到完美的实现。
各品牌手机及Android系统阻止获取。(测试手机:荣耀20 Android 10系统)
之前使用的是第一种:
利用广播接收者的方式实现的,但是已经被很多的手机厂商给屏蔽或被安全软件给拦截了,就换了一种方式。

现在使用的是第二种:
是通过ContentObserver类中的OnChange()监听你的短信变化。
ContentObserver:内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理。
检测到了短信变化后,读取该条短信的内容,并且通过正则表达式来获取内容中的验证码。

遇到的问题:
已经可以获得短信验证码,但是会onChange多次调用,有短信来的时候首次会获取2条短信,且第2条的短信验证码会打印输出多次。
再发短信测试,手机有通知后,获取到的短信及验证码就不是最新的啦,就只会获取到上一条的验证码,且打印输出多次!

网上参考了很多文章,我都试验过了,还是没有完美解决上面的问题:

https://blog.csdn.net/njweiyukun/article/details/50670698
https://blog.csdn.net/weixin_42526101/article/details/117299747?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.control&spm=1001.2101.3001.4242
https://www.cnblogs.com/fuyanan/p/4767679.html

实现的目标:
1.手机收到短信,可以正则匹配后将通知的短信验证码复制到剪切板。
2.希望可以合并重复的短信,获取到重复的时只留一条最新的短信,不会被手机厂商屏蔽或安全软件拦截。
3.最新的短信验证码监听,解决onChange多次调用的情况,只获取最新接收到的短信信息。

已经调整很多次了,一直没完美解决,希望可以根据上面文章链接中的代码修改,贴出详细的解决过程代码。

  • 写回答

2条回答 默认 最新

  • 考古学家lx(李玺) python领域优质创作者 2021-08-05 10:06
    关注

    1、Xposed : XposedHelpers.findClass("com.android.internal.telephony.gsm.SmsMessage", classLoader)
    2、Gsmmodem

    评论

报告相同问题?

问题事件

  • 创建了问题 8月1日

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R