Вы можете использовать PhoneStateLisenter для прослушивания изменений в состоянии вызова.
Итак, вы слушаете изменение LISTEN_CALL_STATE .
С помощью метода onCallStateChanged .
Итак, когда состояние меняется с RINGING на OFFHOOK, вы знаете, что телефонный звонок был подключен
Тот же принцип применяется для IDLE в OFFHOOK в вашей ситуации, выслушайте изменение с IDLE на OFFHOOK, и вы узнаете, что вы подключены к вызову.
Вы также можете заглянуть в намерение ACTION_NEW_OUTGOING_CALL, Android позволяет "перехватить" это при наборе вызова, и вы сможете получить код результата, подтверждающий, был ли вызов подключен или нет.
Для тонов DTMF смотрите в ToneGenerator, это позволяет вам создавать тоны DTMF, а .startTone () должен позволять вам воспроизводить тональный сигнал DTMF.
Однако вы не можете отправлять тоны DTMF по восходящей линии связи.