Android 蓝牙实战——蓝牙音乐播放进度(二十)

        对于蓝牙音乐的开发来说,播放进度是一个比较重要的数据参数,这里我们就来分析一下蓝牙音乐播放进度的相关回调。

一、回调流程

1、AvrcpControllerService

源码位置:/packages/apps/Bluetooth/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerService.java

// 由JNI基于计时器周期性地调用以更新播放位置
private synchronized void onPlayPositionChanged(byte[] address, int songLen, int currSongPosition) {if (DBG) {Log.d(TAG, "onPlayPositionChanged pos " + currSongPosition);}BluetoothDevice device = getAnonymousDevice(address);AvrcpControllerStateMachine stateMachine = getStateMachine(device);if (stateMachine != null) {stateMachine.sendMessage(AvrcpControllerStateMachine.MESSAGE_PROCESS_PLAY_POS_CHANGED,songLen, currSongPosition);}
}

        该回调主要接收状态机返回的进度信息,记住这里的相关 Log,对 Bug 分析很有帮助。这里通过 MESSAGE_PROCESS_PLAY_POS_CHANGED 消息将当前进度发送到状态机。

2、AvrcpControl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/7495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Agent AI智能体的未来探讨

背景 Agent AI智能体,作为人工智能技术的一种重要形态,正逐渐融入我们的日常生活并扮演着越来越重要的角色。随着技术的不断发展和智能化水平的提高,Agent AI在未来社会中的角色、发展路径以及其它方面可能带来的挑战备受广泛关注。本…

代码随想录算法训练营第四十五天| 70. 爬楼梯 (进阶), 322. 零钱兑换,279.完全平方数

目录 题目链接:70. 爬楼梯 (进阶) 思路 代码 题目链接:322. 零钱兑换 思路 代码 题目链接:279.完全平方数 思路 代码 总结 题目链接:70. 爬楼梯 (进阶) 思路 依旧是转换成…

package.json.依赖版本修改判断

package.json. 的dependencies已经改了axios版本"axios": “^1.6.8”, 查看dist\cdn\axios\1.0.0\axios.min.js中内容还是:/* axios v0.17.1 | © 2017 by Matt Zabriskie */以为没有更新axios版本 查看当前项目使用的包以及版本,不包括依…

自然语言处理: RAT = CoT + RAG

Retrieval Augmented Thoughts (RAT) 是一种协同思维链 (CoT) 和检索增强生成 (RAG) 的 AI 提示策略,助力解决具有挑战性的长任务推理和生成。 RAG 有关于RAG的介绍可以参考我之前的博文: 自然语言处理: 第十五章RAG(Retrieval Augmented Generation) 开发能够像人…

DCEP数字人民币:中国法定区块链中数字货币

一、背景 作为全球第二大经济体,中国在数字货币领域的发展一直备受关注。近年来,中国政府积极推动数字货币的研究和试点工作,逐步开放数字货币交易试点,并计划推出中国唯一合法数字货币——数字人民币(RMB Coin&#…

论文| Visual place recognition: A survey from deep learning perspective

2021-Visual place recognition: A survey from deep learning perspective

Broadwell,Broadwell-IBRS,Broadwell-noTSX,Broadwell-noTSX-IBR之间的区别

Broadwell是Intel第五代微架构的处理器系列,基于14纳米制程技术,是对前代Haswell架构的工艺改进(即“Tick”阶段),主要特点是提高了能效和降低了功耗,同时在一定程度上提升了性能。它是为笔记本电脑、移动设…

Spring框架中的ClassUtils工具类深度解析

1. 概述 ClassUtils是Spring框架中提供的一个工具类,主要用于简化Java反射API的使用,提供了一系列便捷的方法来处理类相关的操作,比如获取类的包名、获取类的简单名称、判断类是否可实例化等。 2. 用途 ClassUtils的主要用途包括&#xff1…

一个快速在线生成二维码的工具,文件在线预览,在线报名,在线二维码设计,在线二维码生成器,扫一扫二维码在线预览

在数字化时代,二维码已经成为我们生活中不可或缺的一部分。无论是支付、身份识别,还是信息分享,二维码都以其便捷、高效的特点赢得了广大用户的青睐。然而,对于普通用户而言,如何快速、简单地生成和管理二维码却是一个…

5分钟掌握Pydantic

数据模型定义:使用 Python 类来定义数据模型,这些类可以自动将输入转换为 Python 数据类型。 from pydantic import BaseModelclass User(BaseModel):id: intname: stremail: str类型检查:Pydantic 强制执行类型检查,确保传入的数…

小旋风蜘蛛池优化版

下载地址:小旋风蜘蛛池.zip 配置的时候需要做伪静态 #如果用的是宝塔面板设置伪静态,则去掉 第一行 的 location / { 和最后一行的 } location / { rewrite ^/template/(.*)\.html$ /index.php last; rewrite ^/temp/(data|db|robotlog|tplrules|errp…

前端css中animation(动画)的使用

前端css中animation的使用 一、前言二、主要内容说明(一)、animation-name(名称)属性(二)、animation-duration(持续时间)属性1.前两个属性举例,源码12.源码1运行效果&am…

Redis线程模型

文章目录 💖 Redis 单线程模型⭐ 单线程监听大量的客户端连接⭐ Redis 6.0 之前为什么不用多线程? 💖 Redis多线程⭐ Redis 后台线程⭐ Redis 网络IO多线程 对于读写命令来说,Redis 一直是单线程模型。不过,在 Redis 4…

SinoDB数据库的RAW TABLE

RAW表是不记录日志的永久表,类似于无日志模式数据库中的表。对于RAW表,支持对其进行更新、插入和删除操作,但日志是不会记录这些操作。可以在RAW表上定义索引,但不能在RAW表上定义唯一约束、主键约束或引用约束(refere…

语音识别之特征提取与起始检测

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

关闭前端统一请求库设计与落地

前言 对于一个前端工程师而言,每天都在面对的较多的需求场景就是调用后端的接口,但是因为众所周知的原因,前端目前已经有无数种调用接口的方式,例如:之前有基于 XHR、Axios、Fetch 进行封装的工具,大家都试…

2-qt之信号与槽-简单实例讲解

前言、因实践课程讲解需求,简单介绍下qt的信号与槽。 一、了解信号与槽 怎样使用信号与槽? 概览 还记得 X-Window 上老旧的回调函数系统吗?通常它不是类型安全的并且很复杂。(使用)它(会)有很多…

prometheus+grafana的安装与部署及优点

一、Prometheus 的优点 1、非常少的外部依赖,安装使用超简单; 2、已经有非常多的系统集成 例如:docker HAProxy Nginx JMX等等; 3、服务自动化发现; 4、直接集成到代码; 5、设计思想是按照分布式、微服…

springboot webscoket示例:增加定时心跳逻辑

websocket服务端增加定时发送心跳机制 ServerEndpoint(value "/websocket/{uuid}") Component public class DevMessageHandleController {private static final Logger logger LoggerFactory.getLogger(DevMessageHandleController.class);//concurrent包的线程安…

数组扁平化

数组扁平化 输入&#xff1a;[1,[2,[3,5],5],6] 输出&#xff1a;[1,2,3,4,5,6] 方法一&#xff1a;递归 const transformArray (arr, res) > {for (let i 0; i < arr.length; i) {if (arr[i] instanceof Array) {transformArray(arr[i], res)} else {res.push(arr…