сбой в приложении mp.release - PullRequest
0 голосов
/ 09 мая 2011

Я использую следующий код для воспроизведения звука, и через некоторое время он перестает воспроизводить звуки, это происходит из-за слишком большого количества случаев открытия медиаплеера, я считаю, поэтому я добавил дополнительный 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");

Может кто-нибудь сказать мне, почему это происходит сбой и что мне нужно сделать, чтобы это исправить?

1 Ответ

3 голосов
/ 09 мая 2011

Из документации ,

после освобождения объекта больше нет доступно

Так что вы не можете выполнять какие-либо действия над ним. если вы создаете новый MediaPlayer объект, вам все равно не нужно вызывать release.

Вместо этого вы можете сделать:

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

И объявить MediaPlayer mp; членом класса, а не локальным.

...