2016-12-30 74 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等什么?你能否再解释一下 –

相关问题