Is there anyway to identify when a call goes from 1-to-1 to multiparty/conference call?
Is any kind of broadcast or event called?
Thanks
Unfortunately, not at the moment. This is managed by the system and is inaccessible to developers. The closest you have is TelephonyManager, but you are only really able to access basic information about the phone. I believe this is mainly for security reasons (so people can't "bug" phones with a simple program), but also because telephony is managed on a lower level, within the kernel.
The information his phone has regarding calls is not shared with your phone at any point doing the call or otherwise, it's shared with the towers. there will be no app or software or hardware for that matter that can do what you need unless it's police sting ray
Related
I am writing app to monitor data usage by other installed applications. By far, I managed to get data usage through mobile and wlan interface. It will be pretty useful if I could track GPS usage per application (or UID). I dont know how it will be presented (time on "fix", number of requests?).
I can't find anywhere how to get that data. Does android save logs from GPS somewhere I can read them?
As #CommonsWare indicated in the comments, there mostly shouldn't be a way to access that information for application privacy reasons.
However, a question similar to this was asked on another stack exchange website and the solution was to try using an application called Spare Parts.
I am unfamiliar with the application, but I suspect you will be unable to access this information programatically. If all you would like to do is to see this information, this should do nicely. If your intent is to create some logic based on GPS usage, you may run into a little more trouble.
Is there any way to identify that a Voip conversation is happening in android?
I have an app that needs to know whether any conversation is happening now through Voip. Never mind if it's Skype, Viber, WhatsApp or whatever.
I know that there are many different protocols for Voip, some of them proprietary. But I wonder if there is some clever way to do it.
Profile the bandwidth.
Find an API that lets you monitor incoming/outgoing bandwidth on a per-application basis (I don't know android but this is possible in windows and unix)
Check each application and write heuristics to classify their bandwidth usage
VOIP will have significant pattern, You'll have to watch it, but it will intuitively look similar to this
consistent amount of data being sent or received (note: test this with several VOIP solutions, and scale it - compression may vary)
usually doing mostly sending and mostly receiving (one side talks at once while the other just sends Acks)
sending and receiving swaps at a known interval (like a conversation)
maybe write a neural network if you have hundreds of recordings of conversations/non-conversations/borderline to train it with.
Etc ... you get the idea. Google 'detect a conversation' for more (couple good studies near the top). Note these portend access to the data stream; you will only be able to see data usage unless the VOIP is stupid enough not to encrypt or somehow let you MITM them.
Notes:
if something other than a conversation is going on, or there is noise, this may fail
no program has to identify itself as VOIP. Assuming you're monitoring employees they could download something obscure or bespoke to fool you. And data should be encrypted. So this is your only hope.
Possible to fool this by faking sending extra data. Not likely ... why would a program waste bandwidth?
If the users want to fool you into thinking they are talking - e.g., they are your telemarketers - why not mandate what they use? You would probably want to anyway so you can record for legal purposes.
Here is the code that will give current 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);
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 maybe can help you:
https://stackoverflow.com/a/22904362/1723525
Using the SipAudioCall.Listener
My question may look a bit strange.
I want to know if, in android, it is possible to know which number has been called when you receive an incoming call (I'm not speaking about caller id).
For example: let's assume that my phone number is 555-12345, my operator will route to my phone every number starting with 555-12345.
This means that you can call me by dialing 555-12345, but also by dialing 555-12345-37967 or 555-12345-34 etc.
Is there a way to know which number the caller has dialed?
If it is not possible to do this using Android API, would be possible to achieve my goal at lower level? Maybe using a customized firmware?
I was searching for this and not found any answer, the sample app (sipDemo) do not handle incoming call too. Fortunately I found the answer:
mSipManager.getSessionFor(intent).getPeerProfile().getUserName()
Good luck ;)
Is there anyway to identify when a call goes from 1-to-1 to multiparty/conference call?
Is any kind of broadcast or event called?
Thanks
Unfortunately, not at the moment. This is managed by the system and is inaccessible to developers. The closest you have is TelephonyManager, but you are only really able to access basic information about the phone. I believe this is mainly for security reasons (so people can't "bug" phones with a simple program), but also because telephony is managed on a lower level, within the kernel.
The information his phone has regarding calls is not shared with your phone at any point doing the call or otherwise, it's shared with the towers. there will be no app or software or hardware for that matter that can do what you need unless it's police sting ray
I would like to know how to intercept incoming calls and also how to forward them. I know there are several questions regarding this topic here and elsewhere on the net, but all the answers use the android.intent.action.PHONE_STATE action which is broadcast always after the phone begins to ring and the call screen is shown.
That's why I'm looking for a solution where i could intercept the call in an early stage before any notification (ringing etc..) has been done. I would like to know if maybe this is possible on a platform level in native code and if yes how ? Or perhaps with some kind of trick with the SDK ?
In general, if you can't do it in Java, you can't do it in the NDK. Most of the time the opposite is true: You can't do MOST things on Android in the NDK.
I don't know of a way to do that, and frankly doubt it exists: It would be a huge security hole if you could download an application that would forward calls to another number.
You may want to look at this source code, it may help you : http://code.google.com/p/auto-answer/
None of the existing apps in Android can forward a call based on a given number. All they can do is forward all or nothing. There's one app in particular (cBlocker) that can forward calls on schedule besides blocking incoming and outgoing calls and SMS based on rules.