您的位置:首页 > 移动开发 > Android开发

Android学习笔记(21)---使用Service后台播放MediaPlayer的音乐

2012-08-19 10:55 501 查看
1、Service介绍

官方解释:A
Service
is
an application component that can perform long-running operations in the background and does not provide a user interface. Another application component can start a service and it will continue to run in the background even if the user switches to another
application

也就是说Service是一个没有提供用户界面而能够提供在后台运行的构件,其他应用能启动一个Service,即使是切换到其他的应用它还能在后台运行。

2、Service的生命周期

Android Service的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。

3、下面举个播放音乐的例子:

首先在res创建目录raw,然后在里面添加MP3文件

继承一个Service类:

package com.Moruna.studys;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;

public class MyService extends Service {
	private MediaPlayer mp;

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		// 初始化音乐资源
		try {
			System.out.println("create player");
			// 创建MediaPlayer对象
			mp = new MediaPlayer();
			mp = MediaPlayer.create(MyService.this, R.raw.alarm);
			// mp.prepare();
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		super.onCreate();
	}

	@Override
	public void onStart(Intent intent, int startId) {
		// TODO Auto-generated method stub
		// 开始播放音乐
		mp.start();
		// 音乐播放完毕的事件处理
		mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

			public void onCompletion(MediaPlayer mp) {
				// TODO Auto-generated method stub
				// 循环播放
				try {
					mp.start();
				} catch (IllegalStateException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		// 播放音乐时发生错误的事件处理
		mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {

			public boolean onError(MediaPlayer mp, int what, int extra) {
				// TODO Auto-generated method stub
				// 释放资源
				try {
					mp.release();
				} catch (Exception e) {
					e.printStackTrace();
				}

				return false;
			}
		});

		super.onStart(intent, startId);
	}

	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		// 服务停止时停止播放音乐并释放资源
		mp.stop();
		mp.release();
		super.onDestroy();
	}

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}

}
在Activity中调用MyService启动音乐或关闭音乐,这时就算退出应用,如果没有关闭Service,它还会在后台播放直至关闭

在Alarm这个Activity继承类中启动音乐:

// 播放闹铃
		Intent intentSV = new Intent(Alarm.this, MyService.class);
		startService(intentSV);


在Alarm这个Activity继承类中关闭音乐:

//关闭闹铃声
		Intent intentSV = new Intent(Alarm.this, MyService.class);
		stopService(intentSV);


这样就能实现Service在后台播放所要播放的音乐,当然,在哪里需要启动或关闭音乐看你自己个人需求。

另需要注意一点的是,别忘了注册:

在AndroidManifest.xml中的Application中加入:

<service android:name=".MyService" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: