1

開始/一時停止と停止ボタンの 2 つのボタンを備えたメディア プレーヤーを作成しています。初めて再生を開始すると、正常に動作します。しかし、一度停止した後に開始しようとすると、開始/一時停止ボタンを2回クリックする必要があります。

この振る舞いがわかりません。

以下は私のonclickコードです:

public void click(View view){
    int id = view.getId();

    try {
        mPlayer.setDataSource(PATH);
        mPlayer.prepare();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    switch(id){
    case R.id.btnPlay:
        synchronized(this){

            if(!isStarted){
                btnPlay.setBackgroundResource(R.drawable.pause);
                isStarted=true;
                mPlayer.start();
                System.out.println("Play");

            } else{
                System.out.println("Pause");
                isStarted = false;
                btnPlay.setBackgroundResource(R.drawable.play);
                mPlayer.pause();
        }
    }
        return;
    case R.id.btnStop :
    synchronized(this){

        if(mPlayer!=null){
            System.out.println("Stop");
            mPlayer.stop();
            isStarted = false;
            btnPlay.setBackgroundResource(R.drawable.play);
        } 
}

そして、ここに私のレイアウトxmlファイルがあります:

    <View
        android:layout_width="0dip"
        android:layout_height="0dip"
        android:layout_weight="1" />
    <Button
        android:id="@+id/btnStop"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_margin="5dp"
        android:layout_weight="1"
        android:background="@drawable/stop"
        android:onClick="click" />



    <Button
        android:id="@+id/btnPlay"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_margin="5dp"
        android:layout_weight="1"
        android:background="@drawable/play"
        android:onClick="click" />

    <View
        android:layout_width="0dip"
        android:layout_height="0dip"
        android:layout_weight="1" />

    <View
        android:layout_width="0dip"
        android:layout_height="0dip"
        android:layout_weight="1" />

</LinearLayout>

あなたの提案を教えてください。

ありがとう

4

3 に答える 3

0

問題に直接対処するかどうかはわかりませんがbreak;、各スイッチケースの最後に a を追加するべきではありませんか? それをコメントに入れたいのですが、まだ十分な担当者がいません。申し訳ありません。

于 2013-03-30T09:55:56.697 に答える
0

私が見つけた問題はmplayer.stop(); 、停止を一時停止に置き換えるだけで、コードを少し編集しただけで機能します。

onCreate 内:

        mPlayer = new MediaPlayer();
        mPlayer = MediaPlayer.create(ThirdActivity.this,R.raw.test);
        mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mPlayer.setLooping(true);

onClick イベント

@Override
    public void onClick(View v) {
        switch (v.getId()) {

        case R.id.button1:
            Log.d("^^^^^^", "flag=" + isStarted);
            Log.d("^^^^^^", "clicked");
            synchronized (this) {

                if (!isStarted) {
                    add.setBackgroundResource(R.drawable.button);
                    isStarted = true;
                    mPlayer.start();
                    System.out.println("Play");

                } else {
                    System.out.println("Pause");
                    isStarted = false;
                    add.setBackgroundResource(R.drawable.button);
                    mPlayer.pause();
                }
            }

            break;

        case R.id.button2:
            synchronized (this) {
                if (mPlayer.isPlaying()) {
                    System.out.println("Stop");
                    mPlayer.pause();
                    isStarted = false;
                    add.setBackgroundResource(R.drawable.button);
                }
            }
            break;

        default:
            break;
        }

    }

以下のリンクもチェックしてください。

MediaPlayer:Stackoverflow の質問

于 2013-03-30T10:41:37.250 に答える
0

mPlayer.setDataSource(PATH);状態でのみ呼び出しIdle、他の状態で呼び出してエラーを返す必要があります。and はand状態mPlayer.prepare();でのみ呼び出す必要があります。InitializedStopped

メディアプレーヤーを使用するためにAndroid開発者からこのリンクを読むと役立つと思います。------メディアプレイヤー-----

あなたの場合、mPlayer.prepare(); を呼び出す前に、メディア プレーヤーが停止しているかどうかを確認する必要があります。mPlayer.setDataSource(PATH); を削除します。からonClick()

これがお役に立てば幸いです。

于 2013-03-30T11:34:34.110 に答える