我正在使用以下代码播放声音,过一会儿它将停止播放声音,这是因为我相信有太多的Mediaplayer打开实例,所以我添加了一个额外的mp.release();,这只会使我的应用程序崩溃(目前已被注释掉) 。

这是我正在使用的实际代码。

public void audioPlayer(String path, String fileName){
    //set up MediaPlayer
    MediaPlayer mp = new MediaPlayer();
    if (mp!=null){
 //       mp.release();

       }

    try {
        mp.setDataSource(path+"/"+fileName);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        mp.prepare();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    mp.start();

}

并在我的应用中调用它,我使用:
audioPlayer(sdcard + "/soundboard","s1sound1.ogg");

谁能告诉我为什么它崩溃了,我需要怎么做才能修复它?

最佳答案

documentation



因此,您无法对其执行任何操作。如果创建一个新的MediaPlayer对象,则无论如何都不需要调用release。

相反,您可以执行以下操作:

public void audioPlayer(String path, String fileName){
    if (mp != null)
        mp.release();
    mp = new MediaPlayer();
    ....

并将MediaPlayer mp;声明为类成员,而不是本地成员。

10-07 18:13
查看更多