蓝牙A2DP Sink连接
??打开蓝牙并允许蓝牙可被检测到,然后用手机连接此设备,进行A2DP Sink连接,连接时调用com_android_bluetooth_a2dp_sink.cpp bta2dp_connection_state_callback() ??-->A2dpSinkStateMachine.java onConnectionStateChanged() 发送EVENT_TYPE_CONNECTION_STATE_CHANGED广播 ??-->A2dpSinkStateMachine.java Disconnected.processConnectionEvent() ??当前状态是Disconnected,新状态是CONNECTION_STATE_CONNECTING,: ??上面代码首先做一些音频相关的处理(这里不分析它),然后发送广播MSG_CONNECTION_STATE_CHANGED、切换状态到Pending。 ??-->A2dpSinkStateMachine.java IntentBroadcastHandler.handleMessage() ??-->A2dpSinkStateMachine.java IntentBroadcastHandler.onConnectionStateChanged() ??发送广播CONNECTION_STATE_CHANGED,不过这个广播最终没有被处理(所以Setting软件界面没有更新)。最后调用Profile.notifyProfileConnectionStateChanged()。
??接着com_android_bluetooth_a2dp_sink.cpp bta2dp_audio_config_callback()被调用: ??此时状态是Pending: ??调用processAudioConfigEvent(),通知音频格式的变化。 ??
??接着com_android_bluetooth_a2dp_sink.cpp bta2dp_connection_state_callback()再被调用: 此时状态是Pending: ??和前面一样调用AudioManager.setBluetoothA2dpDeviceConnectionState(),不过因状态变成Connected,所以会进行一些音频切源操作。然后发送广播,Setting应用并没有处理它。最后将状态切为Connected。 发送广播,但原生设置代码没有对它处理。
|