2016-08-12 11 views
2

私はthis投稿を見たことがありますが、何も問題はありません。ここに私の現在のコードがあります:Android - すぐにクリックした後にボタンのクリック音が消える

private static MediaPlayer mp; 
public void onClick(View v) { 
    mp = new MediaPlayer(); 
    try { 
     mp.reset(); 
     AssetFileDescriptor afd; 
     afd = getAssets().openFd("click.mp3"); 
     mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
     mp.prepare(); 
     mp.start(); 
    } catch (IllegalArgumentException | IllegalStateException | IOException e) { 
     e.printStackTrace(); 
    } 
    increment(button, key, this); 
} 

私は急速にボタンをクリックすると、音が

答えて

1

それを修正するには、あなただけ追加する必要があります。

if(mediaPlayer == null) 

を新しいMediaPlayerを作成する前に。したがって、あなたの場合:

if(mediaPlayer == null) 
    mediaPlayer = new MediaPlayer(); 

mediaPlayerがグローバル変数であることを確認してください。

+0

もう1つのオプションは無効にするボタンです。しかし、それは正しい方法ではありません –

+0

"boolean' mp == null'は常に 'false'です"という警告が出ます。これは本当ですか? –

+0

mpはグローバル変数 –

-1

を停止好ましくのonCreateでどこかにメディアプレーヤの作成コードを取ります。とにかく同じデータソースを使用することがわかっているときに、ユーザーがボタンをタップするたびにデータソースを初期化する必要はありません。

private static MediaPlayer mp; 

@Override 
protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     //Set conntent view and other codes 

     try { 
       mp = new MediaPlayer(); 
       AssetFileDescriptor afd; 
       afd = getAssets().openFd("click.mp3"); 
       mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
       mp.prepare(); 

     } catch (IllegalArgumentException | IllegalStateException | IOException e) { 
       e.printStackTrace(); 
     } 

} 

public void onClick(View v) { 
     if (mp.isPlaying()) { 
       mp.stop(); 
       mp.reset(); 
     } 

     mp.start(); 

     increment(button, key, this); 
} 

@Override 
public void onDestroy() { 
     super.onDestroy(); 

     if (mp != null) { 
       mp.reset(); 
       mp.release(); 
     } 
} 
+0

私は 'onDestroy'を上書きすべきではありませんか? –

+0

間違いなく。ちょうど一瞬前にコードを編集しました。 – fluffyBatman

+0

そして、メソッドではなく、 'onCreate'に' try-catch'が必要です。 –

関連する問題