2017-10-10 102 views
0

有人可以指出我錯誤的地方嗎?當我按下圖像按鈕時,即使我沒有按下相應的按鈕,它也會首先播放粉紅色電影。我必須按下圖像按鈕兩次以聽到正確的聲音。這發生在頁面第一次加載時,在第一次看起來很好但仍然不應該發生的情況之後。MediaPlayer在第一次點擊時播放錯誤的文件

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; 
MediaPlayer media = null; 
//private static MediaPlayer media = null; 

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

    ImageButton pinkB = (ImageButton) findViewById(R.id.pinkButton); 
    ImageButton yellowB = (ImageButton) findViewById(R.id.yellowButton); 
    ImageButton purpleB = (ImageButton) findViewById(R.id.purpleButton); 
    ImageButton blueB = (ImageButton) findViewById(R.id.blueButton); 
    ImageButton greenB = (ImageButton) findViewById(R.id.greenButton); 
    ImageButton redB = (ImageButton) findViewById(R.id.redButton); 


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

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

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

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

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

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

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

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

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

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

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


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

     } 
    }); 
} 
} 

更新:將if語句(所有這些語句)的開頭更改爲如下所示修復了問題。

if (media != null) { 
        media.stop(); 
        media.release(); 
        media = MediaPlayer.create(context, R.raw.pinkaudiotest); 
       } 

回答

0

它始終發揮pinktestaudio因爲你做

media = MediaPlayer.create(context, R.raw.pinkaudiotest); 在年底,所以media將始終與pinktestaudio初始化。 即使你點擊不同的按鈕,因爲在每一個按鈕OnClickListener你點擊任何按鈕第一次media.isPlaying()

if(media.isPlaying()) { 
     media.stop(); 
     media.release(); 
     media = MediaPlayer.create(context, R.raw.pinkaudiotest); 
} 

將永遠是假的所以

media = MediaPlayer.create(context, R.raw.some_audio_file);

將不會被執行。 但是,當你再次點擊media.isPlaying()是真實的,一切順利。

0

在onCreate中創建了6個MediaPlayer實例。最後一個用於你的每個聽衆。

看看你的代碼重構後:

public class ColorPage extends AppCompatActivity implements View.OnClickListener { 

MediaPlayer mMediaPlayer = null; 

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

    ImageButton pinkB = (ImageButton) findViewById(R.id.pinkButton); 
    ImageButton yellowB = (ImageButton) findViewById(R.id.yellowButton); 
    ImageButton purpleB = (ImageButton) findViewById(R.id.purpleButton); 
    ImageButton blueB = (ImageButton) findViewById(R.id.blueButton); 
    ImageButton greenB = (ImageButton) findViewById(R.id.greenButton); 
    ImageButton redB = (ImageButton) findViewById(R.id.redButton); 

    pinkB.setOnClickListener(this); 
    yellowB.setOnClickListener(this); 
    purpleB.setOnClickListener(this); 
    blueB.setOnClickListener(this); 
    greenB.setOnClickListener(this); 
    redB.setOnClickListener(this); 
} 

@Override 
public void onClick(View view) { 
    int audio; 

    switch (view.getId()) { 
     case R.id.pinkButton: 
      audio = R.raw.pinkaudiotest; 
      break; 
     case R.id.yellowButton: 
      audio = R.raw.yellowaudiotest; 
      break; 
     case R.id.purpleButton: 
      audio = R.raw.purpleaudiotest; 
      break; 
     case R.id.blueButton: 
      audio = R.raw.blueaudiotest; 
      break; 
     case R.id.greenButton: 
      audio = R.raw.greenaudiotest; 
      break; 
     case R.id.redButton: 
      audio = R.raw.redaudiotest; 
      break; 
     default: 
      audio = R.raw.purpleaudiotest; 
    } 

    try { 
     if (mMediaPlayer != null && mMediaPlayer.isPlaying()) { 
      mMediaPlayer.stop(); 
      mMediaPlayer.release(); 
     } 

     mMediaPlayer = MediaPlayer.create(getApplicationContext(), audio); 
     mMediaPlayer.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 

祝你好運!

0

這是因爲您已將media變量分配了多次並將其最後一次分配給pinkaudiotest,因此要解決您的問題,必須在事件內部分配變量media。所以只有當點擊一個按鈕時纔會分配它。 `。 這裏是你應該使用自己的相同的代碼做什麼:

你有SIX線看起來相似,他們都是

media = MediaPlayer.create(context, R.raw.purpleaudiotest); 

切割這些線的形式,並將其粘貼裏面的onClick例如,相應的圖像按鈕的方法。我將爲你做第一個,並重復所有SIX次。

purpleB.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // I AM ADDING IT HERE 
    media = MediaPlayer.create(context, R.raw.purpleaudiotest); //ADDED INSIDE oClick(View view) 

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

重複,對於所有SIX的ImageButton和問題將不復存在。

相關問題