播放扩展文件中的声音文件

Dee*_*eeV 2 android android-mediaplayer android-resources apk-expansion-files

我有一个包含一系列声音文件的扩展文件。较长的为 .mp3 文件,较短的音效为 .wav 文件。我将它们打包在 .zip 文件中,未进行压缩。我使用 Google 提供的 Zip 文件阅读器和下载器库。

我像这样打开声音文件:

MediaPlayer mPlayer;

...
AssetFileDescript asd = expansionFile.getAssFileDescriptor(fileName);
FileDescriptor soundFile = asd.getFileDescriptor();
mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource(soundFile);
mPlayer.prepare();
mPlayer.start();
Run Code Online (Sandbox Code Playgroud)

奇怪的是它每次都播放相同的声音文件。它似乎是它首先发现的任何东西。asd.getDeclaredLength()和的字节大小asd.getLength()正是它应该的大小。这意味着文件描述符至少找到了文件,但由于某种原因 MediaPlayer 播放它决定的任何随机文件。

我在这里到底缺少什么?任何帮助将不胜感激。

谢谢。

小智 5

第一个近似值是正确的,但 zip 文件包含多个文件时除外,那么您应该使用:

mPlayer.setDataSource(asd.getFileDescriptor(), asd.getStartOffset(), asd.getLength());
Run Code Online (Sandbox Code Playgroud)

您可以从另一个问题中获取更多信息: Playaudiofilefromtheassetsdirectory

请记住在将 DataSource 设置为媒体播放器后立即关闭 AssetFileDescriptor:

asd.close();
Run Code Online (Sandbox Code Playgroud)

http://developer.android.com/reference/android/media/MediaPlayer.html#setDataSource%28java.io.FileDescriptor,%20long,%20long%29