通过前面的 Avrcp 协协议的学习,我们知道蓝牙音乐的控制是通过媒体播放器进行的。而媒体播放器的数据发生变化时会通过 MediaSeesion 通知客户端,本篇文章主要分析一下歌曲信息是如何传递的。
Avrcp 协议
首先歌曲信息发生变化,我们会在 AvrcpControllerService 的 onTrackChanged 中收到回调。
AvrcpControllerService
源码位置:/packages/apps/Bluetooth/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerService.java
// 当一个轨道发生变化并且本地AvrcpController注册更新时由JNI调用。
private synchronized void onTrackChanged(byte[] address, byte numAttributes, int[] attributes, String[] attribVals) {
BluetoothDevice device = getAnonymousDevice(address);
AvrcpControllerStateMachine stateMachine = getStateMachine(device);
if (stateMachine != null) {
AvrcpItem