3

トグル ボタンをオン (1 回) とオフ (1 回) でタッチできますが、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()

停止状態になると、prepare()またはprepareAsync()が呼び出されてMediaPlayerオブジェクトが再び準備状態に設定されるまで、再生を開始できません。

プレーヤーの準備に時間がかかりすぎる場合は、代わりにfollowを使用することを検討してpause()くださいseekTo(0);

于 2013-02-04T21:51:13.340 に答える