Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Как определить что звонок завершился? Android

Нужно определить что вызов завершился, т.е. пользователь поговорил и завершил разговор, как это можно сделать?


Ответ

Зарегестрировать Receiver в Манифесте:

Добавить разрешения:

Реализовать слушателя:
public class PhoneStateBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "PhoneStateBroadcastReceiver"; Context mContext; String incoming_number; private int prev_state;
@Override public void onReceive(Context context, Intent intent) { TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener(); telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
Bundle bundle = intent.getExtras(); String phoneNr = bundle.getString("incoming_number"); Log.v(TAG, "phoneNr: "+phoneNr); mContext = context; }
/* Наш слушатель */ public class CustomPhoneStateListener extends PhoneStateListener {
private static final String TAG = "CustomPhoneStateListener";
@Override public void onCallStateChanged(int state, String incomingNumber){
if( incomingNumber != null && incomingNumber.length() > 0 ) incoming_number = incomingNumber;
switch(state){ case TelephonyManager.CALL_STATE_RINGING: Log.d(TAG, "CALL_STATE_RINGING"); prev_state=state; break;
case TelephonyManager.CALL_STATE_OFFHOOK: Log.d(TAG, "CALL_STATE_OFFHOOK"); prev_state=state; break;
case TelephonyManager.CALL_STATE_IDLE:
Log.d(TAG, "CALL_STATE_IDLE==>"+incoming_number);
if((prev_state == TelephonyManager.CALL_STATE_OFFHOOK)){ prev_state=state; //Завершенный вызов, на который был дан ответ } if((prev_state == TelephonyManager.CALL_STATE_RINGING)){ prev_state=state; //Вызов, который был отклонен или пропушен } break; } } } }

Комментариев нет:

Отправить комментарий