2012-01-21 4 views
2

첫 번째 안드로이드 응용 프로그램을 만들려고하고 있는데, 여기에서 달성하고자하는 것은 소리를 재생 한 다음 동일한 버튼을 통해 중지하는 것입니다.Android Mediaplayer Play/Stop help

클릭하면 다시 소리가 나고, 다시 클릭하면 멈추지 만, 소리를 다시 내려면 세 번 클릭하면 재생되지 않습니다.

결국 여기에 몇 가지 소리가 들려서 내 프로젝트가 올바르게 배치되었는지 알고 싶습니다. 어디서나 시간을 절약 할 수 있습니까? 내가 잘못한 길을 찾았 니?

package test.soundy.com; 

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class TestActivity extends Activity { 
private MediaPlayer sound; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    sound = MediaPlayer.create(Test.this, R.raw.sound1); 

    Button test = (Button)this.findViewById(R.id.button1); 
    test.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      if (sound.isPlaying()) { 
       sound.stop(); 
      } else { 
       sound.start(); 
      } 
     } 
    }); 


} 
} 

도움을 주시면 감사하겠습니다.

답변

0

MP 재설정을 시도 했습니까?

if (sound.isPlaying()) { 

       sound.stop(); 
      } else { 
       sound.reset(); 
       sound.prepare(); 
       sound.start(); 
      } 

는 전체 상태 다이어그램은 여기에 ... 편집 : http://developer.android.com/reference/android/media/MediaPlayer.html

+0

sound.setDataSource (params); 무엇을 넣을까요? – Hairzo

+0

setDataSource()를 설정하는 데 문제가 있습니다. 매개 변수 여기서 무엇을 넣어야합니까? – Hairzo

+0

업데이트 된 답변보기 ... – Rotemmiz

6

언제/일시 정지 :

if(sound.isPlaying()){ 
    sound.pause(); 
}else{ 
    sound.start(); 
} 

언제 START/STOP : 또한

if(sound.isPlaying()) { 
    sound.stop(); 
} else { 
    sound.reset(); 
    sound.setDataSource(yourURL); //or InputStream etc. 
    sound.prepare(); 
    sound.start(); 
} 

당신이 sound.seekTo(time)을 사용하여 특정 위치로 건너 뛸 수 있습니다. 새 사운드를 재생하거나 다시 시작하려면 언제든지 reset, setDataSource, preparestart입니다.

편집 : FileDescripter에게

AssetManager assetManager=Context.getAssets(); 
AssetFileDescriptor fileDescriptor = assetManager.openFd("a2.mp3"); 
mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor()); 

편집을 얻을 : 그래서 내가 MediaPlayer를 해제합니다 alse 정적 MediaPlayer를

방법
MediaPlayer mediaPlayer = MediaPlayer.create(Activity.this,R.raw.a1); 
mediaPlayer.setOnCompletionListener(new musicCompletionListener()); 
mediaPlayer.start(); 
private class musicCompletionListener implements OnCompletionListener { 
    @Override 
    public void onCompletion(MediaPlayer mediaPlayer) { 
     mediaPlayer.release(); 
    } 
} 

를 사용 FileDescriptor에에 원시 파일을 설정하는 방법을 발견하지 않았습니다 그것을 멈출 때.

+0

sound.setDataSource (PARAMS); 무엇을 넣을까요? – Hairzo

+0

mnt/sdcard/music/xxx.mp3 또는 인터넷 URL과 같은 음악 경로도 대답에서 편집하는 것과 같은 FileDescriptor가 될 수 있습니다. – JohnCookie

+0

파일 경로가 없는데 파일을 가져 오는 중입니다. R.raw.sound1을 통해 setDataSource가 원시 입력을 받아들이지 않는 것처럼 보입니다. – Hairzo