Android在播放音频和视频方面提供了一套完整的API,可以轻松地编写出一个简单的音频播放器。
在 Android 中播放音频文件一般都是使用 MediaPlayer 类来实现的,它对多种格式的音频文件提供了非常全面的控制方法,从而使得播放音乐的工作变得十分简单。下图是一些其中常用的方法:
用MediaPlayer类播放音乐,首先需要创建出一个 MediaPlayer 对象, 然后调用 setDataSource()方法来设置音频文件的路径, 再调用 prepare()方法使 MediaPlayer进入到准备状态, 接下来调用 start()方法就可以开始播放音频, 调用 pause()方法就会暂停播放,调用 reset()方法就会停止播放。
下面我们就来写一个史上最简单的Android音乐播放器,先来看一下界面,确实比较简陋。
activity_main.xml的源文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent" >
<Button
android:id="@+id/play"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="paly" />
<Button
android:id="@+id/pause"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Pause"/>
<Button
android:id="@+id/stop"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Stop" />
</LinearLayout>
MainActivity.java源文件
package com.example.luoxn28.tinymusic;
import android.content.DialogInterface;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import java.io.File;
public class MainActivity extends ActionBarActivity implements View.OnClickListener{
// 用于输出调试信息,表明当前在哪个活动中
private static final String TAG = "MainActivity";
private Button play;
private Button pause;
private Button stop;
private MediaPlayer mediaPlayer = new MediaPlayer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
play = (Button) findViewById(R.id.play);
pause = (Button) findViewById(R.id.pause);
stop = (Button) findViewById(R.id.stop);
play.setOnClickListener(this);
pause.setOnClickListener(this);
stop.setOnClickListener(this);
initMediaPlayer(); // 初始化播放
}
private void initMediaPlayer() {
try {
/* getExternalStorageDirectory()获取SD卡完整路径,比如/storage/emulated/0,music.mp3是存放在手机内存卡的根目录下的,暂时只能播放这一个音乐
* 测试手机为魅蓝note
*/
File file = new File(Environment.getExternalStorageDirectory(), "music.mp3");
Log.d(TAG, file.getPath()); // 打印文件完整路径
mediaPlayer.setDataSource(file.getPath()); // 指定音频文件路径
mediaPlayer.prepare(); // 进入准备状态
}
catch (Exception ex) {
ex.printStackTrace();
}
}
@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;
}
}
/*
* 在onDestroy()方法中将与MediaPlayer相关的资源释放掉
*/
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
参考资料:
1、《第一行代码-Android》 播放多媒体文件章节
2、https://github.com/luoxn28/tinyMusic