Android—在Activity中绑定service播放音乐
2015-01-08 10:17
591 查看
摘要:本文用来介绍在Activity中绑定一个服务(service),在服务中播放音乐的方法。相信看完之后会对绑定service有个直观的认识和掌握基本用法,先看代码,再看解释。
public class MusicService extends Service { private MediaPlayer mediaPlayer = new MediaPlayer(); private final IBinder iBinder = new MusicBinder(); public MusicService() { } /** * MusicBinder 提供了getService方法来获得当前MusicService的实例 */ public class MusicBinder extends Binder{ public MusicService getService(){ return MusicService.this; } } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. return iBinder ; }
首先,自定义一个MusicService并继承Service类,然后在定义一个MusicBinder对象,这个对象是内部类并继承Binder类实现的,在类实现里面包含一个方法,此方法是用来返回当前这个Service对象用的,然后在重写的onBind方法中,返回这个MusicBinder对象。至此,MusicService部分就完成了,接下来看Activity中的实现。
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(getActivity(),MusicService.class); getActivity().bindService(intent,connection,Context.BIND_AUTO_CREATE);//绑定播放音乐的服务 }
在Activity中onCreate的方法中创建一个intent对象,表示要绑定到哪个服务中去,然后调用 bindService方法绑定MusicService服务(因为我这是在fragment中写的播放器,所以要用getActivity()方法来获得Activity,不然的话直接用bindService就行了),bindService的第一个参数是Intent,第二个参数是表示一个服务连接对象,第四个参数是表示自动创建服务,如果服务不存在就创建服务,否则不创建。
private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { MusicService.MusicBinder binder = (MusicService.MusicBinder) service; musicService = binder.getService(); playMusic(audioList.get(currentItem)); bound=true; } @Override public void onServiceDisconnected(ComponentName name) { bound = false; } };
定义第二个参数的ServiceConnect对象,在里面重写它的方法onServiceConnected(),把参数IBinder转换成我们自定义的MusicBinder对象,再用MusicBinder中的getService获得MusicService服务,并把它赋值给声明好的MusicService对象(musicService),这样就建立起了程序和服务之间的联系。
/** * 播放音乐的方法 * @param currentPath 音乐文件路径 */ public void playMusic(String currentPath){ try { if(mediaPlayer.isPlaying()){//如果当前正在播放音乐,则先停止 mediaPlayer.stop(); } mediaPlayer.reset();//重置播放器z状态 mediaPlayer.setDataSource(currentPath); mediaPlayer.prepare(); mediaPlayer.start(); // updateSeekBar(); } catch (IOException e) { e.printStackTrace(); } }
然后在MusicService中写好播放音乐的playMusic()方法。
musicService.playMusic(currentPath);
在Activity中需要服务播放音乐时,就直接调用playMusic方法就行了,接下来介绍服务的解除绑定。
@Override public void onDestroy() { if(bound){ getActivity().unbindService(connection); bound = false; } super.onDestroy(); }
在Activity中的onDestroy()方法中,判断是不是绑定了服务,判断是否绑定就设置一个全局的布尔类型bound就行了。如果绑定了就调用unbindService()方法解除绑定,解除绑定后根据绑定service的生命周期,它会被系统自动销毁。
至此,一个绑定service的方法法就完成了,本人菜B一枚,不正之处,还望指出,不甚感激!
相关文章推荐
- android 音乐播放 启动方式 (1)利用内部类绑定service传送数据,只适用于单activity
- Android应用实例之----基于Service与ContentProvider的音乐播放实例!
- android 服务的应用,在Activity中实现背景音乐播放
- 第84章、Service之二(与Activity绑定)(从零开始学Android)
- 【Android】简易音乐播放器(介绍使用Service和Broadcast播放音乐文件)
- 【Android】简易音乐播放器(介绍使用Service和Broadcast播放音乐文件)
- android 之 Service 播放音乐
- Android应用实例之----基于Service与ContentProvider的音乐播放实例!
- Android应用实例之----基于Service与ContentProvider的音乐播放实例!
- Android Service AIDL 远程调用服务之简单音乐播放实例【转载】
- Android Activity绑定到Service
- Android MediaPlayer播放音乐有必要使用Service来调用吗?
- Android应用实例之----基于Service与ContentProvider的音乐播放实例!
- android89--Activity怎么和service绑定,怎么在activity中启动自己对应的service
- Android Service使用方法--简单音乐播放实例
- Android中Activity和Service的绑定(一)
- android 利用service来播放音乐
- Android中Activity和Service的绑定(二)
- Android实现音乐的播放与停止(Service的初级应用)
- android91--不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放