我目前正在构建一个音板应用程序作为我的第一个小型Android应用程序项目。 我在我的应用程序的assets文件夹中保存了一堆.mp3文件,然后根据存储在那里的.mp3文件动态创建按钮。在每个按钮的标签中,我保存了相应的.mp3文件名。
在每个按钮的onClick()
事件中,我尝试将全局DataSource
的{{1}}设置为我的资产中的文件。 MediaPlayer
完美地处理openFd命令,但mediaPlayer无法设置DataSource。
执行该命令后,应用程序崩溃了。这是FileDescriptor
:
OnClickListener
执行setDataSource()方法时,logcat会打印以下崩溃:
tempButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.release();
String tag = v.getTag().toString();
try {
AssetFileDescriptor afd = getAssets().openFd(tag + ".mp3");
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
}
});
我查看了MediaPlayer.java,因为崩溃似乎发生在那里。 看起来FileDescriptor无效。
答案 0 :(得分:0)
在设置DataSource之前,你不应该release()
MediaPlayer,但应该reset()
它。用mediaPlayer.release();
mediaPlayer.reset();