【问题标题】:Android, Detect which app is sending SMS?Android,检测哪个应用程序正在发送短信?
【发布时间】:2017-08-14 07:54:41
【问题描述】:

有没有办法检测发送截获短信的应用程序?

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

Sms Radar on GitHub

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

所以我只想确切地知道哪个应用程序(包名称)现在正在发送 SMS。

【问题讨论】:

    标签: android sms android-contentresolver


    【解决方案1】:

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

    但是,您可以使用容易出错的解决方法:
    在发送 SMS 时列出当前运行的所有具有 SEND_SMS 权限(也可能具有 Internet 权限)的应用程序。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 请记住,用户必须明确授予您使用数据的权限,然后您才能访问前台应用程序。 startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)); 这只需要在较新的 Android 版本上完成
      猜你喜欢
      • 2013-09-07
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多