我在我的活动中添加了两个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环境的新手。
提前致谢。
答案 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?