Android允许我们使用Service组件来完成后台任务,这些任务的允许不会影响到用户其他的交互。
1、Activity类
package demo.camera; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.view.View; /** * 演示Activity如何利用Service来完成后台Audio的播放功能 * 同时如何将Service和Activity进行绑定 * @author Administrator * */ public class BackgroundAudioDemo extends Activity { private AudioService audioService; //使用ServiceConnection来监听Service状态的变化 private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub audioService = null; } @Override public void onServiceConnected(ComponentName name, IBinder binder) { //这里我们实例化audioService,通过binder来实现 audioService = ((AudioService.AudioBinder)binder).getService(); } }; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.back_audio); } public void onClick(View v){ int id = v.getId(); Intent intent = new Intent(); intent.setClass(this, AudioService.class); if(id == R.id.btn_start){ //启动Service,然后绑定该Service,这样我们可以在同时销毁该Activity,看看歌曲是否还在播放 startService(intent); bindService(intent, conn, Context.BIND_AUTO_CREATE); finish(); }else if(id == R.id.btn_end){ //结束Service unbindService(conn); stopService(intent); finish(); }else if(id == R.id.btn_fun){ audioService.haveFun(); } } }
2、Service类
package demo.camera; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.Binder; import android.os.IBinder; import android.widget.MediaController.MediaPlayerControl; /** * 为了可以使得在后台播放音乐,我们需要Service * Service就是用来在后台完成一些不需要和用户交互的动作 * @author Administrator * */ public class AudioService extends Service implements MediaPlayer.OnCompletionListener{ MediaPlayer player; private final IBinder binder = new AudioBinder(); @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return binder; } /** * 当Audio播放完的时候触发该动作 */ @Override public void onCompletion(MediaPlayer player) { // TODO Auto-generated method stub stopSelf();//结束了,则结束Service } //在这里我们需要实例化MediaPlayer对象 public void onCreate(){ super.onCreate(); //我们从raw文件夹中获取一个应用自带的mp3文件 player = MediaPlayer.create(this, R.raw.tt); player.setOnCompletionListener(this); } /** * 该方法在SDK2.0才开始有的,替代原来的onStart方法 */ public int onStartCommand(Intent intent, int flags, int startId){ if(!player.isPlaying()){ player.start(); } return START_STICKY; } public void onDestroy(){ //super.onDestroy(); if(player.isPlaying()){ player.stop(); } player.release(); } //为了和Activity交互,我们需要定义一个Binder对象 class AudioBinder extends Binder{ //返回Service对象 AudioService getService(){ return AudioService.this; } } //后退播放进度 public void haveFun(){ if(player.isPlaying() && player.getCurrentPosition()>2500){ player.seekTo(player.getCurrentPosition()-2500); } } }
3、在清单文件AndroidManifest.xml中配置Service
<service android:name=".AudioService" />
转自chenjie19891104的的博客(http://blog.csdn.net/chenjie19891104/article/category/756236),以
便以后学习和查询!
Android多媒体学习六:利用Service实现背景音乐的播放
学习总结:
1、Activity中要绑定Service(bindService)
<1>、Service中需要要创建实现Binder的一个子类,实现getService()方法返回Service
<2>、Service中需要要实现onBind()方法,返回Binder的子类。
<3>、需要实现ServiceConnection,ServiceConnection有onServiceDisconnected()和onServiceConnected()两个抽象方法,
实现这2个方法,并在onServiceConnected()方法中调用参数Binder的getService()方法返回Service实例。
<4>、在Activity中使用Service实例调用各个方法。
2、MediaPlayer常用的方法
//创建MediaPlay实例
MediaPlayer player = MediaPlayer.create(this, R.raw.tt);
//设置播放完后的监听事件 MediaPlayer.OnCompletionListener
player.setOnCompletionListener(this);
//是否在播放
player.isPlaying();
//开始播放
player.start();
//停止播放
player.stop();
//停止播放后,还要释放资源
player.release();