蓝牙音乐播放状态和歌曲信息不更新

安卓版本android-9 (P版本)

问题现象:歌曲信息和蓝牙音乐的播放状态不更新,蓝牙音乐界面感觉卡死(其实是界面信息不更新,音频数据正常)

歌曲信息和播放状态的更新都是通过avrcp协议的通知事件进行更新的,一般而言avrcp的通知事件只要TG端有变化就会通过changed事件告知CT,具体通知指令如下:
播放状态

歌曲信息

难道是对端手机异常不再主动通知changed事件了?-_- 带着这个怀疑赶紧分析了logcat,发现在某一次的通知TG端回复changed事件后,CT端没有注册新的通知事件到手机,导致后续的changed事件手机都没法通知到设备端。

没有重新注册新的通知事件的原因是没有可用的事务标签号,Avrcp协议中对 Transaction Labels 定义如下:

从协议可知 Transaction Labels 最多支持16条,可同时注册或者等待响应的事件应该限制为15条,而bluedroid中也有如上最多16条的限制,那为何还会资源不足呢?

#define MAX_TRANSACTIONS_PER_SESSION 16

分析代码 handle_avk_rc_metamsg_rsp() 函数中的逻辑,发现其中对于 AVRC_PDU_REGISTER_NOTIFICATION 的changed事件处理逻辑是先注册新的通知事件到TG,最后才会释放前一次使用的Transaction Label,这样必须得有一个可用的Transaction Label在资源池中监听才不会停止。

那在极端状态下(当前16条Transaction Label都在使用中),某一个通知的changed事件回复,在注册新的通知事件时就会没有Transaction Label可用,从而监听就突然停掉,相关信息再也不会更新。

解决方案
对于 AVRC_PDU_REGISTER_NOTIFICATION 事件在changed时先释放 Transaction Label,如此能保证 transaction资源池中至少有一个 ID 是可用的。感兴趣的同学欢迎私信留言一起讨论,共同学习,一起进步!

更多互联互通技术,欢迎关注微信公众号:Connectivity

安卓源码避坑指南10—蓝牙音乐播放状态和歌曲信息不更新相关推荐

  1. 安卓源码避坑指南3——拨打电话的SIM卡无效导致蓝牙断开连接

    安卓源码避坑指南3--拨打电话的SIM卡无效导致蓝牙断连 它来了.它来了,它带着BUG赶来了,欢迎大家查看本期的安卓源码避坑指南.本期的问题场景比较特殊,电话SIM卡是无效的(欠费过期了,很是贫穷-) ...

  2. 安卓源码避坑指南9—AVRCP连接状态异常

    AVRCP连接状态异常 安卓版本:android-9(P版本) 问题现象:断开设备,迟迟没有发出BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED的广播将 ...

  3. mac下编译android源码避坑指南(新)

    截至目前mac环境下android源码编译最新避坑指南 避坑方法 配置(不说配置的都是耍流氓) 下载 编译 烧录 注意事项 避坑方法 源码.SDK.机型版本一定要清楚,有些特殊的版本需要特殊的方法,官 ...

  4. android停止蓝牙音乐服务,蓝牙音乐播放状态一直为暂停态

    安卓源码避坑指南7--蓝牙音乐播放状态一直为暂停态 蓝牙音乐的播放状态是蓝牙音乐等相关应用重点关心的变量,应用根据该状态值(播放.暂停)实时更新界面图标显示.本期就和大家简单分享下蓝牙音乐播放状态上报 ...

  5. 明月浩空播放器php源码,Emlog插件-明月浩空音乐播放器

    源码预览 源码介绍 明月浩空-Html5浮窗音乐播放器是基于QQ音乐.酷狗音乐.网易云音乐等歌曲ID全自动解析的Html5音乐播放器 程序依靠服务器强大的接口功能,只需要一个歌曲ID既可获取歌曲全部信 ...

  6. 【脚本项目源码】Python制作多功能音乐播放器,打造专属你的音乐播放器

    前言 本文给大家分享的是如何通过利用Python实现多功能音乐播放器,废话不多直接开整~ 开发工具 Python版本: 3.6 相关模块: os模块 sys模块 time模块 random模块 PyQ ...

  7. 600多个微信小程序源码_微信小程序在线音乐播放器及源码下载

    引言 自己刚开始学微信小程序的时候,自己做着玩玩的. 现在分享出来给大家学习用用,如果觉得有借鉴意义,我的目的就算达到了. 成果 效果图 废话不多说,直接上效果图: 这里 本来是GIF的图,但是太大了 ...

  8. Android 9.0 10蓝牙音乐获取歌手、歌曲等信息

    Android 9.0中蓝牙音乐其实实现很简单,蓝牙远程服务处理在Bluetooth中. 修改代码路径: android/packages/apps/Bluetooth./jni/com_androi ...

  9. PCB设计--AD18导入二维码避坑指南

    最近准备在PCB尺上面放一个公众号二维码,但是怎么都不清晰,经过我两个晚上的摸索,终于试出来了,简单高效,绝对干货,网上绝大部分都是抄来抄去,省略了很多关键步骤,按照他的步骤不知道到何年马月才能出结果 ...

最新文章

  1. 推荐系统炼丹笔记:阿里推荐算法特征交叉新方式CAN
  2. linux操作系统之信号
  3. tensorflow一元二次函数拟合
  4. steam程序员php玩的游戏,Steam:又一款烧脑的编程游戏上线,宅男回家了也要开心加班!...
  5. 单机 amp; 弱联网手游 防破解、金币改动 简单措施
  6. PHP网页截图-网页快照实现
  7. mysql jsp分页技术_一个非常简单的分页技术MYSQL+JSP 利用了mysql的LIMIT参数
  8. 计算机体系结构与组成的区别
  9. html图书馆占座系统,图书馆选座系统,再也不用担心有人占座啦!
  10. 使用最小二乘法计算多元线性回归的公式推导
  11. 从百度指数到微信指数,我们正进入“数据世界”
  12. Latex 给参考文献添加doi号和超链接
  13. Vue中数组的响应式操作
  14. 罗永浩发声:我的努力很可能失败 但好产品一定要赢
  15. 剧本创作时的标准格式,让你的剧本轻松得到制片公司青睐
  16. 投资中最简单的事--阅读笔记
  17. matebook14支持触摸屏吗_用过华为MateBook 14 2020款,才发现这“屏”真的很优秀
  18. 【以太坊】什么是雷电网络 Raiden network
  19. 在Excel表格中如何设置字体随单元格大小变化
  20. 刚体运动学-四元数插值

热门文章

  1. ubuntu清空回收站命令
  2. Deep Mind 团队论文Playing Atari with Deep Reinforcement Learning复现
  3. 我们怎样才能过好这一生?
  4. 【Jaya算法解决柔性作业车间调度问题(附代码)】
  5. 鸿蒙定时重启软件,谁有自动定时关机开机的软件!求助!
  6. 网络诊断工具ping介绍
  7. 微信小程序之——实现一行滑动显示很多文字-scroll-view
  8. 重要的产品分析模型:AARRR模型
  9. 重装win10遇到的坑
  10. linux投影手机,linux连接投影机方法介绍