2

我是 Java/Android 编程的新手,所以请耐心等待。

我尝试播放位于资产文件夹下的 mp3。我知道 /res/raw/ 文件夹还有另一种方法,但使用 assets-folder 因为稍后我将尝试通过字符串访问该文件。

此代码可用于播放 mp3 文件:

        try
    {
        MediaPlayer mp = new MediaPlayer(); 
        FileDescriptor sfd = getAssets().openFd("song.mp3").getFileDescriptor(); 


        mp.setDataSource(sfd); 
        mp.prepare(); 
        mp.start();
    }
    catch(Exception e) {}

现在的问题:在同一个资产文件夹中存储了另一个 mp3 文件。虽然我指定了 mp3 的名称来使用它,但要使用字母表中第一个的名称。例如,另一个文件名为“music.mp3”,它播放这个文件。将其重命名为“worldmusic.mp3”,它将播放“song.mp3”。将“worldmusic.mp3”重命名为“music.mp3”,它将再次使用此 mp3。另一项测试:将“song.mp3”重命名为其他名称,以便应用程序可以找到上面代码指定的内容,这将导致不播放歌曲。所以这意味着歌曲名必须存在,尽管它在字母表中将任意歌曲放在首位。

我正在使用 Eclipse 的 AVD 模拟器进行测试。但我认为在真实设备上的行为是相同的。

有人知道这个问题吗?

4

2 回答 2

0

我不相信使用 FileDescriptor 是正确的方法。尝试使用.create()and 一个 Uri 代替:

MediaPlayer mp = MediaPlayer.create(getBaseContext(), songUri);
mp.start();
于 2010-10-18T13:40:12.423 回答
0

不知道为什么,但 URI 语法似乎不适用于资产。尝试获取 AssetFileDescriptor,如相关问题中所回答:

从资产目录播放音频文件

于 2011-10-16T06:29:14.370 回答