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

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

扫描二维码关注公众号,回复: 779092 查看本文章

        <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();  


 


 

猜你喜欢

转载自longyi-java.iteye.com/blog/1678581