服务器做视频网站吗,做标志的网站,做百度推广一个月多少钱,wordpress onthego通话状态监听-Android13 1、Android Telephony 模块结构2、监听和广播获取通话状态2.1 注册2.2 通话状态通知2.3 通话状态 3、通知状态流程* 关键日志 frameworks/base/core/java/android/telephony/PhoneStateListener.java 1、Android Telephony 模块结构
Android Telephony… 通话状态监听-Android13 1、Android Telephony 模块结构2、监听和广播获取通话状态2.1 注册2.2 通话状态通知2.3 通话状态 3、通知状态流程* 关键日志 frameworks/base/core/java/android/telephony/PhoneStateListener.java 1、Android Telephony 模块结构
Android Telephony 模块结构简析 Android Telephony 模块结构简析 Telecom 框架概览 Dialer.apk /product/priv-app/Dialer/Dialer.apk、packages/apps/DialerTelecom.apk /system/priv-app/Telecom/Telecom.apk、packages/service/telecommTeleService.apk /system/priv-app/TeleService/TeleService.apk、packages/service/telephony framework.jar frameworks/base/telecomm、frameworks/base/telephony telephony-common.jar frameworks/opt/telephony vendor.ril-daemon hardware/ril 2、监听和广播获取通话状态 主要查看 framework.jar 代码 2.1 注册 PhoneStateListener注册最终调用TelephonyRegistry.java#listenWithEventList添加到ArrayListRecord mRecords packages/apps/Dialer/java/com/android/incallui/InCallPresenter.java
this.context.getSystemService(TelephonyManager.class).listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);广播注册public static final String ACTION_PHONE_STATE_CHANGED android.intent.action.PHONE_STATE;权限android.permission.READ_PHONE_STATE packages/apps/Dialer/java/com/android/dialer/dialpadview/DialpadFragment.java if (callStateReceiver null) {IntentFilter callStateIntentFilter new IntentFilter(TelephonyManager.ACTION_PHONE_STATE_CHANGED);callStateReceiver new CallStateReceiver();getActivity().registerReceiver(callStateReceiver, callStateIntentFilter);}
/private class CallStateReceiver extends BroadcastReceiver {/*** Receive call state changes so that we can take down the dialpad chooser if the phone* becomes idle while the chooser UI is visible.*/Overridepublic void onReceive(Context context, Intent intent) {String state intent.getStringExtra(TelephonyManager.EXTRA_STATE);if ((TextUtils.equals(state, TelephonyManager.EXTRA_STATE_IDLE)|| TextUtils.equals(state, TelephonyManager.EXTRA_STATE_OFFHOOK)) isDialpadChooserVisible()) {// Note theres a race condition in the UI here: the// dialpad chooser could conceivably disappear (on its// own) at the exact moment the user was trying to select// one of the choices, which would be confusing. (But at// least thats better than leaving the dialpad chooser// onscreen, but useless...)LogUtil.i(CallStateReceiver.onReceive, hiding dialpad chooser, state: %s, state);showDialpadChooser(false);}}}2.2 通话状态通知
frameworks/base/services/core/java/com/android/server/TelephonyRegistry.java public void notifyCallState(int phoneId, int subId, int state, String incomingNumber) {if (!checkNotifyPermission(notifyCallState())) {return;}if (VDBG) {log(notifyCallState: subId subId state state incomingNumber incomingNumber);}synchronized (mRecords) {if (validatePhoneId(phoneId)) {mCallState[phoneId] state;mCallIncomingNumber[phoneId] incomingNumber;for (Record r : mRecords) {if (r.matchTelephonyCallbackEvent(TelephonyCallback.EVENT_LEGACY_CALL_STATE_CHANGED) (r.subId subId) (r.subId ! SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)) {try {// Only the legacy PhoneStateListener receives the phone number.String incomingNumberOrEmpty getCallIncomingNumber(r, phoneId);r.callback.onLegacyCallStateChanged(state, incomingNumberOrEmpty);} catch (RemoteException ex) {mRemoveList.add(r.binder);}}if (r.matchTelephonyCallbackEvent(TelephonyCallback.EVENT_CALL_STATE_CHANGED) (r.subId subId) (r.subId ! SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)) {try {// The phone number is not included in the new call state changed// listener.r.callback.onCallStateChanged(state);} catch (RemoteException ex) {mRemoveList.add(r.binder);}}}}handleRemoveListLocked();}broadcastCallStateChanged(state, incomingNumber, phoneId, subId);}2.3 通话状态
frameworks/base/telephony/java/android/telephony/TelephonyManager.java CALL_STATE_IDLE 处于无电话活动相当于电话挂断不过要先有CALL_STATE_OFFHOOK判断 CALL_STATE_RINGING 电话响铃 CALL_STATE_OFFHOOK 接听电话 /*** Device call state: No activity.*/public static final int CALL_STATE_IDLE 0;/*** Device call state: Ringing. A new call arrived and is* ringing or waiting. In the latter case, another call is* already active.*/public static final int CALL_STATE_RINGING 1;/*** Device call state: Off-hook. At least one call exists* that is dialing, active, or on hold, and no calls are ringing* or waiting.*/public static final int CALL_STATE_OFFHOOK 2;3、通知状态流程 frameworks/base/core/java/android/telephony/TelephonyRegistryManager.java frameworks/base/services/core/java/com/android/server/TelephonyRegistry.java public void notifyCallStateForAllSubs(int state, String phoneNumber) {if (!checkNotifyPermission(notifyCallState())) {return;}if (VDBG) {log(notifyCallStateForAllSubs: state state phoneNumber phoneNumber);}synchronized (mRecords) {for (Record r : mRecords) {if (r.matchTelephonyCallbackEvent(TelephonyCallback.EVENT_LEGACY_CALL_STATE_CHANGED) (r.subId SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)) {try {// Ensure the listener has read call log permission; if they do not return// an empty phone number.// This is ONLY for legacy onCallStateChanged in PhoneStateListener.String phoneNumberOrEmpty r.canReadCallLog() ? phoneNumber : ;r.callback.onLegacyCallStateChanged(state, phoneNumberOrEmpty);} catch (RemoteException ex) {mRemoveList.add(r.binder);}}if (r.matchTelephonyCallbackEvent(TelephonyCallback.EVENT_CALL_STATE_CHANGED) (r.subId SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)) {try {// The new callback does NOT provide the phone number.r.callback.onCallStateChanged(state);} catch (RemoteException ex) {mRemoveList.add(r.binder);}}}handleRemoveListLocked();}// Called only by Telecomm to communicate call state across different phone accounts. So// there is no need to add a valid subId or slotId.broadcastCallStateChanged(state, phoneNumber,SubscriptionManager.INVALID_SIM_SLOT_INDEX,SubscriptionManager.INVALID_SUBSCRIPTION_ID);}public void notifyCallState(int phoneId, int subId, int state, String incomingNumber) {if (!checkNotifyPermission(notifyCallState())) {return;}if (VDBG) {log(notifyCallState: subId subId state state incomingNumber incomingNumber);}synchronized (mRecords) {if (validatePhoneId(phoneId)) {mCallState[phoneId] state;mCallIncomingNumber[phoneId] incomingNumber;for (Record r : mRecords) {if (r.matchTelephonyCallbackEvent(TelephonyCallback.EVENT_LEGACY_CALL_STATE_CHANGED) (r.subId subId) (r.subId ! SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)) {try {// Only the legacy PhoneStateListener receives the phone number.String incomingNumberOrEmpty getCallIncomingNumber(r, phoneId);r.callback.onLegacyCallStateChanged(state, incomingNumberOrEmpty);} catch (RemoteException ex) {mRemoveList.add(r.binder);}}if (r.matchTelephonyCallbackEvent(TelephonyCallback.EVENT_CALL_STATE_CHANGED) (r.subId subId) (r.subId ! SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)) {try {// The phone number is not included in the new call state changed// listener.r.callback.onCallStateChanged(state);} catch (RemoteException ex) {mRemoveList.add(r.binder);}}}}handleRemoveListLocked();}broadcastCallStateChanged(state, incomingNumber, phoneId, subId);}* 关键日志 ril.*GET_CURRENT_CALLS|TelephonyManager:|PhoneStateListener:|TelecomFramework: TelephonyConnectionService:|TelephonyMetrics:|Telecom : CallsManager|Telecom : PhoneStateBroadcaster: Broadcasted state change:|Telephony: onStateChanged|android.intent.action.PHONE_STATE|KeyguardUpdateMonitor:|notification_enqueue.*com.google.android.dialer|Dialer :.*CallState12-17 21:06:43.523 957 957 D RILJ : [1066] GET_CURRENT_CALLS [PHONE0]
12-17 21:06:43.524 526 526 D RIL : onRequest: GET_CURRENT_CALLS, sState: 10
12-17 21:06:43.529 957 1274 D RILJ : [1066] GET_CURRENT_CALLS {[id4,INCOMING,toa129,norm,mt,0,voc,noevp,,cli1,,1,audioQuality0] } [PHONE0]
12-17 21:06:43.546 957 957 E TelephonyMetrics: writePhoneState: Call session is missing
12-17 21:06:43.676 957 957 I TelecomFramework: TelephonyConnectionService: createConnection, callManagerAccount: ComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, 1, UserHandle{0}, callId: TC4_1, request: ConnectionRequest xxxxxxxxxxxxxx Bundle[android.telecom.extra.INCOMING_CALL_ADDRESS***, android.telecom.extra.CALL_CREATED_TIME_MILLIS68867006, android.telecom.extra.CALL_TELECOM_ROUTING_START_TIME_MILLIS68867038, ] isAdhocConf: N, isIncoming: true, isUnknown: false, isLegacyHandover: false, isHandover: false, addSelfManaged: true: (SBC.oSC)-CS.crCo-H.CS.crCo-H.CS.crCo.pICR(cap/cast)E-Ajo
12-17 21:06:43.683 957 957 V Telephony: onStateChanged, state: RINGING
12-17 21:06:43.718 957 957 I TelecomFramework: TelephonyConnectionService: notifyCreateConnectionComplete TC4_1: (...-CSW.hCCC)-CS.crCoC-H.CS.crCoC(cap/cast)E-E-E-Ajo
12-17 21:06:43.780 596 10440 I Telecom : CallsManager: onCallFilteringComplete: (...-CS.crCo-H.CS.crCo-H.CS.crCo.pICR)-CSW.hCCC-ICFG.sF-ICFG.sF-ICFG.sF-CILH.sL-CILH.oQC-BCF.gBS-BCF.gBS-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF(cap/cast)E-E-Ajo
12-17 21:06:43.781 596 10440 I Telecom : CallsManager: setCallState NEW - RINGING, call: [Call idTC4, stateNEW, tpacComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, 1, UserHandle{0}, cmgrComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, 1, UserHandle{0}, handletel:********12, vidstA, childs(0), has_parent(false), cap[ sup_hld mut !v2a spd_aud], prop[]], voipfalse: (...-CS.crCo-H.CS.crCo-H.CS.crCo.pICR)-CSW.hCCC-ICFG.sF-ICFG.sF-ICFG.sF-CILH.sL-CILH.oQC-BCF.gBS-BCF.gBS-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF(cap/cast)E-E-Ajo
12-17 21:06:43.786 596 10440 I Telecom : CallsManager: onCallFilteringComplete: allow call.: (...-CS.crCo-H.CS.crCo-H.CS.crCo.pICR)-CSW.hCCC-ICFG.sF-ICFG.sF-ICFG.sF-CILH.sL-CILH.oQC-BCF.gBS-BCF.gBS-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF(cap/cast)E-E-Ajo
12-17 21:06:43.786 596 10440 I Telecom : CallsManager: addCall([Call idTC4, stateRINGING, tpacComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, 1, UserHandle{0}, cmgrComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, 1, UserHandle{0}, handletel:********12, vidstA, childs(0), has_parent(false), cap[ sup_hld mut !v2a spd_aud], prop[]], voipfalse): (...-CS.crCo-H.CS.crCo-H.CS.crCo.pICR)-CSW.hCCC-ICFG.sF-ICFG.sF-ICFG.sF-CILH.sL-CILH.oQC-BCF.gBS-BCF.gBS-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF(cap/cast)E-E-Ajo
12-17 21:06:43.797 957 957 I TelecomFramework: TelephonyConnectionService: onCallFilteringCompleted(TC4_1, CallFilteringCompletionInfo{mIsBlockedfalse, mIsInContactsfalse, mCallResponsenull, mCallScreeningPackageNamenull}): (...-CSW.hCCC-ICFG.sF-ICFG.sF-ICFG.sF-CILH.sL-CILH.oQC-BCF.gBS-BCF.gBS-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF)-CS.oCFC-H.CS.oCFC(cap/cast/cast)E-E-E-Ajo
12-17 21:06:43.879 596 10440 I Telecom : PhoneStateBroadcaster: Broadcasted state change: 1: (...-CS.crCo-H.CS.crCo-H.CS.crCo.pICR)-CSW.hCCC-ICFG.sF-ICFG.sF-ICFG.sF-CILH.sL-CILH.oQC-BCF.gBS-BCF.gBS-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF(cap/cast)E-E-Ajo
12-17 21:06:43.898 957 957 I TelecomFramework: TelephonyConnectionService: onTrackedByNonUiService TC4_1 true: (ICSBC.oSC)-CS.tBNUS-H.CS.tBNUS(cad/cast)E-Ajw
12-17 21:06:44.038 957 957 D RILJ : [1068] GET_CURRENT_CALLS [PHONE0]
12-17 21:06:44.039 526 526 D RIL : onRequest: GET_CURRENT_CALLS, sState: 10
12-17 21:06:44.049 957 1274 D RILJ : [1068] GET_CURRENT_CALLS {[id4,INCOMING,toa129,norm,mt,0,voc,noevp,,cli1,,1,audioQuality0] } [PHONE0]
12-17 21:06:44.113 957 957 I TelecomFramework: TelephonyConnectionService: onTrackedByNonUiService TC4_1 true: (ICSBC.oSC)-CS.tBNUS-H.CS.tBNUS(cab/cast)E-Aj8
12-17 21:06:44.132 957 957 I TelecomFramework: TelephonyConnectionService: onAudioStateChanged TC4_1 [AudioState isMuted: false, route: SPEAKER, supportedRouteMask: SPEAKER, activeBluetoothDevice: [null], supportedBluetoothDevices: []]: (...-CSW.hCCC-ICFG.sF-ICFG.sF-ICFG.sF-CILH.sL-CILH.oQC-BCF.gBS-BCF.gBS-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-CARSM.pM_UPDATE_SYSTEM_AUDIO_ROUTE)-CS.cASC-H.CS.cASC(cap/cast/cast)E-E-E-Ajo
12-17 21:06:44.326 957 957 I TelecomFramework: TelephonyConnectionService: onAudioStateChanged TC4_1 [AudioState isMuted: false, route: SPEAKER, supportedRouteMask: SPEAKER, activeBluetoothDevice: [null], supportedBluetoothDevices: []]: (...-CSW.hCCC-ICFG.sF-ICFG.sF-ICFG.sF-CILH.sL-CILH.oQC-BCF.gBS-BCF.gBS-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-ICFG.sF-CAMSM.pM_2002-CARSM.pM_SWITCH_FOCUS)-CS.cASC-H.CS.cASC(cap/cast/cast)E-E-E-Ajo
12-17 21:06:44.551 957 957 D RILJ : [1070] GET_CURRENT_CALLS [PHONE0]
12-17 21:06:44.551 526 526 D RIL : onRequest: GET_CURRENT_CALLS, sState: 10
12-17 21:06:44.562 957 1273 D RILJ : [1070] GET_CURRENT_CALLS {[id4,INCOMING,toa129,norm,mt,0,voc,noevp,,cli1,,1,audioQuality0] } [PHONE0]
12-17 21:06:45.075 957 957 D RILJ : [1072] GET_CURRENT_CALLS [PHONE0]
12-17 21:06:45.076 526 526 D RIL : onRequest: GET_CURRENT_CALLS, sState: 10
12-17 21:06:45.081 957 1273 D RILJ : [1072] GET_CURRENT_CALLS {[id4,INCOMING,toa129,norm,mt,0,voc,noevp,,cli1,,1,audioQuality0] } [PHONE0]
12-17 21:06:45.594 957 957 D RILJ : [1074] GET_CURRENT_CALLS [PHONE0]
12-17 21:06:45.594 526 526 D RIL : onRequest: GET_CURRENT_CALLS, sState: 10
12-17 21:06:45.597 957 1273 D RILJ : [1074] GET_CURRENT_CALLS {[id4,INCOMING,toa129,norm,mt,0,voc,noevp,,cli1,,1,audioQuality0] } [PHONE0]
12-17 21:06:46.109 957 957 D RILJ : [1076] GET_CURRENT_CALLS [PHONE0]
12-17 21:06:46.109 526 526 D RIL : onRequest: GET_CURRENT_CALLS, sState: 10
12-17 21:06:46.115 957 1273 D RILJ : [1076] GET_CURRENT_CALLS {[id4,INCOMING,toa129,norm,mt,0,voc,noevp,,cli1,,1,audioQuality0] } [PHONE0]
12-17 21:06:46.626 957 957 D RILJ : [1078] GET_CURRENT_CALLS [PHONE0]
12-17 21:06:46.626 526 526 D RIL : onRequest: GET_CURRENT_CALLS, sState: 10
12-17 21:06:46.629 957 1273 D RILJ : [1078] GET_CURRENT_CALLS {[id4,INCOMING,toa129,norm,mt,0,voc,noevp,,cli1,,1,audioQuality0] } [PHONE0]
12-17 21:06:47.137 957 957 D RILJ : [1080] GET_CURRENT_CALLS [PHONE0]
12-17 21:06:47.138 526 526 D RIL : onRequest: GET_CURRENT_CALLS, sState: 10
12-17 21:06:47.142 957 1273 D RILJ : [1080] GET_CURRENT_CALLS {[id4,INCOMING,toa129,norm,mt,0,voc,noevp,,cli1,,1,audioQuality0] } [PHONE0]
12-17 21:06:47.651 957 957 D RILJ : [1082] GET_CURRENT_CALLS [PHONE0]
12-17 21:06:47.651 526 526 D RIL : onRequest: GET_CURRENT_CALLS, sState: 10
12-17 21:06:47.655 957 1273 D RILJ : [1082] GET_CURRENT_CALLS {[id4,INCOMING,toa129,norm,mt,0,voc,noevp,,cli1,,1,audioQuality0] } [PHONE0]
12-17 21:06:48.164 957 957 D RILJ : [1084] GET_CURRENT_CALLS [PHONE0]
12-17 21:06:48.164 526 526 D RIL : onRequest: GET_CURRENT_CALLS, sState: 10
12-17 21:06:48.174 957 1273 D RILJ : [1084] GET_CURRENT_CALLS {[id4,INCOMING,toa129,norm,mt,0,voc,noevp,,cli1,,1,audioQuality0] } [PHONE0]
12-17 21:06:48.682 596 9194 I Telecom : CallsManager: holdActiveCallForNewCall, newCall: [Call idTC4, stateRINGING, tpacComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, 1, UserHandle{0}, cmgrComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, 1, UserHandle{0}, handletel:********12, vidstA, childs(0), has_parent(false), cap[ sup_hld mut !v2a spd_aud], prop[]], voipfalse, activeCall: null: ICA.aC(cad)Ak4
12-17 21:06:48.706 957 957 D RILJ : [1086] GET_CURRENT_CALLS [PHONE0]
12-17 21:06:48.707 526 526 D RIL : onRequest: GET_CURRENT_CALLS, sState: 10
12-17 21:06:48.716 957 1273 D RILJ : [1086] GET_CURRENT_CALLS {[id4,INCOMING,toa129,norm,mt,0,voc,noevp,,cli1,,1,audioQuality0] } [PHONE0]
12-17 21:06:48.745 957 957 I TelecomFramework: TelephonyConnectionService: answer TC4_1: (ICA.aC-CSFM.rF)-CS.an-H.CS.an(cad/cast)E-Ak4
12-17 21:06:48.760 596 1157 I Telecom : CallsManager: setCallState RINGING - ANSWERED, call: [Call idTC4, stateRINGING, tpacComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, 1, UserHandle{0}, cmgrComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, 1, UserHandle{0}, handletel:********12, vidstA, childs(0), has_parent(false), cap[ sup_hld mut !v2a spd_aud], prop[]], voipfalse: ICA.aC-CSFM.rF(cad)Ak4
12-17 21:06:48.910 957 957 D RILJ : [1089] GET_CURRENT_CALLS [PHONE0]
12-17 21:06:48.912 526 526 D RIL : onRequest: GET_CURRENT_CALLS, sState: 10
12-17 21:06:48.957 957 1273 D RILJ : [1089] GET_CURRENT_CALLS {[id4,ACTIVE,toa129,norm,mt,0,voc,noevp,,cli1,,1,audioQuality0] } [PHONE0]
12-17 21:06:49.078 957 957 V Telephony: onStateChanged, state: ACTIVE
12-17 21:06:49.161 596 1050 I Telecom : CallsManager: markCallAsActive, isSelfManaged: false: CSW.sA(cap)AlQ
12-17 21:06:49.163 596 1050 I Telecom : CallsManager: setCallState ANSWERED - ACTIVE, call: [Call idTC4, stateANSWERED, tpacComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, 1, UserHandle{0}, cmgrComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, 1, UserHandle{0}, handletel:********12, vidstA, childs(0), has_parent(false), cap[ sup_hld mut !v2a spd_aud], prop[]], voipfalse: CSW.sA(cap)AlQ
12-17 21:06:49.190 596 1050 I Telecom : PhoneStateBroadcaster: Broadcasted state change: 2: CSW.sA(cap)AlQ
12-17 21:06:49.309 957 957 D RILJ : [1091] GET_CURRENT_CALLS [PHONE0]
12-17 21:06:49.309 526 526 D RIL : onRequest: GET_CURRENT_CALLS, sState: 10
12-17 21:06:49.331 957 1273 D RILJ : [1091] GET_CURRENT_CALLS {[id4,ACTIVE,toa129,norm,mt,0,voc,noevp,,cli1,,1,audioQuality0] } [PHONE0]
12-17 21:06:55.815 957 957 D RILJ : [1093] GET_CURRENT_CALLS [PHONE0]
12-17 21:06:55.816 526 526 D RIL : onRequest: GET_CURRENT_CALLS, sState: 10
12-17 21:06:55.823 957 1274 D RILJ : [1093] GET_CURRENT_CALLS {} [PHONE0]
12-17 21:06:55.857 957 957 V Telephony: onStateChanged, state: DISCONNECTED
12-17 21:06:55.864 596 9194 I Telecom : CallsManager: setCallState ACTIVE - DISCONNECTED, call: [Call idTC4, stateACTIVE, tpacComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, 1, UserHandle{0}, cmgrComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}, 1, UserHandle{0}, handletel:********12, vidstA, childs(0), has_parent(false), cap[ hld sup_hld mut !v2a spd_aud], prop[]], voipfalse: CSW.sDc(cap)Aow
12-17 21:06:55.928 596 9194 I Telecom : PhoneStateBroadcaster: Broadcasted state change: 0: CSW.sDc(cap)Aow
12-17 21:06:56.018 596 9720 I Telecom : CallsManager: markCallAsRemoved; callidTC4, immediate.: CSW.rC(cap)ApU
12-17 21:06:56.056 596 596 I Telecom : CallsManager: handleConnectionServiceDeath: service [ConnectionServiceWrapper componentNameComponentInfo{com.android.phone/com.android.services.telephony.TelephonyConnectionService}] died: CSW.rC-CM.pR(cap)ApU