[英]Playing Media player in Android 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;
}
}
您正面臨問題,因為您沒有正確聲明功能。請檢查以下代碼:
像這樣定義您的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();
}
});
}
}
作為參考,MediaPlayer的狀態非常特殊。 如果您在錯誤的時間調用了一個狀態檢查函數,例如isPlaying()
,或者在錯誤的時間調用了.pause()
,它將自動轉換為錯誤狀態。 您需要自己密切跟蹤狀態。
查看MediaPlayer文檔,尤其是狀態圖
對於暫停,它在調用pause()
函數時說明了其相關狀態:
在有效狀態下成功調用此方法會將對象轉移到“暫停”狀態。 在無效狀態下調用此方法會將對象轉移到錯誤狀態。
MediaPlayer的錯誤狀態會引發崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.