마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

MediaPlayer(미디어플레이어) 사용할 때, prepareAsync() 사용에 대한 질문입니다.

0 추천

미디어플레이어를 사용해서 간단한 mp3을 재생하는 기능을 구현하고 있었습니다.

그런데, prepareAsync를 사용하면 앱이 다운되어 버립니다. 

mp_bgm이라는 미디어플레이어 객체에 R.raw.s2를 적용시킨 다음 

setOnPreparedListner로 준비가 되는 순간 재생(mp..start)시키고 무한반복을 시키는 개념입니다.

그런데 create이후로 재생준비가 안되었을걸 대비해 mp_bgm.prepareAsync를 넣었더니 이 기능을 

사용하는 즉시 앱이 꺼집니다. 이런 개념으로 사용하는 게 아니라서 그런건지 잘 모르겠습니다.

감사합니다.

 mp_bgm = MediaPlayer.create(GameScreen.this,R.raw.s2);
 mp_bgm.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){
     public void onPrepared(MediaPlayer mp){
         mp.start();
         mp.setLooping(true);
     }
 });
// mp_bgm.prepareAsync();
 
ACA (220 포인트) 님이 2016년 11월 29일 질문
에러 메세지는 없나요?

1개의 답변

0 추천

MediaPlayer의 Create에 대한 실제 구현을 보시면 아래와 같이 prepare를 호출 합니다.

따라서 prepareAsync 를 호출하면,  prepare, prepareAsync가 각각 호출 되서 

오류가 날 수 밖에 없습니다. 

Create를 사용하지 말고, 직접 생성하여 호출하는 방식으로 사용하시던지. prepareAsync 기능을 빼시는게 좋을 듯 합니다.

    public static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder,
            AudioAttributes audioAttributes, int audioSessionId) {

        try {
            MediaPlayer mp = new MediaPlayer();
            final AudioAttributes aa = audioAttributes != null ? audioAttributes :
                new AudioAttributes.Builder().build();
            mp.setAudioAttributes(aa);
            mp.setAudioSessionId(audioSessionId);
            mp.setDataSource(context, uri);
            if (holder != null) {
                mp.setDisplay(holder);
            }
            mp.prepare();
            return mp;
        } catch (IOException ex) {
            Log.d(TAG, "create failed:", ex);
            // fall through
        } catch (IllegalArgumentException ex) {
            Log.d(TAG, "create failed:", ex);
            // fall through
        } catch (SecurityException ex) {
            Log.d(TAG, "create failed:", ex);
            // fall through
        }

        return null;
    }

익명사용자 님이 2016년 11월 30일 답변
좋은 답변 감사합니다! 덕분에 또 하나 알아갑니다.
...