Android P:Only active device can hung up call .
非 active device 不能挂断电话。
step1:车载先连接 手机
step2:蓝牙耳机再连接手机
step3:辅助机电话呼叫测试机
现象:车载接听和挂断电话按钮触摸无效,蓝牙耳机正常。
原因:Android P的时候,Google确实没有这样设计。
但是Android Q已叠加此功能。修改如下,可根据自己公司的方案自行修改,注释掉961到969的部分,亦可实现“非active device”的设备,也能挂断电话的操作。
system/bt/btif/src/btif_av.cc
923 switch (cmd) {
924 case BTA_AG_AT_A_EVT:
925 case BTA_AG_SPK_EVT:
926 case BTA_AG_MIC_EVT:
927 case BTA_AG_AT_CBC_EVT:
928 /* send OK */
929 bta_ag_send_ok(p_scb);
930 /** M: cancel ring after recive ATA. @{ */
931 if (cmd == BTA_AG_AT_A_EVT) {
932 alarm_cancel(p_scb->ring_timer);
933 /** M: Create SCO right after receiving ATA command @{ */
934 #if defined(MTK_INTEROP_EXTENSION) && (MTK_INTEROP_EXTENSION == TRUE)
935 if (interop_mtk_match_addr_name(INTEROP_MTK_HFP_CREATE_SCO_AFTER_ATA,
936 &(p_scb->peer_addr))) {
937 APPL_TRACE_DEBUG("%s SCO open right after AT_A command.", __func__);
938 bta_ag_sco_open(p_scb, tBTA_AG_DATA::kEmpty);
939 }
940 #endif
941 /** @} */
942
943 }
944 /** @} */
945 /** M: Ignore the immediate mute command. @{ */
946 // Some device send VGS/VGM = 0 when connected HFP, this
947 // will cause no voice for call, so ignore the command in a while
948 // after HFP connected.
949 if (((cmd == BTA_AG_SPK_EVT) || (cmd == BTA_AG_MIC_EVT))
950 && (val.num == 0)) {
951 long cur_time = time(NULL);
952 if (cur_time - hfp_conn_time < 2) {
953 event = 0;
954 APPL_TRACE_DEBUG("%s: ignoring VGS/VGM=0 within 2s after connection", __func__);
955 }
956 }
957 /** @} */
958 break;
959
960 case BTA_AG_AT_CHUP_EVT:
961 if (!bta_ag_sco_is_active_device(p_scb->peer_addr)) {
962 LOG(WARNING) << __func__ << ": AT+CHUP rejected as " << p_scb->peer_addr
963 << " is not the active device";
964 event = 0;
965 bta_ag_send_error(p_scb, BTA_AG_ERR_OP_NOT_ALLOWED);
966 } else {
967 bta_ag_send_ok(p_scb);
968 }
969 break;
970