2016-01-04 214 views
1

我使用此代碼通過單擊按鈕播放聲音。在android中停止播放聲音

b.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        if(mp.isPlaying()) 
        { 
         mp.stop(); 
        } 

        try { 
         mp.reset(); 
         AssetFileDescriptor afd; 
         afd = getAssets().openFd("sound/07.mp3"); 
         mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 
         mp.prepare(); 
         mp.start(); 
        } catch (IllegalStateException e) { 
         e.printStackTrace(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 



       } 
      }); 

它運作良好,但我無法阻止聲音!

我使用mp.stop();。但點擊按鈕再次播放聲音!

+2

你可能需要把你的try/catch在'else'塊你'if'後。即使當您按下if語句並且您的音頻正在播放時您停止了音頻,您也會立即再次啓動它。 – tnw

回答

0

當您的onClickListener運行時,if語句會在其他代碼運行後進行檢查。嘗試把一個else語句後if你的代碼應該是這樣的:

b.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       if(mp.isPlaying()) 
       { 
        mp.stop(); 
       }else{ 
       try { 
        mp.reset(); 
        AssetFileDescriptor afd; 
        afd = getAssets().openFd("sound/07.mp3"); 
        mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 
        mp.prepare(); 
        mp.start(); 
       } catch (IllegalStateException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

} 

      } 
     });