0

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

LOGCAT 错误

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

4 回答 4

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() 
于 2013-09-30T12:32:58.267 回答
1

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

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

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

同样如前所述,您需要在调用 start 之前调用 prepare :

mp.prepare();
mp.start();
于 2013-09-30T12:39:47.250 回答
0

您可以查看媒体播放器状态图

于 2013-09-30T12:37:16.383 回答
0

使用 MediaPlayer 播放按钮声音时很容易遇到麻烦,尤其是使用更多按钮时。我在这里描述了一个使用 SoundPool 的解决方案:如何在 Android 中单击按钮时播放声音?

于 2013-12-21T19:06:14.177 回答