Android多媒体学习六:利用Service实现背景音乐的播放

Android同意我们使用Service组件来完毕后台任务。这些任务的同意不会影响到用户其它的交互。

 

1、Activity类

[java] view plaincopy
  1. package demo.camera;  
  2. import android.app.Activity;  
  3. import android.content.ComponentName;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.content.ServiceConnection;  
  7. import android.os.Bundle;  
  8. import android.os.IBinder;  
  9. import android.view.View;  
  10. /** 
  11.  * 演示Activity怎样利用Service来完毕后台Audio的播放功能 
  12.  * 同一时候怎样将Service和Activity进行绑定 
  13.  * @author Administrator 
  14.  * 
  15.  */  
  16. public class BackgroundAudioDemo extends Activity {  
  17.       
  18.     private AudioService audioService;  
  19.       
  20.     //使用ServiceConnection来监听Service状态的变化  
  21.     private ServiceConnection conn = new ServiceConnection() {  
  22.           
  23.         @Override  
  24.         public void onServiceDisconnected(ComponentName name) {  
  25.             // TODO Auto-generated method stub  
  26.             audioService = null;  
  27.         }  
  28.           
  29.         @Override  
  30.         public void onServiceConnected(ComponentName name, IBinder binder) {  
  31.             //这里我们实例化audioService,通过binder来实现  
  32.             audioService = ((AudioService.AudioBinder)binder).getService();  
  33.               
  34.         }  
  35.     };  
  36.       
  37.     public void onCreate(Bundle savedInstanceState){  
  38.         super.onCreate(savedInstanceState);  
  39.         setContentView(R.layout.back_audio);  
  40.     }  
  41.       
  42.       
  43.     public void onClick(View v){  
  44.         int id = v.getId();  
  45.         Intent intent = new Intent();  
  46.         intent.setClass(this, AudioService.class);        
  47.         if(id == R.id.btn_start){  
  48.             //启动Service。然后绑定该Service,这样我们能够在同一时候销毁该Activity,看看歌曲是否还在播放  
  49.             startService(intent);  
  50.             bindService(intent, conn, Context.BIND_AUTO_CREATE);  
  51.             finish();  
  52.         }else if(id == R.id.btn_end){  
  53.             //结束Service  
  54.             unbindService(conn);  
  55.             stopService(intent);  
  56.             finish();  
  57.         }else if(id == R.id.btn_fun){  
  58.             audioService.haveFun();  
  59.         }  
  60.     }  
  61. }  

2、Service类

[java] view plaincopy
  1. package demo.camera;  
  2. import android.app.Service;  
  3. import android.content.Intent;  
  4. import android.media.MediaPlayer;  
  5. import android.os.Binder;  
  6. import android.os.IBinder;  
  7. import android.widget.MediaController.MediaPlayerControl;  
  8. /** 
  9.  * 为了能够使得在后台播放音乐,我们须要Service 
  10.  * Service就是用来在后台完毕一些不须要和用户交互的动作 
  11.  * @author Administrator 
  12.  * 
  13.  */  
  14. public class AudioService extends Service implements MediaPlayer.OnCompletionListener{  
  15.       
  16.     MediaPlayer player;  
  17.       
  18.     private final IBinder binder = new AudioBinder();  
  19.     @Override  
  20.     public IBinder onBind(Intent arg0) {  
  21.         // TODO Auto-generated method stub  
  22.         return binder;  
  23.     }  
  24.     /** 
  25.      * 当Audio播放完的时候触发该动作 
  26.      */  
  27.     @Override  
  28.     public void onCompletion(MediaPlayer player) {  
  29.         // TODO Auto-generated method stub  
  30.         stopSelf();//结束了。则结束Service  
  31.     }  
  32.       
  33.     //在这里我们须要实例化MediaPlayer对象  
  34.     public void onCreate(){  
  35.         super.onCreate();  
  36.         //我们从raw目录中获取一个应用自带的mp3文件  
  37.         player = MediaPlayer.create(this, R.raw.tt);  
  38.         player.setOnCompletionListener(this);  
  39.     }  
  40.       
  41.     /** 
  42.      * 该方法在SDK2.0才開始有的。替代原来的onStart方法 
  43.      */  
  44.     public int onStartCommand(Intent intent, int flags, int startId){  
  45.         if(!player.isPlaying()){  
  46.             player.start();  
  47.         }  
  48.         return START_STICKY;  
  49.     }  
  50.       
  51.     public void onDestroy(){  
  52.         //super.onDestroy();  
  53.         if(player.isPlaying()){  
  54.             player.stop();  
  55.         }  
  56.         player.release();  
  57.     }  
  58.       
  59.     //为了和Activity交互,我们须要定义一个Binder对象  
  60.     class AudioBinder extends Binder{  
  61.           
  62.         //返回Service对象  
  63.         AudioService getService(){  
  64.             return AudioService.this;  
  65.         }  
  66.     }  
  67.       
  68.     //后退播放进度  
  69.     public void haveFun(){  
  70.         if(player.isPlaying() && player.getCurrentPosition()>2500){  
  71.             player.seekTo(player.getCurrentPosition()-2500);  
  72.         }  
  73.     }  
  74. }  

3、在清单文件AndroidManifest.xml中配置Service

 

        <service 
            android:name=".AudioService" />

posted @ 2017-06-27 10:42  mfmdaoyou  阅读(2284)  评论(0编辑  收藏  举报