2014-10-17 2 views
0

나는이 사이트에서 찾을 수있는 모든 예제를 시도했지만 제대로 작동하지 않을 수 있습니다. 버튼을 눌러 mp3 파일을 시작한 경우 다른 버튼을 누르면 이전 mp3가 중지되고 새 mp3 파일이 시작되도록해야합니다.다른 버튼에서 mp3 재생 중지 및 종료 페이지

페이지에서 탐색 할 때 중지해야합니다.

내가 잘못하고있는 것을 누구든지 볼 수 있습니까?

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

    public class buttontofirstaidaed extends Activity implements OnClickListener{ 
     private MediaPlayer mp1; 
     private MediaPlayer mp2; 
     private MediaPlayer mp3; 
     private MediaPlayer mp4; 
     private MediaPlayer mp5; 
     private MediaPlayer mp6; 

     @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.firstaidaed); 
     setVolumeControlStream(AudioManager.STREAM_MUSIC); 
     Button buttonaed1=(Button)findViewById(R.id.button_aed1); 
     Button buttonaed2=(Button)findViewById(R.id.button_aed2); 
     Button buttonaed3=(Button)findViewById(R.id.button_aed3); 
     Button buttonaed4=(Button)findViewById(R.id.button_aed4); 
     Button buttonaed5=(Button)findViewById(R.id.button_aed5); 
     Button buttonaed6=(Button)findViewById(R.id.button_aed6); 

     buttonaed1.setOnClickListener(this); 
     buttonaed2.setOnClickListener(this); 
     buttonaed3.setOnClickListener(this); 
     buttonaed4.setOnClickListener(this); 
     buttonaed5.setOnClickListener(this); 
     buttonaed6.setOnClickListener(this); 

    } 

    public void onClick(View v) { 
     int resId1; 
     int resId2; 
     int resId3; 
     int resId4; 
     int resId5; 
     int resId6; 

     switch (v.getId()) { 

     case R.id.button_aed1: 
      resId1 = R.raw.aed1; 
      if(mp1!=null) { mp1.release(); } mp1 = MediaPlayer.create(this, resId1); mp1.start(); 
      break; 

     case R.id.button_aed2: 
      resId2 = R.raw.aed2; 
      if(mp2!=null) { mp2.release(); } mp2 = MediaPlayer.create(this, resId2); mp2.start(); 
      break; 

     case R.id.button_aed3: 
      resId3 = R.raw.aed3; 
      if(mp3!=null) { mp3.release(); } mp3 = MediaPlayer.create(this, resId3); mp3.start(); 
      break; 

     case R.id.button_aed4: 
      resId4 = R.raw.aed4; 
      if(mp4!=null) { mp4.release(); } mp4 = MediaPlayer.create(this, resId4); mp4.start(); 
      break; 

     case R.id.button_aed5: 
      resId5 = R.raw.aed5; 
      if(mp5!=null) { mp5.release(); } mp5 = MediaPlayer.create(this, resId5); mp5.start(); 
      break; 

     case R.id.button_aed6: 
      resId6 = R.raw.aed6; 
      if(mp6!=null) { mp6.release(); } mp6 = MediaPlayer.create(this, resId6); mp6.start(); 
      break; 

     } 

    } 

} 
+0

모든 물건 – koutuk

+0

질문 정교한하시기 바랍니다. 난 firstaidaed라는 XML 페이지가 있습니다. 페이지에는 6 개의 버튼이있어 모두 제세 동기가 만드는 것과 다른 사운드를 재생합니다. 하나의 버튼을 클릭하면 mp3가 재생되기 시작하지만 다른 버튼을 클릭하면 첫 번째 사운드는 두 번째 사운드뿐만 아니라 계속 재생됩니다. 페이지에서 다른 곳으로 이동하면 사운드가 계속 재생됩니다. –

+0

안녕 Koutuk에 대해 하나의 MediaPlayer를 (예를 들어, 싱글 톤 패턴)을 가질 수 – Andrew

답변

0

모든 사운드에 대해 동일한 MediaPlayer를 사용하지 않는 이유는 무엇입니까?

그런 다음 모든 버튼을 클릭하고 중지 한 다음 해당 미디어로 다시 초기화하십시오.

라이브 MediaPlayer주기를 살펴보십시오. 그것은의 xD

http://developer.android.com/reference/android/media/MediaPlayer.html

지금은 고정이

private MediaPlayer genericMediaPlayer = null; 
public void onClick(View v) { 
    if(genericMediaPlayer == null) { 
     genericMediaPlayer = MediaPlayer.create(this);  
    } else { 
     genericMediaPlayer.stop(); 
    } 

    FileDescriptor audio = null; 

    switch (v.getId()) { 

    case R.id.button_aed1: 
     audio = getResources().openRawResourceFd(R.raw.audio1).getFileDescriptor(); 
     break; 

    case R.id.button_aed2: 
     audio =getResources().openRawResourceFd(R.raw.audio3).getFileDescriptor(); 
     break; 

    case R.id.button_aed3: 
     audio = getResources().openRawResourceFd(R.raw.audio3).getFileDescriptor(); 
     break; 

    case R.id.button_aed4: 
     audio = getResources().openRawResourceFd(R.raw.audio4).getFileDescriptor(); 
     break; 

    case R.id.button_aed5: 
     audio = getResources().openRawResourceFd(R.raw.audio5).getFileDescriptor(); 
     break; 

    case R.id.button_aed6: 
     audio = getResources().openRawResourceFd(R.raw.audio6).getFileDescriptor(); 
     break; 

    } 
    if(audio != null){ 
     genericMediaPlayer.setDataSource(audio); 
     genericMediaPlayer.prepare(); 
     genericMediaPlayer.start(); 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 해당 코드를 입력하면 genericMediaPlayer = MediaPlayer.create (this); 작성에는 오류로 밑줄이 그어져 있습니다. 이클립스가 가져온 제안 된 수정 사항을 사용하면 페이지가 열리지 만 비어 있습니다. – Andrew

+0

나는 그것을 확인하지 않았다. new MediaPlayer()로 MediaPlayer.create (this)를 변경하십시오. – jDur

+0

흠, 그건 두려워하지 않았어. 하단에 대괄호를 추가해야합니다. 대괄호를 추가하면 genericMediaPlayer.setDataSource (audio) 밑줄이 그어집니다. genericMediaPlayer.prepare(); catch 블록을 추가하면 사운드가 전혀 재생되지 않습니다. 또한 @Override를 입력해야했습니다. protected void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.firstaidaed); 페이지를 열려면. 정말 당황 스럽네. – Andrew

0

모든처럼 뭔가를하려고 처음에 미친 보이는 다른 문제에 대한 링크는이 문제를 해결했다. 도와 줘서 고마워.

0

를 사용하여 같은 미디어 플레이어 및 클릭 할 때마다 사용의 시작에 :

if (player!=null) { 
    player.stop(); 
} 
player = MediaPlayer.create(this, R.raw.recording); 
start();