概述
BluetoothHeadsetClient 用于控制HFP客户端(蓝牙电话端)的公共API。简单而言,它是电话的操作代理,可以控制蓝牙HFP协议的连接断开、配置信息的查询、执行HFP协议特有操作等。
初始化
BluetoothHeadsetClient 的实例通过BluetoothAdapter 的getProfileProxy 获取。 示例:
public void getHFPProxy(Context context){
BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, new BluetoothProfile.ServiceListener() {
@Override
public void onServiceConnected(int profile, BluetoothProfile proxy) {
BluetoothHeadsetClient bluetoothHeadsetClient = (BluetoothHeadsetClient) proxy;
}
@Override
public void onServiceDisconnected(int profile) {
}
},BluetoothProfile.HEADSET_CLIENT);
}
HFP协议连接与断开
connect 方法用于HFP协议连接。 入参为蓝牙设备实例(通过BlueToothAdapter 获取)。
目前,系统仅支持一个HFP协议连接。API将在连接之前自动断开已连接的设备。
可通过BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED 广播监听连接状态。(关于蓝牙相关广播,后续单独开一篇文章来讲。)
disconnect 方法用于HFP协议断开。 入参为蓝牙设备实例(通过BlueToothAdapter 获取)。
在蓝牙设备上的配置文件未处于连接状态等情况下,此API将返回false。当此API返回true时,可通过BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED 广播监听断开状态。
如果断开连接是由远程设备启动的,则状态变化为STATE_CONNECTED ->STATE_DISCONNECTED 。 如果断开连接是由主机(本地)设备启动的,则状态为STATE_CONNECTED ->STATE_DISCONNECTING ->STATE_DISCONNECTED 。
获取配置及状态信息
getConnectedDevices 方法: 可以获取连接了HFP协议的当前设备实例
getDevicesMatchingConnectionStates 方法: 获取满足连接状态的所有设备列表。 连接状态为BluetoothProfile.STATE_CONNECTING 、BluetoothProfile.STATE_DISCONNECTED 、BluetoothProfile.STATE_DISCONNECTING 中的一种。
getConnectionState 方法: 获取当前HFP协议连接状态。状态包括BluetoothPrifile.STATE_CONNECTED 、BluetoothPrifile.STATE_CONNECTING 、BluetoothPrifile.STATE_DISCONNECTED 、BluetoothPrifile.STATE_DISCONNECTING 四种。
setPriority 方法: 设置权限。入参为需要设置的远端设备实例以及权限能力。 权限为 BluetoothHeadsetClient.PRIORITY_ON 和BluetoothHeadsetClient.PRIORITY_OFF 中的一种。 PRIORITY_ON :可以连接HFP。 PRIORITY_OFF :不可连接HFP。 设备权限可通过getPriority 方法获取。
setConnectionPolicy 方法: 设置协议连接策略。入参为需设置的设备及连接策略。 连接策略为BluetoothProfile.CONNECTION_POLICY_ALLOWED , BluetoothProfile.CONNECTION_POLICY_FORBIDDEN , BluetoothProfile.CONNECTION_POLICY_UNKNOWN 中的一种。 CONNECTION_POLICY_ALLOWED :默认连接HFP CONNECTION_POLICY_FORBIDDEN :默认不连接HFP CONNECTION_POLICY_UNKNOWN :连接策略未知(设备没设置或设备未配对) 连接策略可通过getConnectionPolicy 方法获取。
HFP协议客户端操作
startVoiceRecognition 方法 开启语音识别功能。入参为设备实例。(蓝牙电话用不到) stopVoiceRecognition 为关闭语音识别功能的方法。
sendVendorAtCommand 方法 发送供应商特定AT命令。(蓝牙电话用不到)
getCurrentAgEvents 方法 获取返回 AG (音频网关)指标的当前值列表。(蓝牙电话用不到)
getCurrentCalls 方法 获取当前正在通话的参数实例(封装在BluetoothHeadsetClientCall 中)。由于可能存在多路通话,所以此处返回一个List。
acceptCall 方法 蓝牙电话端接听电话方法。入参为连接的设备实例与接听时的操作策略标志。 操作策略: BluetoothHeadsetClient.CALL_ACCEPT_NONE :正常接听(单路通话) BluetoothHeadsetClient.CALL_ACCEPT_HOLD :应答且挂起(多路通话) BluetoothHeadsetClient.CALL_ACCEPT_TERMINATE :接听且挂断(多路通话) 通话的状态可以在BluetoothHeadsetClient.ACTION_CALL_CHANGED 广播中接收(蓝牙相关广播后面单开一篇讲)。
holdCall 方法 挂起当前通话(多路通话使用)。入参为设备实例
rejectCall 方法 拒接电话。入参为设备实例。 仅当响铃状态是可拒接。拖已接听,需使用terminateCall方法来挂断电话。
terminateCall 方法 挂断电话。入参为设备实例与要挂断的电话参数实例(BluetoothHeadsetClientCall )。 仅当通话时使用该方法有效,若是响铃状态,则应使用rejectCall 方法。 电话参数实例传null 则为挂断全部进行中的通话。
enterPrivateMode 方法 使用指定的呼叫进入私人模式。仅当AG侧支持扩展呼叫控制时才有效。(蓝牙电话通常不用)。
explicitCallTransfer 方法 主动执行呼叫转移。连接其他呼叫并断开当前连接。入参为设备实例
dial 方法 拨号方法。入参为设备实例以及有效的电话号码。 通话的状态可以在BluetoothHeadsetClient.ACTION_CALL_CHANGED 广播中接收(蓝牙相关广播后面单开一篇讲)。
sendDTMF 方法 发送DTMF指令的方法(XX业务请按1,YY业务请按2。按下就是发送DTMF指令)。 入参为设备实例以及指令。指令(ASCII码)为0,1,2,3,4,5,6,7,8,9,A,B,C,D,*,# 中的一个。
connectAudio 方法 连接音频通道。入参为设备实例。 若音频通道连接,则通话时发声端为蓝牙电话端。若音频通道断开,则通话时发声端为手机端。
disconnectAudio 方法 断开音频通道。入参为设备实例。 若音频通道连接,则通话时发声端为蓝牙电话端。若音频通道断开,则通话时发声端为手机端。
结语:
蓝牙电话客户端可以实现电话的基础操作。其中像语音识别、私人模式等功能我并未使用过,如有文中有误,欢迎指正。
|