package thonlon.example.cn.servicedemo;

import android.app.Service;

import android.content.Intent;

import android.media.MediaPlayer;

import android.net.Uri;

import android.os.IBinder;

import java.io.IOException;

/**

* 绑定服务的时候被调用

*/

public class MusicService extends Service {

private MediaPlayer mediaPlayer;

@Override

public IBinder onBind(Intent intent) {

return null;

}

/**

* Service被创建后被调用

*/

@Override

public void onCreate() {

// 播放本地资源的音乐

// mediaPlayer = MediaPlayer.create(this, R.raw.snh);

// 播放文件系统的音乐

// File file = new File(Environment.getExternalStorageDirectory(), "zshyn.mp3");

// mediaPlayer = new MediaPlayer();

// try {

// mediaPlayer.setDataSource(file.getAbsolutePath());//通过获取绝对路径来设置播放源头

// } catch (IOException e) {

// e.printStackTrace();

// 播放网络中的音乐

mediaPlayer = new MediaPlayer();

Uri uri = Uri.parse("http://www.nxl123.cn/snh.mp3");

try {

mediaPlayer.setDataSource(this, uri);//或者直接mediaPlayer.setDataSource("http://www.nxl123.cn/snh.mp3");

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* Service被开始后调用

*/

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

mediaPlayer.prepareAsync();//准备资源,可能阻塞主线程,所以要在子线程调用。在这里使用prepareAsync函数就可以了

//防止资源还没有准备完毕就播放音乐,所以要设置准备资源监听器

//表示当准备资源完成后,调用监听器中onPrepare方法

mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

@Override

public void onPrepared(MediaPlayer mp) {

mediaPlayer.start();//开始播放音乐

}

});

//MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。

return super.onStartCommand(intent, flags, startId);

}

/**

* Service被停止后调用

*/

@Override

public void onDestroy() {

mediaPlayer.stop();//停止播放

mediaPlayer.release();//释放准备的资源,如果还需要用到此对象则可先不销毁

}

}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