设置“播放”,“暂停”,“停止”三个按键
第一种方法,设置状态变量(音频文件存放在res/raw里)
修改前,停止后不能再次播放音频
import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MediaPlayer mediaPlayer=MediaPlayer.create(this,R.raw.daichi);
Button btn_play=findViewById(R.id.play);
Button btn_pasue=findViewById(R.id.pause);
Button btn_stop=findViewById(R.id.stop);
btn_play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.start();
}
});
btn_pasue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.pause();
}
});
btn_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.stop();
}
});
}
}
修改后,停止后可以从头播放音频
设置静态变量isstopped保存当前是否为stop状态。
btn_play监听器中判断isstopped状态,true则从头播放,false则继续播放;
btn_pasue监听器中的判断是保证按“停止”后按“暂停”再按“播放”可以重头播放;
btn_stop监听器中弃用stop(),改用pause,设置isstopped状态为true。
public class MainActivity extends AppCompatActivity {
static boolean isstopped=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MediaPlayer mediaPlayer=MediaPlayer.create(this,R.raw.daichi);
Button btn_play=findViewById(R.id.play);
Button btn_pasue=findViewById(R.id.pause);
Button btn_stop=findViewById(R.id.stop);
btn_play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isstopped==true){
mediaPlayer.seekTo(0);
mediaPlayer.start();
isstopped=false;
}else{mediaPlayer.start();
isstopped=false;
}
}
});
btn_pasue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isstopped==true){
mediaPlayer.pause();
}else{
isstopped=false;
mediaPlayer.pause();
}
}
});
btn_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.pause();
isstopped=true;
}
});
}
}
第二种方法,设置完成事件监听器(setOnCompletionListener)
此方法需要通过AS右侧的Device File Explorer在sdcard中添加音频文件,程序将通过URI获取到文件
修改后
import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer=new MediaPlayer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File file=new File("/sdcard/daichi.flac");
if (file.exists()){ //判断是否找到文件,未找到则弹出提示框
MediaPlayer mediaPlayer=MediaPlayer.create(this, Uri.parse(file.getAbsolutePath()));
}else{
Toast.makeText(this, "未找到文件", Toast.LENGTH_SHORT).show();
return;
}
Button btn_play=findViewById(R.id.play);
Button btn_pasue=findViewById(R.id.pause);
Button btn_stop=findViewById(R.id.stop);
btn_play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.start();
}
});
btn_pasue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.pause();
}
});
btn_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.stop();
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { //完成事件监听器
@Override
public void onCompletion(MediaPlayer mp) {
mp.reset();
try {
mp.setDataSource(file.getAbsolutePath());
mp.prepare();
mp.start();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
注意:第二种方法需要在AndroidManifest.xml里添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
并在模拟器设置里给予存储空间权限,否则程序将会闪退