android 개발java.lang.IllegalStateException at android.media.MediaPlayer._prepare(Native Method)

최근에 문제가 발생했습니다. 서비스에서 음악을 재생할 때 Illegal State Exception 이상이 발생했습니다. 코드는 다음과 같습니다.
protected void play() {
        System.out.println("play");
        mpMediaPlayer = MediaPlayer.create(this, R.raw.dd);
        try {
            mpMediaPlayer.prepare();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }
        mpMediaPlayer.start();
        mpMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {//      
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                mpMediaPlayer.start();
                mpMediaPlayer.setLooping(true);
            }
        });
    }

error:
08-16 14:47:09.822 21109-23341/com.shangyi.supplier W/System.err: java.lang.IllegalStateException
08-16 14:47:09.822 21109-23341/com.shangyi.supplier W/System.err:     at android.media.MediaPlayer._prepare(Native Method)
08-16 14:47:09.822 21109-23341/com.shangyi.supplier W/System.err:     at android.media.MediaPlayer.prepare(MediaPlayer.java:1193)
08-16 14:47:09.822 21109-23341/com.shangyi.supplier W/System.err:     at com.shangyi.service.SupplierService.play(SupplierService.java:139)
08-16 14:47:09.822 21109-23341/com.shangyi.supplier W/System.err:     at com.shangyi.service.SupplierService$1.run(SupplierService.java:61)
08-16 14:47:09.822 21109-23341/com.shangyi.supplier W/System.err:     at java.lang.Thread.run(Thread.java:833)

재생도 가능하지만 이상이 있으면 기분이 나빠요. 원인을 찾았어요. 자바에 있는 미디어플레이어 대상의 상태와native의 대상의 상태가 일치하지 않는다고 했어요. 미디어플레이어의 is플레이잉 방법이 일으킨 거라고 했는데 나중에 바꿨어요.
protected void play() {
        System.out.println("play");
        mpMediaPlayer = MediaPlayer.create(this, R.raw.dd);
        try {
//            mpMediaPlayer.prepare();

            if(mpMediaPlayer.isPlaying()){
                mpMediaPlayer.stop();
                mpMediaPlayer.release();
                mpMediaPlayer = MediaPlayer.create(this, R.raw.dd);
            }

            mpMediaPlayer.start();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
        mpMediaPlayer.start();
        mpMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {//      
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                mpMediaPlayer.start();
                mpMediaPlayer.setLooping(true);
            }
        });
    }

좋은 웹페이지 즐겨찾기