2016-09-03 13 views
0

10画像ボタンを持つアンドロイドスタジオでプログラムを作成しました。クリックすると各画像ボタンがサウンドを生成します。しかし、私がエミュレータでそれらを実行すると、最初の7つのイメージボタンがサウンドを生成します(どのボタンをクリックしても気にしません)。これに新しいイム、私を助けて、これは私のコードです:MediaPlayerとしてサウンド付き画像ボタンは動作しません。

public class playtimang extends AppCompatActivity { 

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

    final MediaPlayer satukecik = MediaPlayer.create(this, R.raw.one_kecik); 
    final MediaPlayer satubesar = MediaPlayer.create(this, R.raw.one_besar); 
    final MediaPlayer duakecik = MediaPlayer.create(this, R.raw.two_kecik); 
    final MediaPlayer duabesar = MediaPlayer.create(this, R.raw.two_besar); 
    final MediaPlayer tigakecik = MediaPlayer.create(this, R.raw.three_kecik); 
    final MediaPlayer tigabesar = MediaPlayer.create(this, R.raw.three_besar); 
    final MediaPlayer limakecik = MediaPlayer.create(this, R.raw.five_kecik); 
    final MediaPlayer limabesar = MediaPlayer.create(this, R.raw.five_besar); 
    final MediaPlayer enamkecik = MediaPlayer.create(this, R.raw.six_kecik); 
    final MediaPlayer enambesar = MediaPlayer.create(this, R.raw.six_besar); 

    ImageButton satu_kecikIB = (ImageButton) this.findViewById(R.id.satukecikIB); 
    ImageButton satu_besarIB = (ImageButton) this.findViewById(R.id.satubesarIB); 
    ImageButton dua_kecikIB = (ImageButton) this.findViewById(R.id.duakecikIB); 
    ImageButton dua_besarIB = (ImageButton) this.findViewById(R.id.duabesarIB); 
    ImageButton tiga_kecikIB = (ImageButton) this.findViewById(R.id.tigakecikIB); 
    ImageButton tiga_besarIB = (ImageButton) this.findViewById(R.id.tigabesarIB); 
    ImageButton lima_kecikIB = (ImageButton) this.findViewById(R.id.limakecikIB); 
    ImageButton lima_besarIB = (ImageButton) this.findViewById(R.id.limabesarIB); 
    ImageButton enam_kecikIB = (ImageButton) this.findViewById(R.id.enamkecikIB); 
    ImageButton enam_besarIB = (ImageButton) this.findViewById(R.id.enambesarIB); 

    satu_kecikIB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      satukecik.start(); 
     } 
    }); 

    satu_besarIB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      satubesar.start(); 
     } 
    }); 

    dua_kecikIB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      duakecik.start(); 
     } 
    }); 

    dua_besarIB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      duabesar.start(); 
     } 
    }); 

    tiga_kecikIB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      tigakecik.start(); 
     } 
    }); 

    tiga_besarIB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      tigabesar.start(); 
     } 
    }); 

    lima_kecikIB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      limakecik.start(); 
     } 
    }); 

    lima_besarIB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      limabesar.start(); 
     } 
    }); 

    enam_kecikIB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      enamkecik.start(); 
     } 
    }); 

    enam_besarIB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      enambesar.start(); 
     } 
    }); 


} 

}

+0

利用ログかどうかをテストしますOnClickListenersが呼び出されていて、他の場所(onCreateなど)からMediaPlayersを呼び出すことが動作していないMediaPlayersで動作するかどうかをテストします –

+0

最後の3つのボタンs –

+0

画像ボタンを再生していないオーディオファイルを一度チェックしてください –

答えて

1

は、オーディオは、それを利用して、ビデオの様々なフォーマットが含まれていくつかの長時間実行または大きなメディアファイルのために作られています小さなトーンはそれ自体が大きな計算を含むので悪いです。 があり、MediaPlayerをうまく使用するためには、代わりにSoundPoolを使用する必要があります。

は、今すぐあなたの問題の主な答えは、公式ドキュメント上で述べたように

ある

"作成" APIレベルで追加されました1

MediaPlayerの(コンテキストコンテキスト、int型の残油)を作成

特定のリソースIDのMediaPlayerを作成するための簡易メソッドです。成功した場合、prepare()はすでに呼び出されているので、再度呼び出さないでください。MediaPlayerで完了したら、release()を呼び出してリソースを解放する必要があります。リリースされていない場合、MediaPlayerインスタンスが多すぎると例外が発生します。このメソッドではprepare()が自動的に呼び出されるため、オーディオストリームタイプ(setAudioStreamType(int)を参照)、オーディオセッションID(setAudioSessionId(int)を参照)、またはオーディオ属性(setAudioAttributes(AudioAttributes)を参照)を変更することはできませんMediaPlayerの。要するに

あなたは、エラーまたは例外のような種類から安全性を得るためにMediaPlayerの状態図に従わなければなりません。あなたはすべての呼び出し後に、リソースを解放するreleaseメソッドを呼び出す必要があります。

+0

ヒントありがとうございます!それは本当に働いた – kiki

+0

あなたは歓迎兄弟です。これらのことがあなたを助けたなら、あなたはこのasnwerを受け入れるか、答えをupvoteすることができます。まあ、あなたは両方を行うことができます。ハッピーコーディング兄弟。運が良かった。 –

関連する問題