本文档主要介绍的内容:
1:Phone和BluetoothHeadset的交互
2:BluetoothHfp的功能介绍
Phone和BluetoothHeadset的交互:
蓝牙耳机与Phone的交互主要体现在以下几个方面:
1:挂断电话
2:接听电话
3:通话中使用蓝牙音频通道
4:拨打电话
处理流程图(图1):
1-2:BluetoothPhoneService在Telecome中,是被自动启动的一个service,常驻内存,一直为Phone与蓝牙的交互进行服务。其内部成员实现IBluetoothHeadsetPhone.Stub了,在HeadsetStateMachine中
bind BluetoothPhoneService,获取IBluetoothHeadsetPhone.Stub的代理,代理对象就是蓝牙和Phone的交互接口。
3:在HeadsetStateMachine中进行拨号,会使用Intent.ACTION_CALL_PRIVILEGED启动拨号流程,使用蓝牙耳机拨号拨出的是前一次的号码
4-16:通过获取IBluetoothHeadsetPhone的代理来调用BluetoothPhoneService中已实现的IBluetoothHeadsetPhone.Stub的方法进行接听,挂断,dtmf信号发送,保持通话。
Phone模块对Bluetooth相关的一些初始化及监听:
图形分析:
1&3-6:在BluetoothPhoneService中注册了对BluetoothAdapter.ACTION_STATE_CHAN
GED 的监听,当蓝牙状态发生变化时这里会搜到广播,根据收到的Intent中信息判断蓝牙是否开启,开启的话会跟据当前Call的状态更新蓝牙耳机的状态.最终会在HeadsetStateMachine中调用native方法进行处理.
2:在BluetoothManager中注册了BluetoothHeadset.ACTION_CONNECTION_STATE_CH
ANGED 和BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED的监听;
7-8:BluetoothHeadset的连接状态或音频状态发生变化时都会发出广播,在BluetoothMa
nager中收到广播后都会进行处理,通过判断当前的AudioState状态来进行设置。
AudioState是Frameworks/.../Telecomm:下定义的,用来存储Phone相关的声道状态:
其内部定义的常量用来判断使用哪种声道模式:
ROUTE_EARPIECE
ROUTE_BLUETOOTH
ROUTE_WIRED_HEADSET
ROUTE_SPEAKER
9&11-14:打开或关闭蓝牙声道,使用BluetoothHeadset对象进行处理,最终会在HeadsetSt
ateMachine中调用native方法进行处理
10:打开或关闭外放模式,会使用AudioManager的setSpeakerphoneOn进行设置
BluetoothHfp的功能介绍:
BluetoothHfp功能体现在让蓝牙设备控制电话,接听,挂断,拒接,语音拨号,其功能交互过程主要由HeadsetStateMachine使用IBluetoothHeadsetPhone.Stub的代理对象与BluetoothPhoneService交互完成,流程图同“图1”。