绑定服务后台播放音频的简单示例
1.服务
当应用程序不再位于前台且没有正在使用它的活动的时候,为了确保音频继续播放,我们需要创建一个服务。服务是安卓应用程序的一个组件,其用于在后台运行任务,而无须与用户交互。
2. 本地服务与远程服务
安卓中存在几个可用的不同服务类。本地服务(Local Service):作为特定应用程序的一部分存在,而且只能通过该应用程序访问和控制。远程服务(Remote Service):是另一种类型的服务,它们可以与其他应用程序进行通信,由其他应用程序访问和控制。在此,仅介绍使用一个本地服务提供音频播放的功能。
3.本地服务
服务类需要继承android.app.Service类。该类是抽象类,所以为了扩展它,必须实现onBind方法。
public class MusicService extends Service implements OnCompletionListener{ static final String TAG="PLAYERSERVICE"; MediaPlayer mediaPlayer; private final IBinder msBinder=new MusicServiceBinder();//* public class MusicServiceBinder extends Binder//* { MusicService getService() { return MusicService.this; } }@Overridepublic void onCreate(){// TODO Auto-generated method stub//super.onCreate();Log.v(TAG,"onCreate");mediaPlayer=MediaPlayer.create(this,R.raw.music);mediaPlayer.setOnCompletionListener(this);}@Overridepublic void onDestroy(){// TODO Auto-generated method stubif(mediaPlayer.isPlaying()){mediaPlayer.stop();}mediaPlayer.release();Log.v(TAG,"onDestroy");//super.onDestroy();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId){// TODO Auto-generated method stubLog.v(TAG,"onStartCommand");if(!mediaPlayer.isPlaying()){mediaPlayer.start();}return START_STICKY;//return super.onStartCommand(intent, flags, startId);}@Overridepublic IBinder onBind(Intent intent){// TODO Auto-generated method stubreturn msBinder;//*}@Overridepublic void onCompletion(MediaPlayer mediaPlayer){// TODO Auto-generated method stub//stopSelf();mediaPlayer.start();}public void PauseMusic(){if(mediaPlayer.isPlaying()){mediaPlayer.pause();}}public void ResumeMusic(){if(!mediaPlayer.isPlaying()){mediaPlayer.start();}}public boolean IsPlayNow(){return mediaPlayer.isPlaying();}}