单击按钮播放声音时出错

时间:2013-09-30 12:29:33

标签: android audio

我在我的活动中添加了两个imageButton,并且点击每个都应该播放不同的声音。  但是,当我点击任何按钮时,声音无法播放,日志显示错误。

LOGCAT ERROR

09-30 15:19:07.436: D/dalvikvm(477): GC_EXTERNAL_ALLOC freed 629 objects / 50520 bytes in 180ms
09-30 15:19:10.226: E/MediaPlayer(477): start called in state 1
09-30 15:19:15.276: E/MediaPlayer(477): start called in state 1

这是我写的那段代码,

import android.media.MediaPlayer;

public class MainActivity extends Activity {


MediaPlayer mp;
ImageButton iV1,iV2;

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


    iV1 = (ImageButton)findViewById(R.id.iV1);
    iV2 = (ImageButton)findViewById(R.id.iV2);
    mp = MediaPlayer.create(this, R.raw.bud);
    mp = MediaPlayer.create(this, R.raw.classic);

iV1.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {
        mp = new MediaPlayer();
        mp.prepare();

        mp.start();

    }});

iV2.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {

        mp = new MediaPlayer(); 
        mp.prepare();
        mp.start();

    }});

    }
}

请帮我解决这个问题。任何帮助将不胜感激。我是Android环境的新手。

提前致谢。

4 个答案:

答案 0 :(得分:1)

这是状态机问题,因为日志清楚地说明了:

09-30 15:19:10.226: E/MediaPlayer(477): start called in state 1

参考: http://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagram

例如,我看不到你在哪里打电话

MediaPlayer.setDataSource();
MediaPlayer.Prepare() 

答案 1 :(得分:1)

这里有几个问题。首先,每次按下按钮时,您都会创建一个新的MediaPlayer对象。你应该删除这些行:

mp = new MediaPlayer();
mp1 = new MediaPlayer();

您已使用静态创建方法创建了对象。

同样如前所述,您需要在致电开始前致电预备:

mp.prepare();
mp.start();

答案 2 :(得分:0)

答案 3 :(得分:0)

使用MediaPlayer进行按键声音时很容易出现问题,尤其是使用更多按钮时。我在这里使用SoundPool描述了一个解决方案:How to Play sound when button is clicked in Android?