Android中播放音频文件一般都是使用MediaPlayer类来实现的,它对多种格式的音频文件提供了非常全面的控制
方法,从而使得播放音乐的工作变得十分简单。
首先创建一个MediaPlayer对象->调用setDataSource()方法来设置音频文件的路径->调用prepare()方法使MediaPlayer
进入到准备状态->调用start()方法可以播放音乐,pause()方法暂时停止播放,reset()方法完全停止播放->最后要调用release()方法释放资源
还是先看activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/play" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Play" /> <Button android:id="@+id/pause" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Pause" /> <Button android:id="@+id/stop" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Stop" /> </LinearLayout>
主活动
package com.gougoucompany.clarence.playaudiotest; import android.Manifest; import android.content.pm.PackageManager; import android.media.MediaPlayer; import android.os.Environment; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v4.os.EnvironmentCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.io.File; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private MediaPlayer mediaPlayer = new MediaPlayer(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button play = (Button) findViewById(R.id.play); Button pause = (Button) findViewById(R.id.pause); Button stop = (Button) findViewById(R.id.stop); play.setOnClickListener(this); pause.setOnClickListener(this); stop.setOnClickListener(this); if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission. WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this, new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 1); } else { initMediaPlayer(); //初始化MediaPlayer } } @Override public void onClick(View v) { switch(v.getId()) { case R.id.play: if(!mediaPlayer.isPlaying()) { mediaPlayer.start(); //开始播放 } break; case R.id.pause: if(mediaPlayer.isPlaying()) { mediaPlayer.pause(); //暂停播放 } break; case R.id.stop: if(mediaPlayer.isPlaying()) { mediaPlayer.reset(); //停止播放 initMediaPlayer(); } break; default: break; } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch(requestCode) { case 1: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { initMediaPlayer(); } else { Toast.makeText(this, "拒绝权限将无法使用程序", Toast.LENGTH_SHORT).show(); finish(); } break; default: break; } } @Override protected void onDestroy() { super.onDestroy(); if(mediaPlayer != null){ mediaPlayer.stop(); mediaPlayer.release(); } } private void initMediaPlayer() { try { File file = new File(Environment.getExternalStorageDirectory(), "music.mp3"); mediaPlayer.setDataSource(file.getPath()); //指定音频文件的路径 mediaPlayer.prepare(); //让MediaPlayer进入到准备状态 } catch (Exception e) { e.printStackTrace(); } } }
其中关于指定音频文件的路径知识推荐看这位大神的博客安卓存储路径你了解多少?
在这里我们使用了Environtment.getExternalStorageDirectory()方法,这是内置存储卡的根目录,因此我们只需要将music.mp3放到手机根目录就可以播放音乐了