ps:首先来写这个博客主要也是因为在朋友的项目中要用这个技术,因此再好奇的心理下,我也对此来进行了小小的一个试验纯纯的试验【播放一短音乐的功能】。
因为我对这块的理论知识也是一知半解,所以也就不在这卖弄了,有想补充的同鞋可以自行查阅官网API。
好了 不再多废话了说下步骤吧!
- 第一步:创建作为服务端的应用
- 第二步:创建.aidl文件(文件支持格式同java基本数据类型一样,文件名同接口名要一样不然会报错),并写接口方法。保存自动在gen目录下生成同名的.java文件,因为我的服务端是在原有的DEMO中写的所以看到其它的类 大家可以略过
aidl文件中的内容很简单就两个方法 播放和停止,也没有其它太多的内容 第三步:自定义类继承Servicer重写其中的onCreat(),onBind(),onStart()方法;实现音乐的播放停止方法
`public class playMusicService extends Service {
private MediaPlayer mp;@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return bulider;
}@Override
public void onCreate() {
// TODO Auto-generated method stub
mp = new MediaPlayer();
mp = MediaPlayer.create(playMusicService.this, R.raw.s001);
super.onCreate();
}@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub// 当播放发生错误时的处理事件 mp.setOnErrorListener(new OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { // TODO Auto-generated method stub // 释放音乐资源 mp.release(); return false; } }); super.onStart(intent, startId);
}
public play.Stub bulider = new play.Stub() {
@Override public void stop() throws RemoteException { // TODO Auto-generated method stub System.out.println("停止播放"); stopMusic(); } @Override public void playing() throws RemoteException { // TODO Auto-generated method stub System.out.println("开始播放"); playMusic(); }
};
/**
播放音乐的方法
*/
public void playMusic() {
// 开始播放音乐
mp.start();
// 音乐播放完毕的处理事件
mp.setOnCompletionListener(new OnCompletionListener() {@Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub // 循环播放 mp.start(); }
});
if(mp.isPlaying()){
mp.reset();
mp.start();
}
}
/**
- 停止播放的方法
*/
public void stopMusic() {
mp.stop();
mp.release();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
// 服务停止时停止播放音乐并释放资源
mp.stop();
mp.release();
super.onDestroy();
}
}`
到这里关于服务端的内容也就搞定了 ,当然别忘了在AndroidManifest.xml中注册service第四步:创建客户端应用 内容其实也很简单,复制过来服务端的.aidl文件【路径名要一样】,然后通过ServiceConnection接口接收service返回的IBinder对象,`public class MainActivity extends Activity {
private play mPlay;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(“com.example.service.playMusicService.aidl”);
bindService(intent, connection, BIND_AUTO_CREATE);
}/**
- 播放
-
- @param v
- void
- @throws @author
- jingxiang
- @date 2016年12月22日 下午1:54:23
*/
public void playing(View v) {
try {
mPlay.playing();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
- 停止
-
- @param v
- void
- @throws RemoteException
- @throws @author
- jingxiang
- @date 2016年12月22日 下午1:54:46
*/
public void stop(View v) throws RemoteException {
mPlay.stop();
}
ServiceConnection connection = new ServiceConnection() {
@Override public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub mPlay = null; } @Override public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub mPlay = play.Stub.asInterface(service); }
};
}`
至此这个小小的DEMO也就完成了 ,亲测可用 不过音乐播放会有小小问题没解决,不过大概流程也就是这样的!