Android,检测哪个应用正在发送短信?

时间:2017-08-14 07:54:42

标签: android sms android-contentresolver

有没有办法检测发送拦截短信的应用?

在我的代码中,我可以拦截传出和传入的短信,阅读正文,电话号码等,但我不知道是否有办法检测正在发送短信的应用/包。我搜索过但没有运气。 提前致谢。 我使用下面的库拦截短消息:

Sms Radar on GitHub

请注意,我不是在谈论应用程序,它是默认的消息传递应用程序。有时像WhatsApp这样的其他应用程序会发送短信来验证用户身份。虽然我可以在发送/接收时检测到这些类型的SMS,但在发件箱/已发送的消息中不会显示这些类型的SMS。

所以我只想确切地知道现在发送短信的应用程序(包名称)。

2 个答案:

答案 0 :(得分:1)

AFAIK您无法检测哪个应用正在发送短信。它只是没有保存在内容存储中。

但是,您可以使用容易出错的解决方法:在发送短信时,列出当前正在运行且具有SEND_SMS权限(可能还具有互联网权限)的所有应用。

另一种(未经测试的)方法可能是使用Thread.currentThread().getStackTrace()通过迭代返回的数组来读取onSmsSent()中的堆栈,直到您到达可以发送SMS的应用程序。但我想这不会起作用,因为Android最有可能代理对内容存储所做的任何更改。

答案 1 :(得分:0)

所以我找到了一个解决方法。在应用程序发送短消息期间,它是一个前台进程。所以当我的onSMSSent()被调用时,我得到了前台进程列表,并在列表顶部找到了发送SMS的应用程序。

虽然这可能不是一个可靠的解决方案,但正如@ Ch4t4r所说,似乎没有解决方案直接获得短信发送应用程序,这个技巧听起来不错。