2016-10-30 7 views
0

私はTic-Tac-Toeを作っています。Android Media Playerダブルプレイの問題

私は音楽を管理するMusicManagerクラスと6つのテーマに基づいて音楽を開始するThemesActivityクラスを持っています。ボタンをクリックするたびに、他のmediaPlayersが期待どおりに停止します。しかし、テーマをダブルタップすると、2回の演奏が行われます。私はisPlaying()を使用して停止しようとしましたが、うまくいきませんでした。ここで

がMusicManagerの次のコードです:

//Mediaplayer -- For All 6 themes 
    private MediaPlayer mp; 
    public static MediaPlayer normalMP; 
    public static MediaPlayer loveMP; 
    public static MediaPlayer tomAndJerryMP; 
    public static MediaPlayer clashOfClansMP; 
    public static MediaPlayer cricketMP; 
    public static MediaPlayer iceAgeMP; 

public static void playMusic(Context context) { 

    int chosenTheme = Utils.loadPreferences(context, "theme", 0); 

    if(chosenTheme == 0){ 
     normalMP = MediaPlayer.create(context, R.raw.darude_sandstorm); 
     normalMP.setLooping(true); 
     normalMP.start(); 

     if(loveMP != null) { 
      loveMP.release(); 
     } 
     if(tomAndJerryMP != null) { 
      tomAndJerryMP.release(); 
     } 
     if(clashOfClansMP != null) { 
      clashOfClansMP.release(); 
     } 
     if(cricketMP != null) { 
      cricketMP.release(); 
     } 
     if(iceAgeMP != null) { 
      iceAgeMP.release(); 
     } 
    } 

    if(chosenTheme == 1){ 
     loveMP = MediaPlayer.create(context, R.raw.love); 
     loveMP.setLooping(true); 
     loveMP.start(); 

     if(normalMP != null) { 
      normalMP.release(); 
     } 
     if(tomAndJerryMP != null) { 
      tomAndJerryMP.release(); 
     } 
     if(clashOfClansMP != null) { 
      clashOfClansMP.release(); 
     } 
     if(cricketMP != null) { 
      cricketMP.release(); 
     } 
     if(iceAgeMP != null) { 
      iceAgeMP.release(); 
     } 
    } 

    if(chosenTheme == 2){ 
     tomAndJerryMP = MediaPlayer.create(context, R.raw.tommy); 
     tomAndJerryMP.setLooping(true); 
     tomAndJerryMP.start(); 

     if(normalMP != null) { 
      normalMP.release(); 
     } 
     if(loveMP != null) { 
      loveMP.release(); 
     } 
     if(clashOfClansMP != null) { 
      clashOfClansMP.release(); 
     } 
     if(cricketMP != null) { 
      cricketMP.release(); 
     } 
     if(iceAgeMP != null) { 
      iceAgeMP.release(); 
     } 
    } 

    if(chosenTheme == 3){ 
     clashOfClansMP = MediaPlayer.create(context, R.raw.pinkpanther); 
     clashOfClansMP.setLooping(true); 
     clashOfClansMP.start(); 

     if(normalMP != null) { 
      normalMP.release(); 
     } 
     if(loveMP != null) { 
      loveMP.release(); 
     } 
     if(tomAndJerryMP != null) { 
      tomAndJerryMP.release(); 
     } 
     if(cricketMP != null) { 
      cricketMP.release(); 
     } 
     if(iceAgeMP != null) { 
      iceAgeMP.release(); 
     } 
    } 

    if(chosenTheme == 4){ 
     cricketMP = MediaPlayer.create(context, R.raw.cricket); 
     cricketMP.setLooping(true); 
     cricketMP.start(); 

     if(normalMP != null) { 
      normalMP.release(); 
     } 
     if(loveMP != null) { 
      loveMP.release(); 
     } 
     if(tomAndJerryMP != null) { 
      tomAndJerryMP.release(); 
     } 
     if(clashOfClansMP != null) { 
      clashOfClansMP.release(); 
     } 
     if(iceAgeMP != null) { 
      iceAgeMP.release(); 
     } 
    } 

    if(chosenTheme == 5) { 
     iceAgeMP = MediaPlayer.create(context, R.raw.ice_age); 
     iceAgeMP.setLooping(true); 
     iceAgeMP.start(); 

     if (normalMP != null) { 
      normalMP.release(); 
     } 
     if (loveMP != null) { 
      loveMP.release(); 
     } 
     if (tomAndJerryMP != null) { 
      tomAndJerryMP.release(); 
     } 
     if (clashOfClansMP != null) { 
      clashOfClansMP.release(); 
     } 
     if (cricketMP != null) { 
      cricketMP.release(); 
     } 
    } 
} 

