Как обнаружить звонки по скайпу / телеграмме / WhatsApp, когда мое приложение обмена сообщениями выполняет вызов или хочет сделать звонок?

Я задаюсь вопросом, есть ли способ, которым я могу обнаружить звонок / телеграмму / WhatsApp / FB мессенджер и т. Д. В процессе или входящий звонок и т. Д., Как обычный телефонный звонок с менеджером / слушателем телефонии? Я хотел бы иметь какой-то механизм, который обнаруживает текущий / входящий вызов и т. Д. Из Skype / Telegram и т. Д. Для моего приложения. Я столкнулся с этим решением: обнаружение звонков для Skype в Android, но не уверен, что он будет работать для всех общих приложений мессенджера. Есть ли на моей стороне хак или какой-либо другой слушатель, который позволяет мне обнаруживать их? Любые идеи будут потрясающими.

Спасибо!

2 ответа

Вы можете использовать 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, и он работает! Не могу сказать то же самое для других приложений мессенджера.

Это может быть невозможно, но я не уверен на 100%. Реализуйте этот код Skype и протестируйте его как прототип и посмотрите, работает ли он для всего остального. Если это не так, то это не хорошо. Кроме того, попробуйте украсть фокус аудио, но если вы поддерживаете фоновые вызовы, это станет проблемой. Возможно, нужно подумать дважды, прежде чем применять что-либо. Я не думаю, что знаю ни одно приложение, которое делает это.

Другие вопросы по тегам