使用MediaPlayer播放Asset中的Mp3文件,在播完前一首歌,转播下一首歌时,使用

AssetFileDescriptor afd = assetManager.openFd(name);
mediaPlayer.reset();
mediaPlayer.setDataSource(afd.getFileDescriptor());
System.out.println("assetFileDescriptor->startoffset,"+afd.getStartOffset()+"/size,"+afd.getLength());
afd.close();
mediaPlayer.prepare();
mediaPlayer.start();

却发现,每次重新播放,却依然播送是上首歌曲,而不是我想要播放的下一首歌曲。查了半天,网上有人说可能是因为setDataSource引起的。于是改成

mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());

这个时候就没有问题了。有人解释根据android源代码,说是因为setDataSource(FileDescriptor filede)函数里面调用的是setDataSource(FileDescriptor, offset, length)来实现的,其中offset=0, lenght=0x7ffffffffffffff。而从assets中读出来的MP3文件的offset不为0,也就是afd.getStartOffset()不为0,导致出问题的。

但是这种解释也有点牵强,如果第二次使用setDataSource(FileDescriptor)失败,为什么第一次能加载成功,并播放音乐了?目前我也没有很合理的解释,以后有时间再深入研究下。

MediaPlayer无法成功切换歌曲:setDataSource(FileDescriptor fd)的问题相关推荐

  1. Android MediaPlayer各种状态切换

    1.状态图  通过这张图,我们可以知道一个MediaPlayer对象有以下的状态: 1)当一个MediaPlayer对象被刚刚用new操作符创建或是调用了reset()方法后,它就处于Idle状态.当 ...

  2. 安卓Service实现通知栏音乐播放器,切换歌曲,类似QQ音乐

    引言: 这样的一个音乐播放器,用到了安卓四大组件的其中三个,等于说是一个比较综合性的小功能.实现方法其实有很多,我这里给出自己的方法,不喜勿喷. 需求分析 1.音乐播放器,那我们需要一个帮助类,来构建 ...

  3. 乐鑫Esp32学习之旅11 入门 乐鑫esp-adf 音频框架开发,造一个蓝牙耳机,实现切换歌曲,获取歌曲信息等功能。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  4. html 音乐切换不暂停,web-audio-api可视化音乐播放器,实现暂停切换歌曲功能,粉色系专场~...

    可视化的音乐播放器,可戳我观看效果 了解Web-Audio-Api 基础知识 标签是HTML5的新标签,通过添加src属性实现音乐播放. AudioContext是音频播放环境,原理与canvas的绘 ...

  5. html音乐播放器换歌,web-audio-api可视化音乐播放器,实现暂停切换歌曲功能,粉色系专场~...

    可视化的音乐播放器,可戳我观看效果 了解Web-Audio-Api 基础知识 标签是HTML5的新标签,通过添加src属性实现音乐播放. AudioContext是音频播放环境,原理与canvas的绘 ...

  6. 基于Qt的音乐播放器(二)切换歌曲,调节音量,调节语速,暂停

    2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:点击为我投票 文章目录 1.切换歌曲 2.调节音量 3.调节语速 4.播放/暂停 5.我们来看下效果 6.关于上一篇提 ...

  7. Android系统的改进(二) -- 长按音量键作为切换歌曲/频道的快捷键

    在播放歌曲或者广播的时候,过一会后,屏幕会锁住. 如果我们需要切换歌曲或者广播频道时,我们需要电源键-->解锁-->下一个或是上一个. 如果能将长按音量键作为切换歌曲/频道的快捷键,我们就 ...

  8. uniapp - [全端兼容] 音乐列表播放与切换歌曲,点击列表播放 mp3 wav 音乐文件(支持点击播放与暂停,图标切换 / 流畅的切换音频、暂停保留歌曲及恢复功能等详细教程)

    前言 网上教程都太乱了,各种不兼容.功能缺陷等问题,我们很难对示例进行改造. 本文站在新手角度,实现了 uniapp 全平台兼容,歌曲音乐列表点击播放与暂停.切换歌曲等功能(音乐列表多个音频切换), ...

  9. audio通知栏切换歌曲停止播放,怎么破

    问题描述: 音乐播放过程中,切换到应用其他页面时,用后台的状态栏切换音乐时音乐会暂停. 问题分析: 华为audio接口只能在页面中使用,当audio所在的页面退出后,页面销毁,绑定的上下文对象也随之不 ...

最新文章

  1. ASP.NET中绑定枚举类型
  2. 科研必备:10款提升科研效率的神器
  3. 在Sublime Text 3中配置编译和运行Java程序
  4. nodejs(1)---mongodb
  5. jQuery获取时间,一位数则补零
  6. MySQL MMM多主多从搭建
  7. php线上问题排查,线上问题排查神器 Arthas
  8. Java不是文明语言吗?
  9. PhoneGap android环境设置
  10. 利用机器学习实现微信小程序-加减大师自动答题
  11. linux下原始套接字编程错误:Operation not supported
  12. 《R语言初学指南》一1.2 向量
  13. win7打印服务经常无缘无故自动停止print spooler服务停止
  14. 剑指Offer题目汇总(持续更新中...)
  15. 《多基因病的遗传》学习笔记
  16. 台式计算机硬盘能扩大吗,电脑怎么增加磁盘内存
  17. python3爬虫豆瓣_Python爬虫(3)豆瓣登录
  18. 计算机各键的知识,联想电脑各功能键的说明
  19. 《数据仓库与数据挖掘教程》ch01绪论 章节整理
  20. TD源链:让技术回归本质

热门文章

  1. c语言 topk算法,scala写算法-用小根堆解决topK
  2. 计算机国际会议开幕词,国际会议英文开幕词
  3. html矢量图 SVG VML 介绍
  4. 抽象语法树AST的全面解析(一)
  5. shell-定时备份数据库发送至邮箱
  6. 【因果学习】因果推断分析
  7. vuejs 数组定义字段_一个漂亮的文本字段,用于格式化VueJS制作的电话号码
  8. 做事必须搞清10个顺序之我想7.发展:先站住,再站高!
  9. 【bootstrap教程】Bootstrap 工具提示(Tooltip)插件
  10. C ——进程内存(内存管理、内存分配(brk,sbrk、mmap、munmap)、内存常见错误)