2

所以我试图对所有按钮进行 Onclick ... 每当用户单击某个按钮时,它会转到 OnClickButton ,然后播放一些声音 .. 对于 button1 它将播放 mp1 按钮 2 播放 sound2 .... 所以一切正常很好,但是当我在一段时间后点击很多按钮时,声音刚刚停止播放..这是代码:

public void OnClick(View v) {


    final MediaPlayer mp1 = MediaPlayer.create(this, R.raw.sound1);
    final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.sound2);
    final MediaPlayer mp3 = MediaPlayer.create(this, R.raw.sound3);
    final MediaPlayer mp4 = MediaPlayer.create(this, R.raw.sound4);

    TextView mytv = (TextView) findViewById(R.id.tvMytimer);
    int id = v.getId();
    if (id == R.id.btComp1 || id==R.id.btUser1)
    {
        mytv.setText("Button 1");
        mp1.start();

    }
    if (id == R.id.btComp2 || id==R.id.btUser2)
    {
        mytv.setText("Button 2");
        mp2.start();

    }
    if (id == R.id.btComp3 || id==R.id.btUser3)
    {
        mytv.setText("Button 3");

        mp3.start();

    }
    if (id == R.id.btComp4 || id==R.id.btUser4)
    {
        mytv.setText("Button 4");

        mp4.start();

    }


}

我也禁用了所有随意的按钮声音,因为我想要的只是我的声音..

(disable with setSoundEffectsEnabled(false) 
4

1 回答 1

3

首先,不要在每个 onClick 中创建一个新的 MediaPlayer。这是完全没有必要的。只需在活动开始时创建一次。

其次,除了调用它的 start 方法之外,您似乎没有对 MediaPlayer 做任何事情。MediaPlayer 有一个相当复杂的生命周期,您需要观察。请参阅javadoc以了解您必须了解的内容才能使其正常工作。

如果您只想快速触发一些声音以响应按钮播放,您可能应该改用SoundPool来管理和播放所有声音。对于您正在尝试做的事情,我肯定会更喜欢 MediaPlayer。使用起来要容易得多。

于 2016-02-08T02:44:33.783 回答