Andr移動終端基礎(chǔ)開發(fā) 4_第1頁
Andr移動終端基礎(chǔ)開發(fā) 4_第2頁
Andr移動終端基礎(chǔ)開發(fā) 4_第3頁
Andr移動終端基礎(chǔ)開發(fā) 4_第4頁
Andr移動終端基礎(chǔ)開發(fā) 4_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

移動終端應(yīng)用開發(fā)校園易App音樂播放器實現(xiàn)ANDROID目錄Contents掌握Service相關(guān)知識實現(xiàn)校園易多媒體播放功能模塊小結(jié)教學(xué)目標(biāo)知識目標(biāo)掌握AndroidService的概念。理解Service的生命周期。理解Service的兩種啟動方式的區(qū)別。熟悉Android的MediaPlayer類。技能目標(biāo)能夠?qū)崿F(xiàn)AndroidService應(yīng)用。素質(zhì)目標(biāo)保持積極樂觀的心態(tài)

。培養(yǎng)個人文化素養(yǎng)

。掌握Service相關(guān)知識01PART認(rèn)識Service1.Service的啟動方式Service的啟動方式主要有兩種,分別是startService()方式和bindService()方式。(1)startService()方式啟動Service:被開啟的Service通過其他組件調(diào)用startService()方法被創(chuàng)建。這種Service可以無限地運行下去,只有調(diào)用stopSelf()方法或者其他組件調(diào)用stopService()方法后才能停止Service。當(dāng)Service被停止時,系統(tǒng)會將其銷毀。(2)bindService()方式啟動Service:被綁定的Service通過其他組件調(diào)用bindService()方法被創(chuàng)建??梢酝ㄟ^一個IBinder接口和Service進行通信,通過unbindService()方法關(guān)閉這種連接。一個Service可以同時和多個用戶綁定,當(dāng)多個用戶都解除綁定之后,系統(tǒng)會銷毀Service。認(rèn)識Service2.Service的生命周期Service的生命周期是從onCreate()方法被調(diào)用開始,到onDestroy()方法返回為止。認(rèn)識Service3.Service的功能(1)執(zhí)行需要長時間運行的操作。該操作不與用戶進行交互,如網(wǎng)絡(luò)下載、大文件I/O、復(fù)雜計算等。(2)應(yīng)用程序內(nèi)或應(yīng)用程序間數(shù)據(jù)通信。Android的每個應(yīng)用程序都在自己的虛擬機中運行,一個應(yīng)用程序是不允許訪問其他應(yīng)用程序的內(nèi)存信息的,為此Android引入了ContentProvider來在不同應(yīng)用程序間共享數(shù)據(jù)。BroadcastReceiver廣播信息給不同應(yīng)用程序,但ContentProvider更多地用于數(shù)據(jù)的共享,BroadcastReceiver廣播的信息會被所有應(yīng)用程序接收,較耗費系統(tǒng)資源,在兩個應(yīng)用程序間進行動態(tài)的交互時需要通過Service來完成。認(rèn)識Service4.Service的創(chuàng)建(1)創(chuàng)建一個類,繼承Service(或它的子類),重寫其回調(diào)方法onBind()。例如,創(chuàng)建MyService服務(wù)類的代碼如下。publicclassMyServiceextendsService{@OverridepublicIBinderonBind(Intentintent){returnnull;}}(2)根據(jù)需要重寫一些方法,通常情況下,會重寫onCreate()、onDestroy()和onStartCommand()方法。認(rèn)識Service5.Service的注冊創(chuàng)建好Service類后,需要在AndroidManifest.xml文件中注冊該Service。注冊Service非常重要,如果開發(fā)者不對Service進行注冊,則Service根本無法啟動。在AndroidManifest.xml文件中注冊Service的代碼如下。<serviceandroid:name=".MyService"/>屬性描述android:description向用戶描述Service的字符串a(chǎn)ndroid:directBootAware服務(wù)是否支持直接啟動,即其是否可以在用戶解鎖設(shè)備之前運行。其默認(rèn)值為falseandroid:enabled系統(tǒng)是否可實例化Service。其默認(rèn)值為true,表示可以。只有<application>和<service>中的該屬性都為true(因為它們都默認(rèn)使用該值)時,系統(tǒng)才能啟用服務(wù)android:exported其他應(yīng)用的組件是否能調(diào)用服務(wù)或與之交互。如果其值為false,則只有同一個應(yīng)用或者有相同userID的應(yīng)用的組件才可以開啟或綁定此Service。其默認(rèn)值取決于Service是否有Intent過濾器。如果Service沒有過濾器,則意味著只有指定了Service的準(zhǔn)確的類名才能調(diào)用,即該Service只能在應(yīng)用內(nèi)部使用——其他的應(yīng)用不知道該應(yīng)用的類名,這種情況下exported的默認(rèn)值為false;反之,只要有一個過濾器,就意味著Service考慮到了外界使用的情況,此時exported的默認(rèn)值為trueandroid:foregroundServiceType闡明服務(wù)是滿足特定用例要求的前臺服務(wù),可以將多個前臺服務(wù)類型分配給特定服務(wù)android:iconService的圖標(biāo)android:isolatedProcess如果設(shè)置為true,則該Service將運行在一個從系統(tǒng)中其他部分分離出來的特殊進程中,只能通過ServiceAPI來與其進行通信。其默認(rèn)值為falseandroid:label可向用戶顯示的服務(wù)名稱android:name實現(xiàn)服務(wù)的Service子類的名稱。此名稱應(yīng)為完全限定類名稱(如com.example.project.RoomService)。該屬性沒有默認(rèn)值,必須指定其值android:permission聲明此服務(wù)的權(quán)限,意味著只有提供了該權(quán)限的應(yīng)用才能控制或連接此服務(wù)android:process運行的進程名稱。正常情況下,應(yīng)用的所有組件都會在為應(yīng)用創(chuàng)建的默認(rèn)進程中運行。該名稱與應(yīng)用軟件包的名稱相同認(rèn)識Service6.啟動ServiceService不能自動運行,需要通過調(diào)用Context.startService()或Context.bindService()方法啟動。這兩個方法都可以啟動Service,但是它們的使用場合有所不同。(1)應(yīng)用組件(如Activity)可通過調(diào)用Context的startService()方法并傳遞Intent對象(指定服務(wù)并包含待使用服務(wù)的所有數(shù)據(jù))來啟動Service。(2)使用Context的bindService(Intentservice,ServiceConnectionconn,intflags)方法來啟動Service。①service:通過該Intent指定要啟動的Service。②conn:ServiceConnection對象,用戶監(jiān)聽訪問者與Service間的連接情況,若連接成功,則回調(diào)該對象的onServiceConnected(ComponentName,Binder)方法。③flags:指定綁定時是否自動創(chuàng)建Service,參數(shù)可以是0(不自動創(chuàng)建)或者BIND_AUTO_CREATE(自動創(chuàng)建)。當(dāng)Service所在的宿主由于異?;蛘咂渌蚪K止,Service與訪問者斷開連接時,會調(diào)用flags。認(rèn)識Service7.停止Service(1)對于非綁定服務(wù),必須自身調(diào)用stopSelf()方法,或者其他組件調(diào)用stopService()方法停止服務(wù)。如果不調(diào)用任何方法,則服務(wù)會一直處于運行狀態(tài)。(2)對于綁定服務(wù),要想解除與服務(wù)的綁定,只需調(diào)用unbindService()方法,此時onUnbind()和onDestory()方法將會被調(diào)用。啟動與停止Service【案例6-1】實現(xiàn)點擊“啟動服務(wù)”按鈕時啟動服務(wù),點擊“停止服務(wù)”按鈕時停止服務(wù)。啟動和停止服務(wù)界面效果Service的生命周期方法被調(diào)用情況實現(xiàn)校園易多媒體播放功能02PART了解MediaPlayerMediaPlayer類是媒體框架中重要的組成部分之一。此類的對象能夠獲取、解碼、播放音頻和視頻,且只需極少量設(shè)置。1.MediaPlayer類(1)MediaPlayer類的媒體來源MediaPlayer類支持多種不同的媒體來源,具體如下。①本地資源:res/raw目錄下的資源。②存儲設(shè)備資源:內(nèi)部的URI,如可以通過ContentResolver獲取的URI。③網(wǎng)絡(luò)URI:外部URI(流)。(2)MediaPlayer類的方法和事件MediaPlayer類提供了獲取/設(shè)置播放位置的方法,可以設(shè)置是否循環(huán)播放。當(dāng)播放停止后,必須再次準(zhǔn)備才能播放。將MediaPlayer類恢復(fù)到初始狀態(tài)時,才能再次設(shè)置數(shù)據(jù)源。釋放資源后,MediaPlayer類對象無法再使用。MediaPlayer類還可以設(shè)置監(jiān)聽播放完畢、緩沖區(qū)變化等事件的監(jiān)聽器。了解MediaPlayer方法描述create(Contextcontext,intresid)創(chuàng)建MediaPlayer對象,使用resid指定的資源作為要播放的音頻setDataSource(Stringpath)設(shè)置要播放的音頻文件位置,參數(shù)path為文件路徑或URIprepare()準(zhǔn)備資源start()開始/恢復(fù)播放stop()停止播放,調(diào)用后無法再播放pause()暫停播放,可以調(diào)用start()方法恢復(fù)播放reset()重置到剛剛創(chuàng)建時的狀態(tài)release()釋放相關(guān)的資源seekTo(intmsec)從指定位置播放,參數(shù)為以毫秒定義的播放位置getCurrentPosition()得到當(dāng)前播放位置,即播放的毫秒數(shù)getDuration()得到音頻長度,即總的毫秒數(shù)isPlaying()得知當(dāng)前音頻是否正在播放setLooping(booleanlooping)/booleanisLooping()循環(huán)播放setVolume(floatleftVolume,floatrightVolume)設(shè)置音量MediaPlayer主要方法了解MediaPlayer事件描述setOnPreparedListener(MediaPlayer.OnPreparedListenerlistener)音頻源準(zhǔn)備好后調(diào)用setOnCompletionListener(MediaPlayer.OnCompletionListenerlistener)音頻播放完畢后調(diào)用setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListenerlistener)網(wǎng)絡(luò)流緩沖的狀態(tài)變化時調(diào)用setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListenerlistener)Seek操作完成后調(diào)用setOnErrorListener(MediaPlayer.OnErrorListenerlistener)發(fā)生錯誤時調(diào)用MediaPlayer類支持的事件了解MediaPlayer(3)MediaPlayer類的使用①獲得MediaPlayer對象??梢灾苯邮褂胣ew或者調(diào)用create()方法創(chuàng)建MediaPlayer對象,方法如下。MediaPlayermp=newMediaPlayer();MediaPlayermp=MediaPlayer.create(this,R.raw.test);//無須再調(diào)用setDataSource()方法②設(shè)置播放文件。針對MediaPlayer不同的媒體來源,設(shè)置播放文件的不同方法如下。MediaPlayer.create(this,R.raw.test); //本地資源mp.setDataSource("/sdcard/test.mp3"); //存儲設(shè)備資源mp.setDataSource("/music/test.mp3"); //網(wǎng)絡(luò)URIMediaPlayer類的清單聲明在開始使用MediaPlayer類開發(fā)應(yīng)用之前,需要確保AndroidManifest.xml清單具有適當(dāng)?shù)穆暶?,這樣才能使用相關(guān)功能。①互聯(lián)網(wǎng)權(quán)限。如果使用MediaPlayer類流式播放基于網(wǎng)絡(luò)的內(nèi)容,則應(yīng)用必須申請此權(quán)限。<uses-permissionandroid:name="android.permission.INTERNET"/>②喚醒鎖定權(quán)限。如果播放器應(yīng)用需要防止屏幕變暗或處理器進入休眠狀態(tài),或者要使用MediaPlayer.setScreenOnWhilePlaying()或MediaPlayer.setWakeMode()方法,則應(yīng)用必須申請此權(quán)限。

