文档介绍:音乐播放器之启动服务
在“音乐播放器之编写服务”中我们已完成了服务类的相关编写,接下来的工作就是:在Activity中开启服务并实现服务里面方法的调用。具体步骤如下:
由于音乐的播放是在后台长期运行的,即使退出当前应用该服务仍在后台运行。所以,使用startService的方法开启服务。代码如例1-1:
例1-1
//开启服务,保证服务长期后台运行
Intent intent = new Intent(this,);
startService(intent);
通过方法bindService绑定服务以便能够调用服务里面的方法。代码如例1-2所示:
例1-2
//绑定服务,调用服务里面的方法
conn=new MyConn();
bindService(intent, conn, BIND_AUTO_CREATE);
例1-2中的MyConn是Activity中的一个内部类,该类继承ServiceConnection,代码如例1-3所示:
例1-3
public class MyConn implements ServiceConnection{
***@Override
public void ponentName name, IBinder service) {
iMusicService = (IMusicService) service;
}
***@Override
public void ponentName name) {
// TODO Auto-generated method stub
}
}
在例1-3中当绑定服务成功时,就会调用onServiceConnected方法返回一个中间人对象IMusicService。
当点击ListView时,调用服务类的方法,代码如例1-4所示
例1-4
(new OnItemClickListener() {
***@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
("正在播放:"+(position).getName());
(infos, position);
}
});
例1-4调用中间人iMusicService的callplay方法来实现播放的过程。运行程序,此时logcat打印信息如图1-1所示。
图1-1所示
图1-1可知:后台音乐播放服务已开启,并在该服务中实现了音乐的循环播放。
提出问题一
点击“BACK“退出当前应用,此时logcat输出错误信息,如图1-2所示:
图1-2所示
图1-2所示的错误原因我们在之前的文档中讲述过(参考:服务生命周期之bind方式)
解决问题一
在点击“BACK”按键退出当前Activity时,我们要解除服务绑定。代码如例1-5所示:
例1-5
***@Override
protected void onDestroy() {
unbindS