示例代码 简易的播放器:
A. 写一个接口,在接口中写一个要暴露出去的方法
B. 让服务里的内部类实现这个接口
C. 在activity的连接成功后,强转为接口类型
D. 调用接口中的方法,实际上调用的时接口的实现类服务里的内部类里的方法
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;
public class MusicService extends Service {
private MediaPlayer mediaPlayer;
@Override
public IBinder onBind(Intent intent) {
return new Music();
}
private class Music extends Binder implements IMusicService{
@Override
public void play() {
playMusic();
}
@Override
public void pause() {
pauseMusic();
}
@Override
public void stop() {
stopMusic();
}
@Override
public void resume() {
resumeMusic();
}
}
public void playMusic(){
//避免音乐二重唱
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();//释放音乐
mediaPlayer = null;
}
//创建音乐对象
mediaPlayer = MediaPlayer.create(this, R.raw.ib);
//开启播放
mediaPlayer.start();
}
public void stopMusic() {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
}
public void resumeMusic() {
if (mediaPlayer != null && !mediaPlayer.isPlaying()) {
mediaPlayer.start();
}
}
public void pauseMusic(){
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
}
/**
* 音乐服务的接口
* 暴露播放 、暂停、停止、继续播放的功能
*/
public interface IMusicService {
/**
* 播放音乐
*/
public void play();
public void pause();
public void stop();
public void resume();
}
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
public class MainActivity extends Activity {
private Intent intent;
private MusicCon mConn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// start开启服务,让服务长期运行在后台
intent = new Intent(this, MusicService.class);
startService(intent);
// bind绑定服务,调用服务里的方法
mConn = new MusicCon();
bindService(intent, mConn, BIND_AUTO_CREATE);
}
/**
* 播放音乐
*/
public void start(View v) {
mService.play();
}
/**
* 暂停音乐
*/
public void pause(View v) {
mService.pause();
}
/**
* 停止播放
*/
public void stop(View v) {
mService.stop();
}
/**
* 继续播放音乐
*/
public void resume(View v) {
mService.resume();
}
private IMusicService mService;
/**
* 音乐的连接对象
*/
private class MusicCon implements ServiceConnection {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = (IMusicService) service;
}
}
/**
* 在activity销毁前解绑服务
*/
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(mConn);
}
}
清单文件注册服务:
<service android:name="com.example.dugu_music.MusicService" ></service>