2016-08-12 293 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

第二個選項是禁用點擊按鈕。但這是不正確的方式 –

+0

我得到警告「布爾型」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'嘗試catch,而不是方法 –