Обнаружение ответа на исходящий вызов

После широковещательной передачи ACTION_NEW_OUTGOING_CALL мне нужно зафиксировать следующее событие ответа другой стороны. Не могли бы вы посоветовать, как этого добиться? Я знаю, что это возможно, поскольку приложение для набора номера Android меняет зеленый значок Android на фотографию человека именно тогда, когда он берет трубку.

ОБНОВЛЕНО: я посмотрел на источник приложения на Android, обрабатывающего исходящие вызовы. Заметил в ContactsUtils такой способ:

/**
 * Kick off an intent to initiate a call.
 */

 public static void initiateCall(Context context, CharSequence
 phoneNumber) {
     Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
             Uri.fromParts("tel", phoneNumber.toString(), null));
     context.startActivity(intent); }

Думаю, мой ответ заключается в прослушивании Intent.ACTION_CALL_PRIVILEGED. Итак, перефразируя мой вопрос: кто-нибудь знает, какое действие обрабатывает Intent.ACTION_CALL_PRIVILEGED?


person mobilekid    schedule 12.02.2010    source источник
comment
ты нашел решение своей проблемы? Я тоже ищу такое же решение. Я хочу знать, ответил ли другой конечный пользователь на звонок или он отключился   -  person Shaista Naaz    schedule 27.04.2011
comment
В настоящее время невозможно определить, когда именно они подобрались; приложение Caller использует для этого внутреннее намерение.   -  person mobilekid    schedule 28.04.2011
comment
да, это то, к чему я сегодня пришел: - | в любом случае спасибо   -  person Shaista Naaz    schedule 28.04.2011
comment
Если вы не возражаете, предоставьте информацию, как использовать внутреннее намерение для получения информации о полученном исходящем звонке.   -  person kiran    schedule 16.04.2012
comment
Посмотри на эти темы. Они описывают, как определить, когда пользователь отвечает на звонок. stackoverflow.com/questions/7929750/ stackoverflow.com/questions/9513644/   -  person Mikael Svensson    schedule 21.08.2012
comment
Забавно, что на повторяющиеся вопросы есть ответы, а на этот - нет.   -  person o_O    schedule 21.08.2012
comment
вы нашли способ достичь этого? возможно, путем опроса или использования отражения в CallManager: grepcode.com/file_/repository.grepcode.com/java/ext/?   -  person android developer    schedule 01.10.2013


Ответы (4)


Я не думаю, что есть такой API, а также нет API для отправки DTMF по той же причине, по которой вы не можете определить, когда происходит соединение.

person rbd    schedule 30.04.2012

Не обязательно, чтобы это можно было зафиксировать как внешнее приложение. Зеленый значок Android - это часть приложения, которое управляет вызовом, поэтому для изменения значка трансляция не требуется.

person pgsandstrom    schedule 12.02.2010
comment
Да, однако, мне нужно запечатлеть это событие! - person mobilekid; 12.02.2010

Что касается диспетчера телефонии Android, вы не можете программно определить, был ли получен ответ на звонок или нет. Это означает, что у вас нет возможности узнать, когда пользователь взял телефон на другом конце. В Android есть 3 состояния диспетчера телефонии, и ни одно из них не может определить, был ли на самом деле принят вызов или нет (В СЛУЧАЕ ИСХОДЯЩИХ ЗВОНКОВ)

person kkreddy    schedule 16.02.2014

Единственный способ сделать это - проанализировать журналы Logcat, для этого нет события PhoneStateListener.

Некоторые просят об этом здесь: https://code.google.com/p/android/issues/detail?id=14266

В любом случае, в версиях выше Android 4.2, поскольку Logcat «изолирован», это может быть невозможно ...

person neteinstein    schedule 06.11.2013
comment
Если мы установим targetSdkVersion нашего приложения на ‹4.2. Можем ли мы тогда читать системные журналы с помощью logcat? - person Muhammad Babar; 06.01.2017
comment
я не боюсь. потому что это журналы приложения "Телефон" - это песочница. Неважно, какой SDK использует ваше приложение. - person Krishna Chaitanya Kornepati; 29.05.2017