2014-03-02 4 views
0

간단한 미디어 플레이어 응용 프로그램을 만들고 있습니다. 그것은 사용자가 단지 연주 될 노래의 정확한 이름을 입력하고 재생할 재생 버튼 (ib1)을 누르는 텍스트 필드 (et)를 포함합니다. 노래는 SD 카드에 저장됩니다. 내 코드 :미디어 플레이어의 오류 (-38.0)

ib1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final String value = et.getText().toString(); 
      String full_path = "/mnt/media_rw/sdcard/mymusic/" + value + ".mp3"; 
      et.setText(""); 

      mp = new MediaPlayer();      
      mp.setDataSource(full_path); 
      mp.prepare(); 
      mp.start();        


} }); 

하지만 Media Player 오류 (-38.0)가 발생합니다. 오류 (1, -2147483648)를 생산,

mp.setDataSource(full_path); 
mp.setOnPreparedListener(null); 
mp.prepareAsync(); 
mp.start(); 

그러나 중 하나가 작동하지 않습니다 : 그래서, Media Player called in state 0, error (-38,0)을 다음과 내가 함께 MP 라인을 대체하기 위해 노력했다. 누군가 나를 도울 수 있거나 코드에 대한 제안을 할 수 있습니까? 고마워요

+0

은 SDCARD를 사용하는 당신처럼 보인다, 당신은 외부 저장 권한에서 적절한 읽기를 추가 했습니까? –

+0

음, 진실은 아니요/ –

답변

0

onPrepared 메서드에서 listener를 사용하여 mediaPlayer.start()를 호출해야합니다. 준비 상태에 도달하기 전에 mp.start()를 호출하기 때문에이 오류가 발생합니다. 여기

당신이 그것을 할 수있는 방법은 다음과 같습니다

mp.setDataSource(full_path); 
mp.setOnPreparedListener(this); 
mp.prepareAsync(); 

public void onPrepared(MediaPlayer player) { 
player.start(); 
} 
+0

도움을 주셔서 감사합니다.하지만 난 아직도 어떻게하는지 이해하지 못했습니다. onPrepared 메소드를 작성하고, mp.prepareAsync(); 이후에 onPrepared (mp)를 호출하여이 메소드를 호출해야합니다. ? –

+0

mp.setOnPreparedListener (새 OnPreparedListener() {@override} public void onPrepared (MediaPlayer player {player.start();}); mp.prepareAsync(); 다음에이 줄을 추가하십시오. , 나는 해결책을 얻은 것 같아. –

관련 문제