`

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

 

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


 


 

分享到:
评论

相关推荐

    Android通过Service实现简单的音乐播放

    android音乐播放效果,简单的服务开启。 这里将用到android的四大组件之一:Service 注意:Service是自大组件之一,需要注册。 什么是服务? 1:“Service” 意思即“服务”的意思, 像 Windows 上面的服务...

    Android高级编程--源代码

    作为使用androidsdk构建这些应用程序的实用指南书籍,《android高级编程》从始至终穿插了一系列示例项目,每个项目都引入android的新功能和新技术,以助您达到最圆满的学习效果。书中介绍android的所有基本功能,并...

    新版Android开发教程.rar

    Android Android Android Android 开发背景 � 计算技术、无线接入技术的发展,使嵌入式系统逐渐有能力对桌面系统常规业务进行支持。 � 谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商...

    Google Android SDK开发范例大全(第3版) 1/5

    Web Service存取服务:内嵌网页浏览器、Ajax网页特效、手机气象局、网络播放mp3、网络安装apk程序、远程下载手机铃声、XML-RPC移动博客发布器、手机RSS阅读器、地震速报、网页快照等。 完备的Google网络服务:Google...

    Google Android SDK开发范例大全(第3版) 4/5

    Web Service存取服务:内嵌网页浏览器、Ajax网页特效、手机气象局、网络播放mp3、网络安装apk程序、远程下载手机铃声、XML-RPC移动博客发布器、手机RSS阅读器、地震速报、网页快照等。 完备的Google网络服务:Google...

    Google Android SDK开发范例大全(第3版) 3/5

    Web Service存取服务:内嵌网页浏览器、Ajax网页特效、手机气象局、网络播放mp3、网络安装apk程序、远程下载手机铃声、XML-RPC移动博客发布器、手机RSS阅读器、地震速报、网页快照等。 完备的Google网络服务:Google...

    Google Android SDK开发范例大全(第3版) 5/5

    Web Service存取服务:内嵌网页浏览器、Ajax网页特效、手机气象局、网络播放mp3、网络安装apk程序、远程下载手机铃声、XML-RPC移动博客发布器、手机RSS阅读器、地震速报、网页快照等。 完备的Google网络服务:Google...

    疯狂Android讲义源码

     15.1 利用Android的传感器 547  15.1.1 开发传感器应用 547  15.1.2 下载和安装SensorSimulator 549  15.1.3 利用SensorSimulator开发  传感器应用 551  15.2 Android的常用传感器 553  15.2.1 方向传感器...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...

    《Android高级编程》

    9.2.1 在应用程序中使用SMS 9.2.2 发送SMS信息 9.2.3 监听SMS消息 9.2.4 紧急响应的SMS示例 9.2.5 紧急响应自动化 9.3 小结 第10章 访问Android硬件 10.1 使用媒体API 10.1.1 播放媒体资源 10.1.2 录制多媒体 10.2 ...

    Google Android SDK开发范例大全的目录

    5.13 置换手机背景图——Gallery与setWallpaper整合实现 5.14 撷取手机现存桌面——getWallpaper与setImageDrawable 5.15 文件资源管理器再进化——JavaI/O修改文件名及删除 5.16 取得目前File与Cache的路径——...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    Google Android SDK开发范例大全(完整版) 包含部分书中源码 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 ...

    疯狂Android讲义.part2

    第1章 Android应用与开发环境 1 1.1 Android的发展和历史 2 1.1.1 Android的发展和简介 2 1.1.2 Android平台架构及特性 3 1.2 搭建Android开发环境 5 1.2.1 下载和安装Android SDK 5 1.2.2 安装Eclipse和ADT插件 7 ...

Global site tag (gtag.js) - Google Analytics