#java #android #android_studio #android_sdk
Нужно определить что вызов завершился, т.е. пользователь поговорил и завершил разговор, как это можно сделать?
Ответы
Ответ 1
Зарегестрировать 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; } } } }
Комментариев нет:
Отправить комментарий