插入图片
创建两个
pause_button_selector.xml代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/pause_button_pressed" android:state_pressed="true"/>
<item android:drawable="@mipmap/pause_button" android:state_pressed="false"/>
</selector>
play_button_selector.xml代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/play_button_pressed" android:state_pressed="true"/>
<item android:drawable="@mipmap/play_button" android:state_pressed="false"/>
</selector>
3、准备音频素材
准备一些mp3音乐文件(文件名必须是英文的,因为模拟器不支持中文文件名),拷贝/storage/sdcard/Music目录里。
主布局资源文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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:background="@mipmap/background"
android:orientation="vertical"
android:padding="10dp"
tools:context="com.example.musicplayerv01.MainActivity">
<TextView
android:id="@+id/tv_music_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textColor="#0000ff"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/btn_play_pause"
android:layout_width="60dp"
android:layout_height="50dp"
android:onClick="doPlayOrPause"
android:background="@drawable/play_button_selector"/>
</LinearLayout>
</LinearLayout>
主界面类MainActivity
package com.example.musicplayerv01;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
public class MainActivity extends Activity {
private MediaPlayer mp;
private File musicDir;
private String musicName;
private TextView tvMusicName;
private Button btnPlayOrPause;
private int currentPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvMusicName = (TextView)findViewById(R.id.tv_music_name);
btnPlayOrPause = (Button)findViewById(R.id.btn_play_pause);
musicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
if(musicDir.list()!=null){
musicName = musicDir.list()[0];
tvMusicName.setText("音乐名:"+musicName.substring(0,musicName.lastIndexOf('.')));
}else{
Toast.makeText(this,"存储卡上Music目录里没有音乐文件!",Toast.LENGTH_LONG).show();
}
mp = new MediaPlayer();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Toast.makeText(MainActivity.this,"音乐播放完毕!",Toast.LENGTH_LONG).show();
currentPosition = 0;
btnPlayOrPause.setBackgroundResource(R.drawable.play_button_selector);
}
});
}
private void play() throws Exception{
mp.reset();
mp.setDataSource(musicDir.getAbsolutePath()+"/"+musicName);
mp.prepare();
mp.seekTo(currentPosition);
mp.start();
btnPlayOrPause.setBackgroundResource(R.drawable.pause_button_selector);
}
private void pause() {
mp.pause();
currentPosition = mp.getCurrentPosition();
btnPlayOrPause.setBackgroundResource(R.drawable.play_button_selector);
}
public void doPlayOrPause(View view) throws Exception{
// 判断音乐是否在播放
if (mp.isPlaying()) {
// 暂停音乐
pause();
} else {
// 播放音乐
play();
}
}
protected void onDestroy() {
super.onDestroy();
if (mp.isPlaying()) {
// 停止播放
mp.stop();
// 释放媒体播放器
mp.release();
// 销毁媒体播放器
mp = null;
}
}
}