1、A2dpSink类图
A2dpService提供连接断开连接焦点设置等功能。音乐播放停止上曲等操作通过MediaSession回调,
发送指令到AvrcpCommandQueue队列中,然后调用A2dpMediaBrowserService来处理实际的操作。
2 connect a2dp
在Disconnected状态收到CONNECT请求时,通知从断开状态变为正在连接状态,并发起连接connectA2dpNative, 连接命令发送成功则进入Pending状态。保存正在连接的设备mTargetDevice = device;
命令发送失败则通知从正在连接状态转换为断开状态
broadcastConnectionState(device, BluetoothProfile.STATE_DISCONNECTED,
BluetoothProfile.STATE_CONNECTING);
收到手机通知连接状态消息时,Pending处理该消息。如果收到断开消息则通知从正在连接状态变为断开状态即连接失败。状态机转到Disconnected状态
broadcastConnectionState(mTargetDevice, BluetoothProfile.STATE_DISCONNECTED,
BluetoothProfile.STATE_CONNECTING);
如果收到连接消息通知从正在连接状态变为连接状态。状态机转入Connected,保存当前连接的设备mCurrentDevice = mTargetDevice;
broadcastConnectionState(mTargetDevice, BluetoothProfile.STATE_CONNECTED,
BluetoothProfile.STATE_CONNECTING);
3、兼容avrcp client连接消息并更新播放状态信息
手机通知avrcp状态时,如果连接成功则初始化BrowserTree,AvrcpPlayer,并广播消息
ACTION_CONNECTION_STATE_CHANGED,返回上图步骤BroadcastReceiver监听广播消息
进行播放状态的初始化
A2dpMediaBrowserService 的BroadcastReceiver收到avrcp连接成功的广播消息,发送MSG_DEVICE_CONNECT消息到Handle中刷新播放状态。