持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情
前言
MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易用,但定制性不如用MediaPlayer,要视情况选择了.MediaPlayer播放音频比较简单,但是要播放视频就需要SurfaceView.SurfaceView比普通的自定义View更有绘图上的优势,它支持完全的OpenGL ES库.
1、媒体播放器简介
媒体播放器,又称媒体播放机,通常是指电脑中用来播放多媒体的播放软件,把解码器聚集在一起,产生播放的功能。例如Windows Media Player等。由于在Windows Me前的中文Windows一直都把Windows Media Player称作媒体播放器,所以媒体播放器在电脑老用户中成了Windows Media Player的代名词。 然而,随着媒体行业的不断发展,一些广告画面的播放器也可称为媒体播放器,如分众传媒的视频媒体播放器、众普传媒的镜面媒体播放器等;公交电视同样是一种媒体播放器。
2、实现思路
1、布局
采用线性布局,控件有三个button控件,主要负责播放,暂停,停止。
2、编写实现代码
主要对三个按钮设置点击事件,new 一个MediaPlayer对象,调用其方法,实现功能。
3、代码实现
布局文件
<LinearLayout
xmlns:android="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:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello_world" />
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="start" />
<Button
android:id="@+id/pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="pause" />
<Button
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="stop" />
</LinearLayout>
逻辑代码实现
import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
//声名变量
private Button start = null;
private Button pause = null;
private Button stop = null;
private TextView state = null;
private MediaPlayer mp3;
private Boolean flag = false; //设置标记,false表示正在播放
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
//取得各按钮组件
start = (Button) super.findViewById(R.id.start);
pause = (Button) super.findViewById(R.id.pause);
stop = (Button) super.findViewById(R.id.stop);
state = (TextView) super.findViewById(R.id.state);
//为每个按钮设置单击事件
start.setOnClickListener(new OnClickListenerStart());
pause.setOnClickListener(new OnClickListenerPause());
stop.setOnClickListener(new OnClickListenerStop());
mp3 = new MediaPlayer(); //创建一个MediaPlayer对象
//在res下新建一个raw文件夹把一首歌放到此文件夹中并用英文命名
mp3 = MediaPlayer.create(MainActivity.this, R.raw.xmp);
}
//各按钮单击事件的实现如下
//开始播放
private class OnClickListenerStart implements View.OnClickListener {
//implementsOnClickListener为实现OnClickListener接口
@Override
//重写onClic事件
public void onClick(View v) {
//执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容
try {
if (mp3 != null) {
mp3.stop();
}
mp3.prepare(); //进入到准备状态
mp3.start(); //开始播放
state.setText("Playing"); //改变输出信息为“Playing”,下同
} catch (Exception e) {
state.setText(e.toString());//以字符串的形式输出异常
e.printStackTrace(); //在控制台(control)上打印出异常
}
}
}
//暂停播放
private class OnClickListenerPause implements View.OnClickListener {
@Override
public void onClick(View v) {
try {
if (flag == false) //若flag为false,则表示此时播放器的状态为正在播放
{
mp3.pause();
flag = true;
state.setText("pause");
} else if (flag == true) {
mp3.start(); //开始播放
flag = false; //重新设置flag为false
state.setText("Playing");
}
} catch (Exception e) {
state.setText(e.toString());
e.printStackTrace();
}
}
}
//停止播放
private class OnClickListenerStop implements View.OnClickListener {
@Override
public void onClick(View v) {
try {
if (mp3 != null) {
mp3.stop();
state.setText("stop");
}
} catch (Exception e) {
state.setText(e.toString());
e.printStackTrace();
}
}
}
//重写暂停状态事件
protected void onPause() {
try {
mp3.release(); //释放音乐资源
} catch (Exception e) {
state.setText(e.toString());
e.printStackTrace();
}
super.onPause();
}
}
4、测试
可以实现播功能
可以实现暂停功能
总结
MediaPlayer具有更好的性能,远远优于VideoView,今天学习了另一种音乐播放的方式,希望可以帮到大家。