我想知道是否有一种方法可以检测正在进行的 Skype 呼叫/电报/whatsapp/fb 信使呼叫等或来电等,就像与电话经理/听众的常规电话通话一样?我想要某种机制来检测来自我的应用程序的 Skype/电报等正在进行的/传入等呼叫。我遇到了这个解决方案:Android中Skype的呼叫检测,但不确定它是否适用于所有通用信使应用程序。是否有我可以在我身边实施的黑客或任何类型的侦听器来检测这些?任何想法都会很棒。
谢谢!
我想知道是否有一种方法可以检测正在进行的 Skype 呼叫/电报/whatsapp/fb 信使呼叫等或来电等,就像与电话经理/听众的常规电话通话一样?我想要某种机制来检测来自我的应用程序的 Skype/电报等正在进行的/传入等呼叫。我遇到了这个解决方案:Android中Skype的呼叫检测,但不确定它是否适用于所有通用信使应用程序。是否有我可以在我身边实施的黑客或任何类型的侦听器来检测这些?任何想法都会很棒。
谢谢!
您可以使用系统服务并使用.AudioManager
检查音频模式AudioManager#getMode()
。根据文档,AudioManager#getMode()
返回可以是以下之一的当前音频模式:
MODE_NORMAL
(0x00000000):正常音频模式:不振铃且未建立呼叫。
MODE_RINGTONE
(0x00000001):振铃音频模式。正在发出来电信号。
MODE_IN_CALL
(0x00000002):在通话音频模式下。建立电话呼叫。
MODE_IN_COMMUNICATION
(0x00000003):在通信音频模式下。建立音频/视频聊天或 VoIP 呼叫(在 API 11 中添加)。
使用AudioManager#getMode()
您可以检查是否有任何其他应用程序当前持有类型的音频焦点MODE_IN_COMMUNICATION
并相应地处理您的呼叫。
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
}
PS我已经用whatsapp messenger对此进行了测试,它可以工作!不能对其他 Messenger 应用说同样的话。