在安卓应用程序中播放媒体播放器



我正在创建一个带有开始、暂停、停止按钮的媒体播放器。开始和停止按钮工作正常,问题出在暂停按钮上。

当没有音频文件正在播放(也没有暂停任何音频)时,如果我单击暂停按钮,它会抛出以下错误消息:

不幸的是,应用程序已停止

问题出在哪里?

public class activity_12 extends Activity {
    MediaPlayer sound;
    int paused;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_12);
    }
    public void Play(View view) {
        if(sound==null) {
            sound=MediaPlayer.create(this,R.raw.fil);
            sound.start();
        }else if(!sound.isPlaying()) {
            sound.seekTo(paused);
            sound.start();
        }
    }
    public void Pause(View view) {
        sound.pause();
        paused=sound.getCurrentPosition();
    }
    public void Stop(View view) {
        sound.release();
        sound=null;
    }
}

您面临问题是因为您没有正确声明函数。请检查此代码:

按如下所示定义 XML:

<RelativeLayout xmlns:androclass="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:paddingBottom="@dimen/activity_vertical_margin"  
    android:paddingLeft="@dimen/activity_horizontal_margin"  
    android:paddingRight="@dimen/activity_horizontal_margin"  
    android:paddingTop="@dimen/activity_vertical_margin"  
    tools:context=".MainActivity" >  
  <Button  
        android:id="@+id/button1"  
        style="?android:attr/buttonStyleSmall"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignLeft="@+id/textView1"  
        android:layout_below="@+id/textView1"  
        android:layout_marginTop="48dp"  
        android:text="start" />  
    <Button  
        android:id="@+id/button2"  
        style="?android:attr/buttonStyleSmall"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignTop="@+id/button1"  
        android:layout_toRightOf="@+id/button1"  
        android:text="pause" />  
    <Button  
        android:id="@+id/button3"  
        style="?android:attr/buttonStyleSmall"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignTop="@+id/button2"  
        android:layout_toRightOf="@+id/button2"  
        android:text="stop" />  
</RelativeLayout>

您应该像这样定义您的活动:

import android.media.MediaPlayer;  
import android.os.Bundle;  
import android.os.Environment;  
import android.app.Activity;  
import android.view.Menu;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
public class MainActivity extends Activity {  
    Button start,pause,stop;  
    MediaPlayer mediaPlayer;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        start=(Button)findViewById(R.id.button1);  
        pause=(Button)findViewById(R.id.button2);  
        stop=(Button)findViewById(R.id.button3);  
        //creating media player  
        mediaPlayer= new MediaPlayer();

        start.setOnClickListener(new OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                mediaPlayer.start();  
            }  
        });  
        pause.setOnClickListener(new OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                mediaPlayer.pause();  
            }  
        });  
        stop.setOnClickListener(new OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                mediaPlayer.stop();  
            }  
        });  
    }  
}  

作为参考,媒体播放器的状态非常特殊。如果在错误的时间调用状态检查函数(如isPlaying()),或者在错误的时间调用.pause(),它将自动转换为错误状态。您需要自己密切跟踪状态。

查看媒体播放器文档,特别是状态图

对于暂停,它说关于调用pause()函数的相关状态:

在有效状态下成功调用此方法会将对象转换为"暂停"状态。在无效状态下调用此方法会将对象传输到 Error 状态。

媒体播放器的错误状态会调用崩溃。

最新更新