我是Java / Android编程的新手,所以请耐心等待我。
我尝试播放一个位于资源文件夹中的mp3。我知道/ res / raw /文件夹有另一种方法,但是使用assets-folder,因为稍后我会尝试通过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”重命名为其他内容,以便应用程序可以找到上面代码指定的内容,这样就不会播放任何歌曲。因此,这意味着歌曲名称必须存在,尽管它首先用字母表随意播放歌曲。
我正在使用eclipse的AVD模拟器进行测试。但我认为在真实设备上的行为是一样的。
有人知道这个问题吗?
答案 0 :(得分:0)
我不相信使用FileDescriptor是正确的方法。请尝试使用.create()
和Uri:
MediaPlayer mp = MediaPlayer.create(getBaseContext(), songUri);
mp.start();
答案 1 :(得分:0)
不确定原因,但URI语法似乎不适用于资产。尝试获取AssetFileDescriptor,如相关问题中所述: