2016-12-30 69 views
0

我正在研究一個應用程序,其中有一個帶有8個按鈕的網格佈局,並且每個都連接到一個聲音。現在我可以通過點擊按鈕來播放音頻,但是當我再次按下相同的按鈕時,音頻不會停止。Android:無法停止來自同一個按鈕的音頻

我所有的按鈕都連接到一個常見的onClick方法,類文件檢索按鈕的ID並與原始文件夾中存在的聲音文件相匹配。

我爲此使用了一個標誌,但不知道哪裏出錯了。

我的代碼

boolean play = true; 
    MediaPlayer mediaPlayer; 

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



    } 

    public void buttonTapped(View view) 
    { 



     int id = view.getId(); 
     String ourID = ""; 



     ourID = view.getResources().getResourceEntryName(id); 

     int resourceID = getResources().getIdentifier(ourID, "raw", "com.starprojects.gridlayoutdemo"); 
     mediaPlayer = MediaPlayer.create(this,resourceID); 


     if(play) 
     { 

      mediaPlayer.start(); 
      play = false; 
     } 
     else { 


     // mediaPlayer.stop(); 

      mediaPlayer.release(); 
      mediaPlayer = null; 



     // play = true; 
     } 

     // mediaPlayer = null; 

     Log.i("button tapped",ourID); 
    } 
} 

回答

0

定義的MediaPlayer outsite的功能,那麼這樣做

public void buttonTapped(View view) { 
     int id = view.getId(); 
     String ourID = ""; 

     ourID = view.getResources().getResourceEntryName(id); 

     int resourceID = getResources().getIdentifier(ourID, "raw", "com.starprojects.gridlayoutdemo"); 

     stopPlayer(); 
     mediaPlayer = MediaPlayer.create(this,resourceID); 
      if (mediaPlayer != null) 
       mediaPlayer .start(); 
} 


public void stopPlayer() { 
      if (mediaPlayer != null) { 
       mediaPlayer .stop(); 
       mediaPlayer .release(); 
      } 
      mediaPlayer = null; 
} 

多數民衆贊成:)

+0

就像一個魅力 – sunny

+0

然後你喊我投票:p –

0

這可能會或可能不會與你的問題,但不要忘記調用

mediaPlayer.release(); 
mediaPlayer = null; 

當您完成。如果你不這樣做,資源就會建立起來,並開始影響應用程序之外的聲音。請記住,每次按下按鈕時都會分配一個新的MediaPlayer。我在之前的應用程序中完成了這一操作,幾分鐘後聲音停止工作。

讓我知道這是否會改變任何東西。

事實上,您可以嘗試讓MediaPlayer成爲該類的成員(在函數外定義),因爲您只需要一次播放一個聲音。如果它不是null或.isPlaying(),則釋放它。否則,創建並播放。

+0

一個解決方案是讓onCreate方法內特定按鈕的ID – sunny

+0

是的,我想用媒體播放器的方法外但它獲得了分配給資源ID的按鈕的視圖,並且因此我無法將其分配到外部。 – sunny

+0

@sunny等什麼?你能否再解釋一下 –

相關問題