2017-10-10 111 views
0

我很難過,我引用了很多其他的帖子。我並不是要求任何人完成我的代碼,而只是指出我要出錯的地方,並引導我走向正確的方向。我想單擊圖像按鈕時播放音頻文件,但在單擊另一個圖像按鈕時會停止播放。我遇到的問題是如果我按下所有圖像按鈕,他們將同時播放音頻。android一次播放一個聲音

package com.application.cats.catsshapecolorapp; 

import android.content.Context; 
import android.media.MediaPlayer; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageButton; 


public class ColorPage extends AppCompatActivity { 


Context context = this; 
MediaPlayer mpPurple,mpBlue,mpRed,mpGreen,mpYellow,mpPink; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_color_page); 

    mpPurple = MediaPlayer.create(context, R.raw.purpleaudiotest); 
    ImageButton purpleB = (ImageButton) findViewById(R.id.purpleButton); 
    purpleB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      try { 
       if (mpPurple.isPlaying()) { 
        mpPurple.stop(); 
        mpPurple.release(); 
        mpPurple = MediaPlayer.create(context, R.raw.purpleaudiotest); 
       } mpPurple.start(); 
      } catch(Exception e) { e.printStackTrace(); } 
     } 
    }); 

    mpBlue = MediaPlayer.create(context, R.raw.blueaudiotest); 
    ImageButton blueB = (ImageButton) findViewById(R.id.blueButton); 
    blueB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      try { 
       if (mpBlue.isPlaying()) { 
        mpBlue.stop(); 
        mpBlue.release(); 
        mpBlue = MediaPlayer.create(context, R.raw.blueaudiotest); 
       } mpBlue.start(); 
      } catch(Exception e) { e.printStackTrace(); } 
     } 
    }); 

    mpRed = MediaPlayer.create(context, R.raw.redaudiotest); 
    ImageButton redB = (ImageButton) findViewById(R.id.redButton); 
    redB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      try { 
       if (mpRed.isPlaying()) { 
        mpRed.stop(); 
        mpRed.release(); 
        mpRed = MediaPlayer.create(context, R.raw.redaudiotest); 
       } mpRed.start(); 
      } catch(Exception e) { e.printStackTrace(); } 
     } 
    }); 

    mpGreen = MediaPlayer.create(context, R.raw.greenaudiotest); 
    ImageButton greenB = (ImageButton) findViewById(R.id.greenButton); 
    greenB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      try { 
       if (mpGreen.isPlaying()) { 
        mpGreen.stop(); 
        mpGreen.release(); 
        mpGreen = MediaPlayer.create(context, R.raw.greenaudiotest); 
       } mpGreen.start(); 
      } catch(Exception e) { e.printStackTrace(); } 
     } 
    }); 

    mpYellow = MediaPlayer.create(context, R.raw.yellowaudiotest); 
    ImageButton yellowB = (ImageButton) findViewById(R.id.yellowButton); 
    yellowB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      try { 
       if (mpYellow.isPlaying()) { 
        mpYellow.stop(); 
        mpYellow.release(); 
        mpYellow = MediaPlayer.create(context, R.raw.yellowaudiotest); 
       } mpYellow.start(); 
      } catch(Exception e) { e.printStackTrace(); } 
     } 
    }); 

    mpPink = MediaPlayer.create(context, R.raw.pinkaudiotest); 
    ImageButton pinkB = (ImageButton) findViewById(R.id.pinkButton); 
    pinkB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      try { 
       if (mpPink.isPlaying()) { 
        mpPink.stop(); 
        mpPink.release(); 
        mpPink = MediaPlayer.create(context, R.raw.pinkaudiotest); 
       } mpPink.start(); 
      } catch(Exception e) { e.printStackTrace(); } 
     } 
    }); 

} 

更新:現在問題是pinkaudiotest始終是第一個播放音頻文件,無論點擊哪個圖像按鈕。我必須再次點擊才能聽到正確的音頻文件。

回答

0

您每次點擊都創建一個新的MediaPlayer實例。只需使用一個。

if (media.isPlaying()) { 
        media.stop(); 
        media.release(); 
        media= MediaPlayer.create(context, R.raw.purpleaudiotest); 
       } media.start(); 
+0

此致,似乎這樣的伎倆,但它已經引起了pinkaudiotest打先不管我按什麼樣的形象按鈕第一。我必須按兩次紫色才能說出紫色,因爲第一次它是粉紅色,這種情況也會出現在粉紅色之外的任何顏色。 –

+0

@DavidRodriguez,我有一段時間沒有使用MediaPlayer,但如果我記得正確,它需要花時間準備並開始播放(儘管這可能是一個不同的問題)。如果那些聲音很短,我會建議使用SoundPool。 – Raz

0

試試這個,

MediaPlayer mediaPlayer = new MediaPlayer(); 
    try { 
    mediaPlayer.setDataSource(R.raw.name); 
    mediaPlayer.prepare(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
    mediaPlayer.start();