背景音乐的实现

通过利用Service来实现该功能
将要播放的歌曲放入raw文件夹中

 
 
 
[html] view plaincopy
 
  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>  
[html] view plaincopy
 
  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. }    
[html] view plaincopy
 
  1. <pre name="code" class="html">至此,一个完整的服务生成,接下来是在Activity中启动服务。  
  2. <strong>修改 AndroidManifest.xml:  
  3.   
  4. 在 Package Explorer 视窗里找到目前 Android 项目的资讯描述档,名称为 AndroidManifest.xml。这是一个用來描述 Android 应用程序「整体资讯」的文件,每个 Android 应用程序项目都会有一个。在这里修改 Androidmanifest.xml 的目的是为了「 Android 应用程序加入一个 Service 类别」,这样才有办法驱动 Service。</strong>  
  5. [html]   
[html] view plaincopy
 
  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"  

android:exported="true" android:process=":remote"> </service> </application> </manifest>

posted on 2015-07-16 12:13  被风吹乱的回忆  阅读(194)  评论(0编辑  收藏  举报