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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…