在Android中切换状态播放,暂停和停止

时间:2013-03-30 09:31:22

标签: java android media-player

我正在创建一个带有两个按钮开始/暂停和停止按钮的媒体播放器,当我第一次开始播放时它工作正常。但是当我试图在一次停止后启动时,我需要两次点击start / puase按钮。

我不明白这种行为。

以下是我的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>

请告诉我你的建议。

由于

阿曼

3 个答案:

答案 0 :(得分:0)

不确定是否直接解决了您的问题,但是您不应该在每个切换案例的末尾添加break;吗?我想把它放在评论中,但我还没有足够的代表,对不起。

答案 1 :(得分:0)

我在mplayer.stop();找到的问题我只是将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 question

答案 2 :(得分:0)

应仅在mPlayer.setDataSource(PATH);状态下调用Idle并在其他状态返回错误中调用它。 并且只应在mPlayer.prepare();Initialized州内致电Stopped

我认为从Android开发者那里阅读此链接可以帮助您使用媒体播放器。------MediaPlayer-----

在您的情况下,您应该在调用mPlayer.prepare()之前检查媒体播放器是否已停止;并删除mPlayer.setDataSource(PATH);来自onClick()

希望这有助于你。