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

1、Service介绍

官方解释: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" />






  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值