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多次调用的情况,只获取最新接收到的短信信息。

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

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

加油