android 服务的应用,在Activity中实现背景音乐播放
来源:互联网 发布:浙江每日互动网络 编辑:程序博客网 时间:2024/05/18 20:13
在android应用程序里,有一种没有UI的类(android.app.Service)——Service。简单来说,Service是一个 background process(背景程序),通过背景程序,可以实现一些不需要UI的功能,比如播放背景音乐。
下面是一个实现播放背景音乐的例程:
在上个工程的基础上,在Activity中添加音乐播放功能。
在工程中添加一个新类yypService(File->New->Class):
import android.app.Service;import android.content.Intent;import android.os.IBinder;public class yypService extends Service {@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}}
yypService 类继承 android.app.Service,几个有关Service 的重要概念如下:
1. Service 对象以 separated process 的方式执行,这表示 Service 与 UI(Activity)并不在同一个 process 里执行,而是各自在不同的 process 执行。
2. Android应用程序是在 Activity 启动与停止 Service。
3. 重载(override)onStart() 方法(method)在 Service 被启动,执行我们想要的背景功能。
4. 重载 onDestroy() 方法在 Service 被停止时,停止执行中的背景功能。
下面是Service的具体实现:
package com.android;import java.io.IOException;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.IBinder;public class yypService extends Service {private MediaPlayer mp;@Overridepublic 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 blocke.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);}@Overridepublic void onCreate() {// TODO Auto-generated method stub// 初始化音乐资源try {// 创建MediaPlayer对象mp = new MediaPlayer();// 将音乐保存在res/raw/xingshu.mp3,R.java中自动生成{public static final int xingshu=0x7f040000;}mp = MediaPlayer.create(yypService.this, R.raw.xingshu);// 在MediaPlayer取得播放资源与stop()之后要准备PlayBack的状态前一定要使用MediaPlayer.prepeare()mp.prepare();} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}super.onCreate();}@Overridepublic void onDestroy() {// TODO Auto-generated method stub// 服务停止时停止播放音乐并释放资源mp.stop();mp.release();super.onDestroy();}@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}}
至此,一个完整的服务生成,接下来是在Activity中启动服务。
修改 AndroidManifest.xml
在 Package Explorer 视窗里找到目前 Android 项目的资讯描述档,名称为 AndroidManifest.xml。这是一个用來描述 Android 应用程序「整体资讯」的文件,每个 Android 应用程序项目都会有一个。在这里修改 Androidmanifest.xml 的目的是为了「 Android 应用程序加入一个 Service 类别」,这样才有办法驱动 Service。
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".WebTestActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <serviceandroid:name=".yypService"android:exported="true"android:process=":remote"> </service> </application></manifest>
配置好之后,接下来就是在Activity中添加启动服务代码 Service - startService()。
在OnCreate()中添加如下代码:
Intent intent = new Intent(WebTestActivity.this,yypService.class); startService(intent);
Activity 类里有一个 method 叫做 startService:
startService(Intent service)
调用 startService() 即可启动一个 Service ,只是,startService() 的参数是一个「Intent」型,并不是所要启动的类名。「Intent」是一个很像「Event」的类,暂时还没对Intent做深入研究,就先把它当作一个"Event"看吧?
现在,其实已经可以在Activity中播放背景音乐了,但有一个小问题,就是Activity已经被挂起或是被销毁时,背景音乐还是在继续播放的,这也说明Service与Activity是两个不同的进程,我们收下尾,让Activity在OnStop时把背景音乐也停止播放,重载Activity的OnStop:
@Overrideprotected void onStop() {// TODO Auto-generated method stubIntent intent = new Intent(WebTestActivity.this,yypService.class);stopService(intent);super.onStop();}
备注:eclipse的使用小技巧,快速补全重载代码(快捷键Alt+Shift+s -> Override/implement Mothods)。
至此,一个完整的播放背景音乐功能已经全部完成。
- android 服务的应用,在Activity中实现背景音乐播放
- android 服务的应用,在Activity中实现背景音乐播放
- android 服务的应用,在Activity中实现背景音乐播放
- android 服务的应用,在Activity中实现背景音乐播放(转自http://blog.csdn.net/imyang2007/article/details/7597040,仅供个人学习)
- Android 应用播放背景音乐
- android实现背景音乐播放
- android实现背景音乐播放
- android实现背景音乐播放
- android实现背景音乐播放
- android 利用Service实现背景音乐的播放
- Android 实现背景音乐的播放及震动
- Android 实现背景音乐的播放及震动
- MFC工程中播放背景音乐的实现
- android 背景音乐的播放
- 在Android应用中添加背景音乐
- html在不同浏览器里面实现背景音乐的播放
- 在网页中添加Flash的播放或者背景音乐
- Android多媒体学习六:利用Service实现背景音乐的播放
- 关于MFC技术的一点感悟
- Abap/4制作报表(5)
- hiberante面试题 --- hibernate缓存机制详解
- How browsers work–Behind the scenes of modern web browsers (前端必读)
- Abap/4制作报表(6)
- android 服务的应用,在Activity中实现背景音乐播放
- 关于托管与非托管
- 瀑布流
- MCS-51特殊功能寄存器(SPR)的C51定义 .
- 清空、重设input框
- Abap/4制作报表(7)
- Abap/4制作报表(8)
- C#实现Linux登录和文件传输(Routrek.granados和Renci.SshNet的ssh、scp封装)
- Abap/4制作报表(9)