Android 9 原生设置关于蓝牙设置(六)

蓝牙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。
在这里插入图片描述
发送广播,但原生设置代码没有对它处理。

猜你喜欢

转载自blog.csdn.net/suwen8100/article/details/126706805