我是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();