Как узнать, что телефонный звонок закончится в 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