Android系统提供一个多媒体类:MediaPlay,可以用来播放音乐,视频.
一般我们的播放器是要求都是退出activity也会依然会继续播放,所以我们会选用在service里实现,可以在后台播放.
public class MusicService extends Service {
/**
* 要播放的音乐文件的路径
*/
privateString path;
privateMediaPlayer mediaPlayer;
/**
* 音乐播放的状态
*/
privateint PLAYING_STATUS;
privateint STOP = 0;
privateint PLAYING = 1;
privateint PAUSE = 2;
@Override
publicIBinder onBind(Intent intent) {
return new MyBinder();
}
private class MyBinder extends Binder implements IMusicService {
@Override
public MusicServicecallGetMusicService() {
returngetMusicService();
}
}
/**
* 返回服务的对象
*
* @return
*/
public MusicService getMusicService() {
return this;
}
@Override
public void onCreate() {
System.t.println("服务被创建了。");
super.onCreate();
}
@Override
public void onDestroy() {
System.out.println("服务被销毁了。");
super.onDestroy();
}
/**
* 设置要播放的音乐
*
* @param path
* 音乐文件的路径
*/
public void setMusic(String path) {
this.path = path;
}
/**
* 播放音乐,播放之前请设置音乐的路径
*/
public boolean play() {
//这里的一if逻辑主要是为了避免重复播放
if (mediaPlayer != null &&mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.release();
//每当stop后就release去释放下资源,避免内存泄漏
mediaPlayer= null;
}
try {
if(path == null) {
return false;
}
mediaPlayer= new MediaPlayer();
mediaPlayer.reset();//重置设置
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(path);
mediaPlayer.prepare();//start前先准备下
mediaPlayer.start();
PLAYING_STATUS= PLAYING;
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 暂停音乐
*/
public void pause() {
if (mediaPlayer != null && mediaPlayer.isPlaying()){
mediaPlayer.pause();
PLAYING_STATUS= PAUSE;
}
}
/**
* 继续开始
*/
public void resume() {
if (mediaPlayer != null &&PLAYING_STATUS == PAUSE) {
mediaPlayer.start();
PLAYING_STATUS= PLAYING;
}
}
/**
* 停止播放音乐
*/
public void stop() {
if (mediaPlayer != null &&mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer= null;
PLAYING_STATUS= STOP;
}
}
}
在avtivity中通过绑定服务bindService,就可以调用上面service中的方法,传入path进行音乐播放了.
如何绑定服务调用方法在前面的文章中有讲到,这里就不重复了.