<uses-permissionandroid:name="android.permission.WAKE_LOCK"/>MediaPlayer類的播放流程MediaPlayer類用于實現(xiàn)對一個音頻的播放控制,包括啟動、停止、暫停、位置控制等。乒乓球?qū)Υ蛴螒虮尘耙魳贰景咐?-2】為乒乓球?qū)Υ蛴螒蛱砑颖尘耙魳?。實現(xiàn)音樂播放器的進度控制音樂播放器的進度控制功能包括播放、暫停、停止、快進、快退,以及顯示當(dāng)前播放進度等。1.進度條與拖動條(1)進度條進度條(ProgressBar)是Android中的一個常用組件,通常用于觀察耗時任務(wù)的執(zhí)行情況。例如,對于下載文件、安裝軟件、加載圖片、打開網(wǎng)頁等,進度條可以動態(tài)地顯示它們執(zhí)行進度的百分比。方形進度條圓形進度條實現(xiàn)音樂播放器的進度控制屬性描述style設(shè)置進度條的風(fēng)格。"?android:attr/progressBarStyle"表示圓形進度條;"?android:attr/progressBarStyleSmall"表示縮小版圓形進度條;"?android:attr/progressBarStyleLarge"表示放大版圓形進度條;"?android:attr/progressBarStyleHorizontal"表示方形進度條android:max設(shè)置進度條的最大值android:progress設(shè)置進度條當(dāng)前的進度值android:progressDrawable設(shè)置自定義的進度條外觀圖樣android:secondaryProgress設(shè)置0~max的次要進度值。次要進度在主進度和背景之間。例如,用于網(wǎng)絡(luò)播放視頻時,次要進度表示緩沖進度,主進度表示播放進度ProgressBar在XML界面布局文件中的常用屬性實現(xiàn)音樂播放器的進度控制方法描述setProgress()設(shè)置進度條當(dāng)前的進度值setMax()設(shè)置進度條的最大值setSecondaryProgress()設(shè)置次要進度值setProgressDrawable()設(shè)置自定義的進度條外觀圖樣getProgress()獲取進度條當(dāng)前的進度值getMax()獲取進度條的最大值getSecondaryProgress()獲取次要進度值incrementProgressBy()指定當(dāng)前進度的增量ProgressBar在Java文件中的常用方法實現(xiàn)音樂播放器的進度控制(2)拖動條拖動條(SeekBar)是進度條的擴展,SeekBar繼承于ProgressBar,ProgressBar所支持的XML屬性和方法都適用于拖動條。進度條與拖動條的不同如下:進度條不能在界面上直接通過拖動來改變當(dāng)前進度值,只能在代碼中對進度值進行修改;拖動條不僅可以通過代碼改變進度值,還可以

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論