背景音乐的实现
通過利用Service來實現該功能 將要播放的歌曲放入raw文件夾中 [html]?view plaincopy
- <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>??
- ??
- 1.?Service?對象以?separated?process?的方式執行,這表示?Service?與?UI(Activity)并不在同一個?process?里執行,而是各自在不同的?process?執行。??
- ??
- 2.?Android應用程序是在?Activity?啟動與停止?Service。??
- ??
- 3.?重載(override)onStart()?方法(method)在?Service?被啟動,執行我們想要的背景功能。??
- ??
- 4.?重載?onDestroy()?方法在?Service?被停止時,停止執行中的背景功能。</strong>??
- <pre?name="code"?class="html"><strong>2、AudioService類??
- [java]?</strong>??
- package?demo.camera;????
- import?android.app.Service;????
- import?android.content.Intent;????
- import?android.media.MediaPlayer;????
- import?android.os.Binder;????
- import?android.os.IBinder;????
- import?android.widget.MediaController.MediaPlayerControl;????
- /**???
- ?*?為了可以使得在后臺播放音樂,我們需要Service???
- ?*?Service就是用來在后臺完成一些不需要和用戶交互的動作???
- ?*?@author?Administrator???
- ?*???
- ?*/????
- public?class?AudioService?extends?Service?implements?MediaPlayer.OnCompletionListener{????
- ????????
- ????MediaPlayer?player;????
- ????????
- ????private?final?IBinder?binder?=?new?AudioBinder();????
- ????@Override????
- ????public?IBinder?onBind(Intent?arg0)?{????
- ????????//?TODO?Auto-generated?method?stub????
- ????????return?binder;????
- ????}????
- ????/**???
- ?????*?當Audio播放完的時候觸發該動作???
- ?????*/????
- ????@Override????
- ????public?void?onCompletion(MediaPlayer?player)?{????
- ????????//?TODO?Auto-generated?method?stub????
- ????????stopSelf();//當結束時,便結束Service????
- ????}????
- ????????
- ????//實例化MediaPlayer對象????
- ????public?void?onCreate(){????
- ????????super.onCreate();????
- ????????//我們從raw文件夾中獲取一個應用自帶的mp3文件????
- ????????player?=?MediaPlayer.create(this,?R.raw.eason);????
- ????????player.setOnCompletionListener(this);????
- ????}????
- ????????
- ????/**???
- ?????*?該方法在SDK2.0才開始有的,用來替代原來的onStart方法???
- ?????*/????
- ????public?int?onStartCommand(Intent?intent,?int?flags,?int?startId){????
- ????????if(!player.isPlaying()){????
- ????????????player.start();????
- ????????}????
- ????????return?START_STICKY;????
- ????}????
- ????????
- ????public?void?onDestroy(){????
- ????????//super.onDestroy();????
- ????????if(player.isPlaying()){????
- ????????????player.stop();????
- ????????}????
- ????????player.release();????
- ????}????
- ????????
- ????//為了和Activity交互,我們需要定義一個Binder對象????
- ????class?AudioBinder?extends?Binder{????
- ????????????
- ????????//返回Service對象????
- ????????AudioService?getService(){????
- ????????????return?AudioService.this;????
- ????????}????
- ????}????
- ????????
- ????//后退播放進度????
- ????public?void?haveFun(){????
- ????????if(player.isPlaying()?&&?player.getCurrentPosition()>2500){????
- ????????????player.seekTo(player.getCurrentPosition()-2500);????
- ????????}????
- ????}????
- }????
- <pre?name="code"?class="html">至此,一個完整的服務生成,接下來是在Activity中啟動服務。??
- <strong>修改?AndroidManifest.xml:??
- ??
- 在?Package?Explorer?視窗里找到目前?Android?項目的資訊描述檔,名稱為?AndroidManifest.xml。這是一個用來描述?Android?應用程序「整體資訊」的文件,每個?Android?應用程序項目都會有一個。在這里修改?Androidmanifest.xml?的目的是為了「?Android?應用程序加入一個?Service?類別」,這樣才有辦法驅動?Service。</strong>??
- [html]???
- <?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>????
- ????????<service????
- ????????????<pre?name="code"?class="html">????????????android:name=".AudioService"??
android:exported="true" android:process=":remote"> </service> </application> </manifest>
轉載于:https://www.cnblogs.com/whm1234/p/4650893.html
總結
- 上一篇: struct stat结构体的详解和用法
- 下一篇: 小子帽换婚嫁亏吗