public static void stopMusic(Context context) { 

    int chosenTheme = Utils.loadPreferences(context, "theme", 0); 

    if(chosenTheme == 0){ 
     normalMP.stop(); 
    } 
    if(chosenTheme == 1){ 
     loveMP.stop(); 
    } 
    if(chosenTheme == 2){ 
     tomAndJerryMP.stop(); 
    } 
    if(chosenTheme == 3){ 
     clashOfClansMP.stop(); 
    } 
    if(chosenTheme == 4){ 
     cricketMP.stop(); 
    } 
    if(chosenTheme == 5){ 
     iceAgeMP.stop(); 
    } 

} 

そして、ここでは私のThemesActivityある - 音楽演奏パート

//Layout Global Variables 
    RelativeLayout normalLayout; 
    RelativeLayout loveLayout; 
    RelativeLayout tomAndJerryLayout; 
    RelativeLayout clashOfClansLayout; 
    RelativeLayout cricketLayout; 
    RelativeLayout iceAgeLayout; 

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

//Referencing Views with IDs 
     normalLayout = (RelativeLayout) findViewById(R.id.normalLayout); 
     loveLayout = (RelativeLayout) findViewById(R.id.loveLayout); 
     tomAndJerryLayout = (RelativeLayout) findViewById(R.id.tom_and_jerry_layout); 
     clashOfClansLayout = (RelativeLayout) findViewById(R.id.clashLayout); 
     cricketLayout = (RelativeLayout) findViewById(R.id.cricketLayout); 
     iceAgeLayout = (RelativeLayout) findViewById(R.id.ice_age_layout); 


    normalLayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     MusicManager.playMusic(getBaseContext()); 
    } 

    loveLayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     MusicManager.playMusic(getBaseContext()); 
    } 

    tomAndJerryLayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     MusicManager.playMusic(getBaseContext()); 
    } 

    clashOfClansLayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     MusicManager.playMusic(getBaseContext()); 
    } 

    cricketLayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     MusicManager.playMusic(getBaseContext()); 
    } 

    iceAgeLayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     MusicManager.playMusic(getBaseContext()); 
    } 
} 
+0

コードでは、ボタンクリックで音楽を再生し、これを克服するために、playmusicメソッドのフラグ静的変数を設定することができます。フラグをオンまたはオフに設定します。あなたが**再生する**または**リリース/停止**音楽を選択するフラグの値に応じて。これが役に立ったら –

+0

あなたは説明してコードスニペットを与えることができますか?もしもあなたができるのであれば、ちょっとでもフラグを使って作業していました.... –

+0

最初のテーマの答えは下記を参照してください。個々のテーマにプライベートブールフラグを使い、/stop ** –

答えて

1

これを実装し、スタート/ストップ単にonclickの開始時にボタンを無効にし、サウンドの再生が完了した後で有効にします。

normalLayout.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    normalLayout.setEnabled(false); 
    MusicManager.playMusic(getBaseContext(),normalLayout); 
} 
0

私が示しています

public static void playMusic(Context context) { 

int chosenTheme = Utils.loadPreferences(context, "theme", 0); 

if(chosenTheme == 0) 
{ 
// releasing the playing music then restarting 
if(normalMP!=null) 
{ 
    normalMP.release(); 

} 
    normalMP = MediaPlayer.create(context, R.raw.darude_sandstorm); 
    normalMP.setLooping(true); 
    normalMP.start(); 

    if(loveMP != null) { 
     loveMP.release(); 
    } 
    if(tomAndJerryMP != null) { 
     tomAndJerryMP.release(); 
    } 
    if(clashOfClansMP != null) { 
     clashOfClansMP.release(); 
    } 
    if(cricketMP != null) { 
     cricketMP.release(); 
    } 
    if(iceAgeMP != null) { 
     iceAgeMP.release(); 
    } 
} 

を更新しましたあなたの最初のテーマ、マルチクリックの問題を処理するために:

public static void playMusic(Context context, RelativeLayout normalLayout) { 

int chosenTheme = Utils.loadPreferences(context, "theme", 0); 

switch(chosenTheme){ 
    case 0 : normalMP = MediaPlayer.create(context, R.raw.darude_sandstorm); 
      normalMP.setLooping(true); 
      normalMP.start(); 
      normalMP.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { //Handling the resource release part 

      @Override 
      public void onCompletion(MediaPlayer mp) 
      { 
       mp.release(); 
       normalLayout.setEnabled(true); //Enable the button after sound has played 
      } 
     }); 
      break; 
    //write case statements for other five cases 

    } 
} 

ダブルクリックして問題:音だけを再生する前に、このメソッドを呼び出す6例の場合、すべての他のテーマに

+0

DOESNT WORKS!ラスターはそれをクラッシュさせる!私は再びテーマが出たら同じ音楽をやりたい! plz help –

+0

がコード再生を更新しました**もう一度**の要件でしたので、最初のテーマを確認し、残りのテーマを更新してください –

関連する問題