确定 android 中正在进行 Voip 对话

Identifying that a Voip conversation is happening in android

有什么方法可以识别 android 中正在进行 Voip 对话吗?

我有一个应用程序需要知道现在是否有任何对话正在通过 Voip 进行。不管是 Skype、Viber、WhatsApp 还是其他什么。

我知道有许多不同的 Voip 协议,其中一些是专有的。但我想知道是否有一些聪明的方法可以做到这一点。

这是将提供当前 运行 应用程序的代码

ActivityManager manager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);

    List<ActivityManager.RunningAppProcessInfo> tasks = manager.getRunningAppProcesses();

    Log.i("current_running_app",tasks.get(0).processName);

您可以使用此方法检测来电:

http://karanbalkar.com/2014/02/detect-incoming-call-and-call-hangup-event-in-android/

我还找到了另一个可能对您有帮助的 SO 答案:

使用 SipAudioCall.Listener

分析带宽。

  • 找到一个 API 可以让你在每个应用程序的基础上监控 incoming/outgoing 带宽(我不知道 android 但这在 windows 和unix)
  • 检查每个应用程序并编写试探法来对它们的带宽使用情况进行分类
  • VOIP 会有明显的模式,你必须要看它,但直观上看起来与此类似
    • 发送或接收的数据量一致(注意:使用多个 VOIP 解决方案对此进行测试,并对其进行缩放 - 压缩可能会有所不同)
    • 通常主要是发送和接收(一方同时说话,而另一方只是发送 Ack)
    • 以已知时间间隔发送和接收交换(如对话)
    • 如果你有数百条 conversations/non-conversations/borderline 的录音来训练它,也许可以编写一个神经网络。
    • 等等……你明白了。 Google 'detect a conversation' 了解更多(在顶部附近进行良好的研究)。注意这些预示着访问数据流;你将只能看到数据使用情况,除非 VOIP 愚蠢到不加密或以某种方式让你 MITM 他们。

备注:

  • 如果正在进行对话以外的事情,或者有噪音,这可能会失败
  • 没有程序必须将自己标识为 VOIP。假设您正在监视员工,他们可能会下载一些晦涩或定制的东西来愚弄您。数据应该加密。所以这是你唯一的希望。
  • 可以通过伪造发送额外数据来欺骗它。不太可能...为什么程序会浪费带宽?
  • 如果用户想让您误以为他们正在说话——例如,他们是您的电话推销员——为什么不强制要求他们使用什么?您可能无论如何都想这样做,以便您可以出于合法目的进行录音。