3

我可以打开(一次)和关闭(一次)切换按钮,但如果我第三次触摸它,它会打开但从不播放音乐。从那里,当我再次触摸它以将其关闭时,它会崩溃。

public class Main extends Activity {

MediaPlayer mp;
Button startButton;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);
    mp = MediaPlayer.create(getBaseContext(), R.raw.songthing);

    ToggleButton toggle = (ToggleButton) findViewById(R.id.ToggleButton);
    toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            if (isChecked) {
                mp.start();
            } else {
                mp.stop();
            }
        }
    });

    mp.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            mp.release();
        }
    });

}

我不确定我是否应该在 onCreate 方法中使用它......我试图移动它,但我对所有括号感到非常困惑并且它不起作用。

关于我的代码的更多信息......我试图让媒体播放器在切换按钮打开时播放歌曲,并在其关闭时停止播放。

编辑:Logcat 说了一些关于java.lang.IllegalStateException

XML:

<ToggleButton
        android:id="@+id/ToggleButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:textOff="Start"
        android:textOn="Stop" />
4

1 回答 1

2

你可以在这里阅读一些关于MediaPlayer状态的信息。 如果你调用,你必须再次调用播放器才能调用它。
stop()prepare()start()

一旦处于 Stopped 状态,在调用 prepare() 或 prepareAsync() 以将 MediaPlayer 对象再次设置为 Prepared 状态之前,无法开始播放。

如果准备播放器花费的时间太长,请考虑使用pause()其次seekTo(0);作为替代。

于 2013-02-04T21:51:13.340 回答