HFP协议
目前HFP的使用场景有车载蓝牙,耳机和PDA,定义了AG和HFP两种角色。
AG(Audio Gate)音频网关—音频设备输入输出网关
HF(Hands Free)免提—该设备作为音频网关的远程音频输入/输出机制,并可提供若干遥控功能。
在车载蓝牙中,手机侧是AG,车载蓝牙侧是HF,在android源代码中,将AG侧称为HFP/AG,将HF侧称为HFPClient/HF。
手机侧是HF,耳机侧是HFClient
HFClient
设备的角色定义为hfp client,需做如下配置:
<bool name="profile_supported_hs_hfp">false</bool>
<bool name="profile_supported_hfpclient">true</bool>
adb root
adb remount
adb shell setprop persist.vendor.bluetooth.hfp_client true
adb shell getprop persist.vendor.bluetooth.hfp_client
-
HFP client
-
/frameworks/base/core/java/android/bluetooth/BluetoothHeadsetClient.java
-
/frameworks/base/core/java/android/bluetooth/BluetoothHeadsetClientCall.java
-
/packages/apps/Bluetooth/src/com/android/bluetooth/hfpclient/HeadsetClientHalConstants.java
-
/packages/apps/Bluetooth/src/com/android/bluetooth/hfpclient/HeadsetClientService.java
-
/packages/apps/Bluetooth/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachine.java
-
/packages/apps/Bluetooth/jni/com_android_bluetooth_hfpclient.cpp
-
/hardware/libhardware/include/hardware/bt_hf_client.h
-
接下来看一下hfp client的实现,以accept call为例
//3步获取hfp client service
1)BluetoothAdapter mAdapter = BluetoothAdapter.getDefaultAdapter();
2)mAdapter.getProfileProxy(getApplicationContext(),new MServerListener(), BluetoothProfile.HEADSET_CLIENT);
3)public class MServerListener implements ServiceListener {
@Override
public void onServiceConnected(int profile, BluetoothProfile proxy) {
if (profile == BluetoothProfile.HEADSET_CLIENT) {
mclient=(BluetoothHeadsetClient)proxy;
.......
}
}
//app获取hfp client service 的proxy之后,就可以直接调用相应的API进行连接控制与call 控制。
e.g.
mclient.connect( device) //Connects to remote device.
mclient.connectAudio() //Initiates a connection of audio channel, set up SCO channel
mclient.acceptCall(device,0);
mclient.rejectCall(device);
mclient.terminateCall(device,0);