随着移动端技术的飞速发展,现如今手机的功能愈发强大,播放音频已经是作为一部手机最基本的功能之一了。相信大家手机中都有安装音乐播放器,比如:QQ音乐、酷狗、“网抑云音乐”等。这些播放功能都很强大,界面都很美观。但是毕竟众口难调,Android给播放音频和视频都提供了一套比较完整的API,我们就可以利用其来定制一个自己音频播放器。

在Android中播放音频文件一般是使用MediaPlayer类实现的,它对多种格式的音频提供了非常全面的控制方法,使得播放音乐的工作变得十分简单。以下就是MediaPlayer类中的一些常用的方法:

  • setDateSource:设置要播放的音频文件的位置
  • prepare:在开始播放前调用,以完成准备工作
  • start:开始或者继续播放音频
  • pause:暂停播放音频
  • reset:将MediaPlayer对象重置到刚创建的状态
  • seekTo:从指定的位置开始播放音频
  • stop:停止播放音频,调用后的MediaPlayer对象无法在播放音频
  • release:释放与MediaPlayer对象相关的资源
  • isPlaying:判断当前MediaPlayer是否正在播放音频
  • getDuration:获取载入的音频文件的时长

对上述方法做了简单了解后,我们来梳理一下MediaPlayer的工作流程,首先,我们需要新建一个MediaPlayer对象,然后调用setDataSource( )方法设置音频文件的路径,然后再调用prepare( )方法使MediaPlayer进入准备状态,再调用start( )方法就可以开始播放音频,pause( )方法暂停播放,调用reset( )方法停止播放。以上就实现一个音频播放器最基础的开始播放、暂停播放、结束播放三个功能。

下面我们将通过一个实例来学习如何实现一个简易的音频播放器,新建一个MusicPlayer项目。然后修改布局代码,如下:

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout 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" tools:context="MultiMedia.MultiMediaActivity"> <TextView android:layout_marginTop="50dp" android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Music Player" android:textColor="#EE1111" android:textSize="40sp" app:layout_constraintTop_toTopOf="parent"/> <Button android:id="@+id/btn_Play" android:layout_marginTop="150dp" android:layout_marginLeft="70dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableLeft="@mipmap/play" android:background="#FAFAFA" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent"/> <Button android:id="@+id/btn_Pause" android:layout_marginTop="150dp" android:layout_marginLeft="20dp" android:drawableLeft="@mipmap/pause" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#FAFAFA" app:layout_goneMarginTop="150dp" app:layout_constraintLeft_toRightOf="@id/btn_Play" app:layout_constraintTop_toTopOf="parent"/> <Button android:id="@+id/btn_Stop" android:drawableLeft="@mipmap/stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#FAFAFA" android:layout_marginLeft="20dp" android:layout_marginTop="150dp" app:layout_constraintLeft_toRightOf="@id/btn_Pause" app:layout_constraintTop_toTopOf="parent"/> androidx.constraintlayout.widget.ConstraintLayout>




界面如下:



android 播放器 播放图片 android手机播放器_android


可以看到布局中添加了一个TextView和三个Button,分别用于对音频文件进行播放、暂停和停止操作。 MediaPlayer可以用于播放网络上、本地及应用程序安装包中的音频,这里我们主要是来学习如何使用MediaPlayer,所以我们就来播放应用程序安装包内的音频文件。Android Studio允许我们在项目工程中创建一个assets目录,在该目录下可以存放任意文件和子目录,在应用安装时,这些目录和文件会一并被加载到手机上,然后我们可以在程序中借助AssetManager类提供的接口获取放在assets目录下的文件。 首先我们先来创建一个assets目录,值得注意的是该目录必须创建在app/src/main目录下,与java、res目录是同级关系,右击app/src/main--New--Directory,在弹出的对话框中输入"assets",即可创建。接着我们把需要播放的音频文件"music.mp3"放到该目录下。 然后修改java文件中的代码:

public class MultiMediaActivity extends AppCompatActivity {    private MediaPlayer mediaPlayer = new MediaPlayer();    private Button mBtnPlay, mBtnPause, mBtnStop;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_multi_media);        try {            initMediaPlayer();        } catch (IOException e) {            e.printStackTrace();        }        mBtnPlay = findViewById(R.id.btn_Play);        mBtnPause = findViewById(R.id.btn_Pause);        mBtnStop = findViewById(R.id.btn_Stop);        setListeners();    }    private void setListeners() {        OnClick onClick = new OnClick();        mBtnPlay.setOnClickListener(onClick);        mBtnPause.setOnClickListener(onClick);        mBtnStop.setOnClickListener(onClick);    }    private class OnClick implements View.OnClickListener {        @Override        public void onClick(View v) {            switch (v.getId()) {                case R.id.btn_Play:                    if (!mediaPlayer.isPlaying()) {                        mediaPlayer.start();                        Toast.makeText(MultiMediaActivity.this, "开始为您播放音乐", Toast.LENGTH_SHORT).show();                    }                    break;                case R.id.btn_Pause:                    if (mediaPlayer.isPlaying()) {                        mediaPlayer.pause();                        Toast.makeText(MultiMediaActivity.this, "已为您暂停播放当前音乐", Toast.LENGTH_SHORT).show();                    } else {                        mediaPlayer.start();                        Toast.makeText(MultiMediaActivity.this, "继续为您播放音乐", Toast.LENGTH_SHORT).show();                    }                    break;                case R.id.btn_Stop:                    if (mediaPlayer.isPlaying()) {                        mediaPlayer.reset();                        Toast.makeText(MultiMediaActivity.this, "已停止播放当前音乐", Toast.LENGTH_SHORT).show();                        try {                            initMediaPlayer();                        } catch (IOException e) {                            e.printStackTrace();                        }                        break;                    }            }        }    }    public void initMediaPlayer() throws IOException {        AssetManager manager = getAssets();        AssetFileDescriptor assetFileDescriptor = manager.openFd("music.mp3");        mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(),                assetFileDescriptor.getStartOffset(),                assetFileDescriptor.getLength());        mediaPlayer.prepare();    }    @Override    protected void onDestroy() {        super.onDestroy();        mediaPlayer.stop();        mediaPlayer.release();    }}