什么是MediaPlayer
Android提供的用来控制音频/视频文件或流播放的类,它的使用步骤如下:
代码示范
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);
final MediaPlayer mandiaPlayer = MediaPlayer.create(this,R.raw.yiluxianbei);
//创建一个MediaPiaPlayer对象,并且装载音频
Button btn_play = findViewById(R.id.btn_play);
Button btn_pause = findViewById(R.id.btn_pause);
Button btn_stop = findViewById(R.id.btn_stop);
btn_play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mandiaPlayer.start();//开始播放
}
});
btn_pause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mandiaPlayer.pause();//暂停播放
}
});
btn_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mandiaPlayer.stop();//停止播发
}
});
}
}
写一个播放页面
布局文件activity_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
tools:context=".MainActivity">
<!--播放与暂停按钮-->
<ImageButton
android:id="@+id/btn_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="@dimen/margin_bottom"
android:layout_marginLeft="@dimen/margin"
android:background="@color/btn_Background"
android:src="@drawable/play"
/>
<ImageButton
android:id="@+id/btn_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="@dimen/margin_bottom"
android:layout_marginRight="@dimen/margin"
android:background="@color/btn_Background"
android:src="@drawable/stop" />
</RelativeLayout>
``
开放权限
```xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
MainActivty.java
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.File;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
private boolean isPause = false;//定义是否是暂停状态
private File file; //定义要播放的音频文件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
,WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏显示
final ImageView btn_play = findViewById(R.id.btn_play);
final ImageView btn_stop = findViewById(R.id.btn_stop);
File file = new File("/sdcard/xiaoban.mp3");//获取要播放的音乐文件
if(file.exists()){
//如果音频文件存在就创建一个装载该文件的MediaPlayer对象,不存在将做出提示
//创建MediaPlayer对象,并解析要播放的音频文件
mediaPlayer = MediaPlayer.create(this,
Uri.parse(file.getAbsolutePath()));
}else{
//提示音频文件不存在
Toast.makeText(MainActivity.this,"要播放的音频文件不存在!",
Toast.LENGTH_SHORT).show();
return;
}
/**播放按钮的单击事件监听器**/
btn_play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//调用play()方法,实现播放功能
play();
}
});
//为MediaPlayer添加完成事件监听器,实现当音频播放完毕后,重新开始播放音频
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
play(); //调用play()方法,实现播放功能
}
});
btn_play.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onClick(View v) {
if(mediaPlayer.isPlaying() && !isPause){ //如果音频处于播放状态
mediaPlayer.pause();
isPause = true;
//更换播放图标
((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.play,null));
}else{
mediaPlayer.start();//继续播放
isPause = false;//设置为播放状态
// 更换为暂停图标
((ImageButton) v).setImageDrawable(getResources().getDrawable(R.drawable.pause, null));
}
}
});
btn_stop.setOnClickListener(new View.OnClickListener(){
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onClick(View v) {
mediaPlayer.stop();
btn_play.setImageDrawable(getResources().getDrawable(R.drawable.play,null));
}
});
}
private void play(){
try {
mediaPlayer.reset(); //重置MediaPlayer对象
mediaPlayer.setDataSource(file.getAbsolutePath());
mediaPlayer.prepare();
mediaPlayer.start(); //开始播放
}catch (Exception e){
e.printStackTrace();
}
}
@Override
protected void onDestroy() { //当前Activity销毁时,停止正在播放的音频,并释放MediaPlayer所占用的资源
if(mediaPlayer.isPlaying()) { //如果音频出于播放状态
super.onDestroy(); //停止音频播放状态
}
mediaPlayer.release(); //释放资源
super.onDestroy();
}
}
效果截图:
最后附上源码地址:
https://gitee.com/peterLiz/android_learning.git
最后如果有老板想做项目欢迎找我QQ:599490685