以相同的方式调用不同的资产 - 错误

时间:2015-03-16 08:51:21

标签: android android-mediaplayer assets

我在资源文件夹中添加了两个声音文件。一个是“正确”的声音,另一个是“错误”的声音。

我写了两个函数,每个函数都可以播放其中一个playRight()playWrong()

以下是代码:

 public void playWrong(){
        try {
            AssetFileDescriptor descriptor = getAssets().openFd("Wrong");
            MediaPlayer m = new MediaPlayer();
            m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
            descriptor.close();

            m.prepare();
            m.start();
        }catch (IOException e){
        }
    }

    public void playRight(){
        try {
            AssetFileDescriptor descriptor = getAssets().openFd("Right");
            MediaPlayer m = new MediaPlayer();
            m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
            descriptor.close();

            m.prepare();
            m.start();
        }catch (IOException e){
        }
    }

启动功能playWrong()工作正常,我可以听到声音。但是开始playRight()让我有一个例外,虽然在我看来这两个函数应该以相同的方式工作。

有人看到我的错误吗?

1 个答案:

答案 0 :(得分:0)

尝试此功能

public void playRight() {
try {
    if (m.isPlaying()) {
        m.stop();
        m.release();
        m = new MediaPlayer();
    }

    AssetFileDescriptor descriptor = getAssets().openFd("Right.mp3");
    m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
    descriptor.close();

    m.prepare();       
    m.start();
} catch (Exception e) {
    e.printStackTrace();
}

}