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

我尝试播放mp3文件,该文件位于und资产文件夹中。我知道/ res / raw /文件夹还有另一种方法,但是使用资产文件夹,因为稍后我将尝试通过String访问文件。

这段代码可以播放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”重命名为其他名称,以便应用程序可以找到上面代码指定的内容,从而导致没有歌曲播放。因此,这意味着歌曲名称必须存在,尽管它会以字母开头的任意形式将歌曲首放。

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

有人对这个问题有想法吗?

最佳答案

我不认为使用FileDescriptor是执行此操作的正确方法。尝试使用.create()和一个Uri代替:

MediaPlayer mp = MediaPlayer.create(getBaseContext(), songUri);
mp.start();

10-08 05:44
查看更多