码迷,mamicode.com
首页 > 其他好文 > 详细

音乐播放

时间:2015-07-04 11:02:56      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

在android应用程序里,有一种没有UI的类(android.app.Service)——Service。简单来说,Service是一个 background process(背景程序),通过背景程序,可以实现一些不需要UI的功能,比如播放背景音乐。

1 <strong>1、Activity类
2 [java]
3 </strong>  <pre name="code" class="html">package demo.camera;  

 

1 /** * 演示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(); } } }

 

1 <strong>新建一个AudioService 类,<span style="font-family: Arial, Helvetica, sans-serif;">AudioService 类</span><span style="font-family: Arial, Helvetica, sans-serif;">继承 android.app.Service,几个有关Service 的重要概念如下:</span>
2 
3 1. Service 对象以 separated process 的方式执行,这表示 Service 与 UI(Activity)并不在同一个 process 里执行,而是各自在不同的 process 执行。
4 
5 2. Android应用程序是在 Activity 启动与停止 Service。
6 
7 3. 重载(override)onStart() 方法(method)在 Service 被启动,执行我们想要的背景功能。
8 
9 4. 重载 onDestroy() 方法在 Service 被停止时,停止执行中的背景功能。</strong>
 1 <pre name="code" class="html"><strong>2、AudioService类
 2 [java] </strong>
 3 package demo.camera;  
 4 import android.app.Service;  
 5 import android.content.Intent;  
 6 import android.media.MediaPlayer;  
 7 import android.os.Binder;  
 8 import android.os.IBinder;  
 9 import android.widget.MediaController.MediaPlayerControl;  
10 /** 
11  * 为了可以使得在后台播放音乐,我们需要Service 
12  * Service就是用来在后台完成一些不需要和用户交互的动作 
13  * @author Administrator 
14  * 
15  */  
16 public class AudioService extends Service implements MediaPlayer.OnCompletionListener{  
17       
18     MediaPlayer player;  
19       
20     private final IBinder binder = new AudioBinder();  
21     @Override  
22     public IBinder onBind(Intent arg0) {  
23         // TODO Auto-generated method stub  
24         return binder;  
25     }  
26     /** 
27      * 当Audio播放完的时候触发该动作 
28      */  
29     @Override  
30     public void onCompletion(MediaPlayer player) {  
31         // TODO Auto-generated method stub  
32         stopSelf();//结束了,则结束Service  
33     }  
34       
35     //在这里我们需要实例化MediaPlayer对象  
36     public void onCreate(){  
37         super.onCreate();  
38         //我们从raw文件夹中获取一个应用自带的mp3文件  
39         player = MediaPlayer.create(this, R.raw.eason);  
40         player.setOnCompletionListener(this);  
41     }  
42       
43     /** 
44      * 该方法在SDK2.0才开始有的,替代原来的onStart方法 
45      */  
46     public int onStartCommand(Intent intent, int flags, int startId){  
47         if(!player.isPlaying()){  
48             player.start();  
49         }  
50         return START_STICKY;  
51     }  
52       
53     public void onDestroy(){  
54         //super.onDestroy();  
55         if(player.isPlaying()){  
56             player.stop();  
57         }  
58         player.release();  
59     }  
60       
61     //为了和Activity交互,我们需要定义一个Binder对象  
62     class AudioBinder extends Binder{  
63           
64         //返回Service对象  
65         AudioService getService(){  
66             return AudioService.this;  
67         }  
68     }  
69       
70     //后退播放进度  
71     public void haveFun(){  
72         if(player.isPlaying() && player.getCurrentPosition()>2500){  
73             player.seekTo(player.getCurrentPosition()-2500);  
74         }  
75     }  
76 }  

<pre name="code" class="html">至此,一个完整的服务生成,接下来是在Activity中启动服务。 <strong>修改 AndroidManifest.xml:

在 Package Explorer 视窗里找到目前 Android 项目的资讯描述档,名称为 AndroidManifest.xml。这是一个用來描述 Android 应用程序「整体资讯」的文件,每个 Android 应用程序项目都会有一个。在这里修改 Androidmanifest.xml 的目的是为了「 Android 应用程序加入一个 Service 类别」,这样才有办法驱动 Service。</strong> [html]

 1 <?xml version="1.0" encoding="utf-8"?>  
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
 3     package="com.android"  
 4     android:versionCode="1"  
 5     android:versionName="1.0" >  
 6   
 7     <uses-sdk android:minSdkVersion="10" />  
 8   
 9     <application  
10         android:icon="@drawable/ic_launcher"  
11         android:label="@string/app_name" >  
12         <activity  
13             android:name=".WebTestActivity"  
14             android:label="@string/app_name" >  
15             <intent-filter>  
16                 <action android:name="android.intent.action.MAIN" />  
17   
18                 <category android:name="android.intent.category.LAUNCHER" />  
19             </intent-filter>  
20         </activity>  
21         <service  
22             <pre name="code" class="html">            android:name=".AudioService"

 

音乐播放

标签:

原文地址:http://www.cnblogs.com/zhiai1314/p/4620327.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!