I am wondering if there is a way I can detect a skype call/telegram/whatsapp/fb messenger call etc in progress or incoming call etc just like the regular phone call with telephony manager/listener? I would like to have some kind of mechanism that detects an ongoing /incoming etc call from skype/telegram etc for my app. I came across this solution :Call Detection for skype in android but not sure if it'll work for all generic messenger apps. Is there a hack or any kind of listener I can implement on my side that allows me to detect these? Any ideas would be awesome.
Thanks!
You can use the AudioManager
system service and check for audio mode using AudioManager#getMode()
. According to the docs, AudioManager#getMode()
returns the current audio mode which can be one of following:
MODE_NORMAL
(0x00000000): Normal audio mode: not ringing and no call established.MODE_RINGTONE
(0x00000001): Ringing audio mode. An incoming is being signaled.MODE_IN_CALL
(0x00000002): In call audio mode. A telephony call is established.MODE_IN_COMMUNICATION
(0x00000003): In communication audio mode. An audio/video chat or VoIP call is established (added in API 11).
Using AudioManager#getMode()
you can check if any other app is currently holding an audio focus of type MODE_IN_COMMUNICATION
and handle your call accordingly.
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
final int mode = am.getMode();
if(AudioManager.MODE_IN_CALL == mode){
// device is in a telephony call
} else if(AudioManager.MODE_IN_COMMUNICATION == mode){
// device is in communiation mode, i.e. in a VoIP or video call
} else if(AudioManager.MODE_RINGTONE == mode){
// device is in ringing mode, some incoming is being signalled
} else {
// device is in normal mode, no incoming and no audio being played
}
P.S. I've tested this with whatsapp messenger and it works! Cannot say the same for other messenger apps.
来源:https://stackoverflow.com/questions/49302694/how-do-i-detect-skype-telegram-whatsapp-calls-when-my-messenger-app-is-in-a-call