Как узнать, что телефонный звонок закончится в Android

Каково текущее состояние телефона на момент завершения вызова.

В андроиде есть три состояния.

TelephonyManager.CALL_STATE_IDLE
TelephonyManager.CALL_STATE_OFFHOOK
TelephonyManager.CALL_STATE_RINGING:

4 ответа

Решение

Этот код работает для меня. Надеюсь, это поможет вам

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;

public class CallStateReceiver extends BroadcastReceiver {

private final String LOG_TAG = "CallStateReceiver";

public static String prevState = TelephonyManager.EXTRA_STATE_IDLE;

@Override
public void onReceive(Context context, Intent intent) {

    Bundle bundle = intent.getExtras();
    if (bundle == null) {
        return;
    }

    String state = bundle.getString(TelephonyManager.EXTRA_STATE);

    if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)
            && !prevState.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)) {

        Log.i(this.LOG_TAG, "Call ended"));
    }

    prevState = state;
}
}
TelephonyManager.CALL_STATE_IDLE    #When a call end, no matter what, call received by user or not

TelephonyManager.CALL_STATE_OFFHOOK #when user receive a call

TelephonyManager.CALL_STATE_RINGING #when phone ring (incoming call)

Используйте PhoneStateListener для получения уведомлений об изменениях в указанных состояниях телефонии.

Overide onCallStateChanged (int state, String incomingNumber) и проверить state параметр

if (state == CALL_STATE_IDLE) {  
    //this is current Phone state at the time of call end, handle call end here
}

Три состояния указывают на следующее:

CALL_STATE_IDLE -> Состояние вызова устройства: нет активности.
CALL_STATE_OFFHOOK -> Состояние вызова устройства: снята. Существует по крайней мере один вызов, который является набирающим, активным или находится в режиме ожидания, и никакие вызовы не звонят или не ожидают.
CALL_STATE_RINGING -> Состояние вызова устройства: Звонит. Новый звонок поступил и звонит или ждет. В последнем случае другой вызов уже активен.

Для получения дополнительной информации, пожалуйста, обратитесь к документации.

После завершения вызова состояние телефона должно быть TelephonyManager.CALL_STATE_IDLE

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