无法在mediaplayer中将资产设置为数据源

时间:2017-05-21 20:19:38

标签: android datasource media-player

我目前正在构建一个音板应用程序作为我的第一个小型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无效。

1 个答案:

答案 0 :(得分:0)

在设置DataSource之前,你不应该release() MediaPlayer,但应该reset()它。用mediaPlayer.release();

替换mediaPlayer.reset();