Не удается определить, когда в Android ответили на исходящий вызов
Чтобы определить ответ на исходящий вызов, я попытался создатьPhoneStateListener
и слушая 's,TelephonyManager
CALL_STATE_RINGING
CALL_STATE_OFFHOOK
, а такжеCALL_STATE_IDLE
, отэтот вопрос, но это не похоже на работу, как описано ниже.
Сначала я зарегистрировал следующее разрешение в манифесте:
ЗатемBroadcastReceiver
называетсяOutCallLogger
что ловитNEW_OUTGOING_CALL
событие, когда происходит исходящий звонок:
Далее моя реализацияOutCallLogger
, Я установил логическое имяnoCallListenerYet
чтобы не прикреплять новыйPhoneStateListener
кTelephonyManager
всякий раз, когдаonReceive()
вызывается.
public class OutCallLogger extends BroadcastReceiver {
private static boolean noCallListenerYet = true;
@Override
public void onReceive(final Context context, Intent intent) {
number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
if (noCallListenerYet) {
final TelephonyManager tm = (TelephonyManager) context.getSystemService(
Context.TELEPHONY_SERVICE);
tm.listen(new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
Log.d(This.LOG_TAG, "RINGING");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d(This.LOG_TAG, "OFFHOOK");
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.d(This.LOG_TAG, "IDLE");
break;
default:
Log.d(This.LOG_TAG, "Default: " + state);
break;
}
}
}, PhoneStateListener.LISTEN_CALL_STATE);
noCallListenerYet = false;
}
}
}
Теперь, когда я делаю исходящий звонок на моем устройстве,CALL_STATE_RINGING
НИКОГДА не вызывается. Я всегда получаю только распечаткиIDLE» к "С КРЮЧКА" когда другая линия начинает звонить, ничего, когда на звонок отвечают, и распечатка "IDLE» снова, когда вызов закончен.
Как я могу надежно определить, когда на Android ответили на исходящий вызов, или это вообще возможно?