Identifying that a Voip conversation is happening in android

Is it possible to determine that there is a Voip conversation in android?

I have an application that needs to know if any conversation is happening via Voip. It doesn't matter if it's Skype, Viber, WhatsApp or something else.

I know there are many different protocols for Voip, some of which are proprietary. But I'm wondering if there is any clever way to do this.

+3


source to share


3 answers


Bandwidth profile.

  • Find an API that allows you to monitor the incoming / outgoing bandwidth for each application (I don't know android, but this is possible on windows and unix).
  • Check each application and write heuristics to classify bandwidth usage.
  • VOIP will have a significant pattern, you have to look at it, but it will intuitively look like this.
    • consistent amount of data sent or received (note: check this with multiple VOIP solutions and scale them up - compression may vary)
    • usually does mostly send and mostly receive (one side speaks straight away and the other just sends Acks)
    • sending and receiving swaps at a known interval (e.g. conversation)
    • maybe write a neural network if you have hundreds of conversation / non-conversation / boundary records to train.
    • And so on .... you understand. Google "detects conversation" for more (a couple of good research at the top). Note that they provide access to the data stream; you will only be able to view the data if the VOIP is stupid enough not to encrypt or somehow allow you to MITM it.


Notes:

  • If something other than conversation happens, or there is noise, it may fail.
  • no program should identify itself as VOIP. Assuming you are spying on employees, they may download something obscure or imposed on you to trick you. And the data must be encrypted. So this is your only hope.
  • It is possible to deceive this by fake sending additional data. Chances are why use the bandwidth of the program?
  • If users want to trick you into thinking what they are saying - for example, they are your telemarketers - why not indicate what they are using? Either way, you probably want to be able to record for legal purposes.
+1


source


Here is the code that will give the currently running application



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

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

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

      

0


source


You can detect incoming calls using this:

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

I also found another SO answer that might help you:

fooobar.com/questions/2218739 / ...

Using SipAudioCall.Listener

0


source







All Articles