1

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

我不明白这种行为。

以下是我的点击代码:

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

Not sure if directly adressing your issue, but shouldn't you add a break; at the end of each switch case? Would like to put that in a comment but I don't have enough rep yet, sorry.

于 2013-03-30T09:55:56.697 回答
0

我发现的问题是mplayer.stop(); 我只是将 stop 替换为 pause 及其工作,我在你的代码中编辑得很少,看看:

在 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 应该mPlayer.prepare();只调用InitializedStopped状态。

我认为从 android 开发人员那里阅读此链接以使用媒体播放器会对您有所帮助。 - - - 媒体播放器 - - -

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

希望这对您有所帮助。

于 2013-03-30T11:34:34.110 回答