在Android应用中播放媒体播放器

时间:2016-04-28 04:11:56

标签: android android-activity

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

当没有播放音频文件时(并且根本没有暂停任何音频),如果我点击暂停按钮,则会抛出此错误消息:

  

不幸的是,App已停止

有什么问题?

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;
    }
}

2 个答案:

答案 0 :(得分:1)

您正面临这个问题,因为您没有正确声明这些功能。请检查以下代码:

像这样定义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();  
            }  
        });  
    }  
}  

答案 1 :(得分:0)

作为参考,MediaPlayer的状态非常特别。如果您在错误的时间或在错误的时间isPlaying()调用.pause()状态检查函数,它将自动转换为错误状态。你需要亲自跟踪状态。

查看MediaPlayer文档,尤其是State Diagram

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

  

在有效状态下成功调用此方法会将对象转移到Paused状态。在无效状态下调用此方法会将对象转换为错误状态。

MediaPlayer的错误状态会调用崩溃。