杰理可视化SDK-手机三方通话控制
手机三方通话功能是手机常用的功能之一。本篇文章简单介绍了杰理可视化SDK在蓝牙耳机应用中,当手机存在三方通话来电或正在进行三方通话时,蓝牙耳机如何实现对手机三方通话的控制操作,包括状态获取和处理等内容。
手机三方通话功能
首先需要了解一下什么是手机的三方通话功能。手机三方通话功能是指在手机通话过程中,用户可以在不中断当前通话的情况下,拨打或接听第三方的电话。三方通话功能是建立在呼叫等待与保持基础上的一项新业务。呼叫等待是指当用户正在通话时,如果有第三方来电,手机会提醒用户有新的来电等待;呼叫保持则是指用户可以暂时保持当前通话,去接听或拨打其他电话。部分手机可能需要用户主动开通呼叫等待、呼叫保持和三方通话功能。如果用户发现无法使用三方通话,可以联系运营商或查看手机设置。
总的来说,三方通话功能需要电话运营商开通或手机支持,如下图三方通话功能演示。
杰理SDK三方通话控制
SDK三方通话状态获取
SDK代码中通常使用bt_get_call_status()函数来获取当前蓝牙电话的状态。
通过BT_CALL_IND_STA枚举值可以看到获取到的蓝牙电话状态并不能指示三方通话的通话状态。
这时需要使用获取第二个通话状态的函数get_second_call_status()函数,这个函数在杰理蓝牙库中有定义,用户可以在外部自行声明使用。get_second_call_status()外部函数,用于获取第二个通话的状态。这个函数通常用于蓝牙三方通话功能的实现中,特别是在处理多通话场景时,能够获取第二个通话的状态信息。在蓝牙三方通话功能中,get_second_call_status()函数的作用是获取第二个通话的状态信息。通过调用这个函数,可以获取到第二个通话的相关状态,从而实现对第二个通话的管理和控制。这对于实现复杂的通话功能非常有用,特别是在需要同时处理多个通话的情况下。
如下图,在使用时手动添加get_second_call_status()函数声明。
get_second_call_status()函数返回值的含义如上。一般会使用到SECOND_CALL_IN以及SECOND_CALL_HOLD分别获取到手机是否三方通话打入以及三方通话保持状态。
SDK三方通话处理
SDK有了以上获取到三方通话状态的基础,蓝牙耳机便可以根据三方通话的状态做对应的三方通话处理了。比如通话过程中三方通话来电时,通过耳机上的按键拒接新来电,保持当前通话;手机已经接通三方通话了,第二通电话正在通话保持时,通过按键来实现在两个通话之间切换等UI上的操作功能。
在杰理SDK中可以通过bt_cmd_prepare()函数或bt_cmd_prepare_for_addr()函数发送对应的蓝牙控制命令以达到控制手机通话操作的目的。发送USER_CMD_TYPE三方通话相关的枚举值的命令,可以在avctp_user.h文件中查看,如下图。
三方通话来电时:
挂断当前去接听发送USER_CTRL_HFP_THREE_WAY_ANSWER1命令;
保留当前去接听发送USER_CTRL_HFP_THREE_WAY_ANSWER2命令;
拒接三方通话来电发送USER_CTRL_HFP_THREE_WAY_REJECT命令;
三方通话进行时:
两个通话之间切换发送USER_CTRL_HFP_THREE_WAY_ANSWER2命令。