Android MediaPlayer 的 getDuration() 方法从元数据而不是实际媒体长度中获取值

标签 android android-mediaplayer

我正在开发一款应用,用户可以在该应用中通过 MediaPlayer 播放音乐。

我遇到的问题是,当调用 getDuration() 方法时,用户编辑过的媒体文件给出了不正确的值。我做了一些实验,似乎经常当用户使用音频编辑工具编辑歌曲时,元数据(包括歌曲长度)保持不变。这导致媒体播放器将歌曲视为 3 分钟的歌曲,但实际上只有 30 秒。这是一个大问题,因为许多用户会在应用的媒体播放器中使用铃声或其他歌曲 fragment ,这将导致进度条和显示歌曲长度的 TextView 不正确。

显然,我无法控制人们在使用我的应用程序之前使用的音频编辑工具的种类。我可以在应用端做些什么来提供准确的 getDuration() 值吗?

谢谢!

最佳答案

以编程方式对媒体文件所做的修改不会反射(reflect)在 MediaScanner 中。因此,如有必要,您可以尝试在应用程序启动时重新扫描媒体存储。引用https://groups.google.com/group/android-developers/browse_thread/thread/cf41cc88b6eb4393 .

关于Android MediaPlayer 的 getDuration() 方法从元数据而不是实际媒体长度中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10792929/

相关文章:

android - 如何在 Xamarin.Android 中保持 Button.Pressed 状态?

android - 另一种类型的变量和动态值

android - 如何修复屏幕顶部的布局

java - 尝试制作一个圆形布局,其中的元素以不同的距离围绕中心定位

java - 在 Activity 之间停止和播放 MediaPlayer

android - 如何检测我的应用程序的更新在 google play 上可用?

android - 如何在我杀死应用程序后继续播放音乐

java - 使用服务在后台使用媒体播放器是好的做法还是有必要

Android FFmpegMediaPlayer - MediaPlayer 错误(0, 0)

android - 简单的媒体播放器从文件路径播放 mp3?