網站首頁 工作範例 辦公範例 個人範例 黨團範例 簡歷範例 學生範例 其他範例 專題範例

計算機應用技術專業畢業設計:Android手機播放器

欄目: 畢業設計 / 釋出於: / 人氣:2.53W

摘要

計算機應用技術專業畢業設計:Android手機播放器

android(中文名:安卓)是基於linux平臺開源手機作業系統名稱,該平臺由作業系統、中介軟體、使用者介面和應用軟體組成,號稱是首個為移動終端打造的真正開發和完整的移動軟體。目前在市場上可謂如日中天,越來越受到玩家的青昧。因此,對於軟體開發技術從業人員來說,android平臺具有無限的吸引力。

本文所實現的web地圖服務基於android平臺開發的,採用的網路地圖是google maps,該系統可以用來瀏覽城市的地圖,並能對其放大、縮小好移動,同時利用gps定位技術,實現了自我定位、位置查詢和路徑跟蹤等功能,滿足了手機使用者基本的地圖服務需求。

本文研究分析了android平臺的系統架構和元件模型,接著解析了android中的重要api和應用構成,以intent和生命週期的機制。在此基礎上,基於android平臺設計和開發為使用者提供一款的基於android平臺的手機音樂播放軟體。

關鍵詞:android;java;手機音樂播放器;intent;

目錄

1、緒論1

1.1課題背景1

1.2 android平臺與其他平臺的比較1

1.3本文主要工作2

1.4論文組織結構2

2、android的架構分析3

2.1 android的功能特徵3

2.2 android架構分析5

2.2.1應用程式框架5

2.2.2類庫6

2.2.3 android執行時元件7

2.3 android應用的構成和工作機制7

3、android應用程式結構剖析8

3.1 android的api8

3.2 android應用程式結構解析9

3.2.1活動9

3.2.2意圖接收器10

3.2.3服務11

3.2.4內容提供者11

3.3 intent的詳細解析11

3.3.1 intent的抽象描述11

3.3.2 android如何解析intent12

3.4 android活動的生命週期13

3.4.1活動的生命狀態14

3.4.2活動的運作流程15

4、手機播放器軟體設計實現17

4.1 系統設計需求17

4.1.1需求分析17

4.1.2下載開發資源17

4.1.3更新ec1ipse並下載adt(android開發外掛)18

4.1.4使用ec1ipse開發android應用19

4.2手機播放器軟體程式中各類元件20

4.2.1 package explorer中的元件20

4.2.2應用程式的資源21

4.2.3佈局檔案21

4.2.4 21

4.3手機播放器軟體設計實現22

4.3.1系統主介面的實現22

4.3.2手機播放器功能實現24

4.3.3常見的錯誤分析解決29

1、緒論

1.1課題背景

隨著行動通訊的發展以及網際網路向移動終端的普及,網路和使用者對移動終端的要求越來越高,而symbian,windows mobile,palm os等手機平臺過於封閉,不能很好的滿足使用者的需求,因此市場迫切需要一個開放性很強的平臺。

android是一套真正意義上的開放性移動裝置綜合平臺,它包括作業系統、中介軟體和一些關鍵的平臺應用。android是由linux+java 構成的開源軟體,允許所有廠商和個人在其基礎上進行開發。android 平臺的開放性等特點既能促進技術(包括平臺自身)的創新,又有助於降低開發成本,還可以使運營商能非常方便地制定自己的特色化的產品。因此,它具有很大的市場發展潛力。

經過多年的發展,第三代數字通訊( 3g)技術獲得了廣泛的接受,它為移動終端使用者帶來了更快的資料傳輸速率。隨著3g網路的使用,移動終端不再僅是通訊網路的終端,還將成為網際網路的終端。因此,移動終端的應用軟體和需要的服務將會有很大的發展空間。 google與包括中國移動、摩托羅拉在內的三十多家技術和無線應用的領軍企業組成的開發聯盟為此於XX年11月推出了一個專為移動裝置設計的軟體平臺———android。

android最大特點在於它是一個開放的體系架構,具有非常好的開發和除錯環境,而且還支援各種可擴充套件的使用者體驗, android裡面具有非常豐富的圖形系統, 對多媒體的支援功能和非常強大的瀏覽器。

本課題的目的在於掌握java手機應用開發技術和移動軟體平臺開發技術。在以java語言為基礎,結合android移動開發平臺,並利用android提供的sdk,完成在android平臺上執行的手機音樂播放器軟體,形成一款具有一定功能的手機應用軟體。

本課題的意義在於通過開發一款手機音樂播放器手機應用軟體,可以熟練應用android平臺提供的應用程式介面,掌握android平臺上的各種應用。

1.2 android平臺與其他平臺的比較

首先看一下symbian,它存在著以下的致命不足:symbian的主導者為諾基亞、索尼愛立信等傳統的手機廠商,因此雖然symbian非常成熟,但它基本上還帶有濃厚的保守色彩,應用軟體與我們日常的pc軟體有較大的理念差異。再者symbian與網際網路的結合給人感覺仍不夠緊密,網際網路應用更多隻是作為陪襯存在。android平臺與此相反,移動網際網路是它最重要的應用,無論系統核心、應用軟體還是硬體設計,幾乎都是圍繞著快捷的移動網際網路應用所展開,同時android與pc平臺存在先天的基因聯絡,可以很好的實現與pc裝置的資訊互享,更容易獲得使用者的廣泛認可。與android擁有相同屬性的還有微軟的windows mobile。

至於iphone,它只是蘋果公司的封閉平臺,使用者無法在iphone中自行安裝應用,所有的東西都應該蘋果自行設計製造,從而確保利潤不被第三方分享。蘋果自己為iphone開發了嵌入系統以及完整的應用,但它乾脆都不宣揚iphone的軟體設計,而是將iphone作為一個包含軟硬體賣點的手機產品出售。同樣,蘋果式的奢華與時尚讓iphone大獲成功,以至於成為手機市場的風向標。與蘋果相反,android則是走完全開放的道路,這種模式的巨大優點在pc軟體領域已為業界所公認:自由軟體高度活躍,錯誤可以被快速修正,新的應用、新的創意可以不斷出現。android平臺的另外一個優勢是標準化和跨平臺。

android和作業系統進行了緊密的整合,從而可以方便地使用作業系統的功能。這與難於使用作業系統功能的j2me相比,無疑對開發者有很大的吸引力。並且從圖形應用介面的開發上面來看,android可以使用配置檔案來描述圖形控制元件的佈局,用java程式碼編寫實際響應程式碼,這樣方便得多。當然由於android己經提供了大量現成的應用api和應用工具,使得常規智慧手機功能的開發變得非常容易和簡單。

1.3本文主要工作

android是基於linux+java的手機作業系統平臺,xmpp是基於xml的開源的即時通訊協議,本文從實際應用出來,提出了開發基於android平臺的手機音樂播放器軟體。本文的主要工作包括:

在eclipse開發環境下,運用java語言和android 的sdk 開發一款可以實現查詢手機音樂播放器功能的軟體。本軟體除了即時文字資訊的傳輸顯示外,還可以進行圖片的顯示,並對軟體客戶端的功能進行了美化擴充套件,增加了背景和瀏覽的功能。並且該系統在android模擬器上執行,取得了很好的執行效果。

1.4論文組織結構

本文首先分析了系統的研究背景,介紹了android的發展現狀以及本文的主要內容。並對android與其它手機作業系統進行了比較,說明了android的優勢。

第二章,介紹了android的特徵、android的架構,執行元件以及android應用的構成和工作機制。

第三章,提出了在android平臺上開發基於java的手機音樂播放器軟體,提出了系統的架構、系統伺服器端和客戶端的解決方案,對系統採用的intent進行解析,並且介紹了android的生命週期。

第四章,對如何實現手機音樂播放器軟體功能進行了詳細的分析,對軟體設計從客戶端介面,程式碼段的實現,xml解析模組,手機音樂播放器介面跳轉和客戶端擴充套件功能幾個方面進行了詳細的學士學位論文實現,最後對系統的流程進行了描述。

第五章,總結了本文的主要研究內容和研究成果,分析了存在的問題,並對今後的發展方向進行了展望。

2、android的架構分析

android是一個包含作業系統、中介架構層及應用程式所產生出來的軟體堆疊架構。由下而上,其核心為嵌入式linux2.6作業系統,向上搭配google為android開發的類庫及android執行時,再配合應用程式架構,來開發各種不同的應用程式。

2.1android的功能特徵

(l)應用程式架構:在應用程式架構內已經具備多種不同的基礎元件,在開發應用程式時,就可以直接呼叫這些元件來使用,可以節省開發應用程式的心力及時間。

(2)dalvik虛擬機器器:在android平臺上所使用java虛擬機器,不是sim公司的標準java虛擬機器,而是使用google自主開發的代號為dalvik的虛擬機器,它在保證api方面的相容的同時,針對移動手機進行了大幅優化,佔用資源更小,執行效率更高。

(3)整合的瀏覽器:整合的瀏覽器是android內建的瀏覽器,是以webkit的瀏覽引擎為基礎所開發成的。wedkit是一個開源瀏覽器網頁排版引擎,目前使用webkit引擎的瀏覽器主要有:safari,midori,epiphany等。配合android手機的功能,可以在瀏覽網頁時,達到更好的效果,例如:區域性性的縮放網頁上的資訊、觸控式的操作等效果。

(4)優化的繪圖能力:在程式裡可以用到的繪圖功能分為2d與3d兩個方面。在2d方面,android提供了一套特有的類庫(sgl;而在3d方面則是使用opengles1.0(opengl for embedded systems)規範的類庫。它們是一種非常快的圖形引擎,並且支援硬體加速。

(5)sqlite資料庫:sqlite提供結構化的資料存取。sqlite是一款輕型的資料庫,它的設計目標是嵌入式的,目前已經在很多嵌入式產品中使用了它,它佔用的資源非常低。它能夠支援windows/linux/u nix等主流的作業系統,同時能夠跟很多程式語言相結合,比如php,java等,還有odbc介面,同樣比起mysql,postgresql來講,它的處理速度比它們都快。它無需安裝和管理配置,它是一個儲存在單一磁碟檔案中的完整資料庫,體積小隻有250kb但支援資料庫大小至2tb。它雖然很小巧,但是支援的sql語句毫不遜色於其它開源資料庫。同時它還支援事務功能和併發處理等等。sqlite也是一套開放性的關聯式資料庫,其特點在於輕量性方面的設計結構,更適合在手機上使用。

(6)多媒體的支援能力:主要用於播放媒體檔案。這同時包括對音訊(如播放mp3或其他音樂檔案等)和視訊(如播放從網上下載的視訊)的支援,並支援“播放uri地址”(note:uri即是統一資源識別地址)模式—在網路上直接播放的流媒體。另外支援各種通用的靜態影象格式,例如:jpg、png、gif等格式。

(7)gsm技術:global system for mobile communications,即全球移動通訊系統,俗稱”全球通”,是一種起源於歐洲的移動通訊技術標準,是第二代移動通訊技術,其開發目的是讓全球各地可以共同使用一個行動電話網路標準,讓使用者使用一部手機就能行遍全球。gsm技術是屬於手機硬體方面的展現,也是在開發android應用程式時可以突出的特點之一。

(8)藍芽、edge、3g及wi-fi:藍芽是一種新型、開放、低成本、短距離的無線連線技術,可取代短距離的電纜,實現話音和資料的無線傳輸。edge(enhanced data rate for gsm,evolution),即增強型資料速率gsm演進技術。edge是一種從gsm到3g的過渡技術,它主要是在gsm系統中採用了一種新的調製方法,即最先進的多時隙操作和spsk調製技術。由於8psk可將現有gsm網路採用的gmsk調製技術的訊號空間從2擴充套件到8,從而使每個符號所包含的資訊是原來的4倍。wi-fi(wirelessfidelity),即無線保真技術,與藍芽技術一樣,同屬於在辦公室和家庭中使用的短距離無線技術。該技術使用的是2.4ghz附近的頻段,該頻段目前尚屬沒用許可的無線頻段。其目前可使用的標準有兩個,分別是和ieee802.11b。這些通訊能力也是屬於手機硬體方面的展現,也是在開發android應用程式時可以突出的特點之一。

(9)gps: global positioning system,即全球定位系統,它是一個由覆蓋全球的24顆衛星組成的衛星系統。這個系統可以保證在任意時刻和任何地點都可以同時觀測到4顆衛星,以保證衛星可以採集到該觀測點的經緯度和高度,以便實現導航、定位、授時等功能。這項技術可以用來引導飛機、船舶、車輛以及個人。這個同樣也是屬於手機硬體方面的體現,也是在開發android應用程式是可以突出的特點之一。

2.2 android架構分析

圖中顯示的是android架構的五個主要部分。

2.2.1應用程式框架

在android sdk中,定義了讓開發者使用與核心應用程式相同api的許可權應用程式框架是為了要簡化元件的重新利用而設計的,應用程式可以釋出功能為其它應用程式所使用。但是,這要受限於應用程式架構的安全機制,使用者以用同樣的機制來新增、置換元件。目前所有的應用程式是由服務及系統來組成,包含有:

(l)一套強大和可擴充套件的檢視系統:用來建構一個應用程式的基本元件,包了在開發系統畫面時,常用的列表、網格、文字框、按鈕等控制項,甚至是內嵌的web瀏覽器。

圖2-1 android架構的五個部分

(2)內容提供者:使應用程式可以訪問另一個應用程式的資料(如聯絡人數庫),或者共享它們自己的資料。

(3)資源管理器:提供各種非程式程式碼的資源讓應用程式去使用。例如:本字串、圖形檔案或排版相關的佈局檔案。

(4)通知管理器:提供應用程式在狀態列中顯示應用程式自定義的提示資訊。

(5)活動管理器:管理所有應用程式的生命週期及提供常用的導航回退功能。例如:啟動應用程式要用到的資源準備及關閉應用程式時釋放記憶體及相關資源等工作。

(6)視窗管理器:用來管理所有啟動程式的視窗。

(7)位置管理器:用來管理地圖服務的相關功能。

(8)電話管理器:用來管理使用者撥打與接聽電話的相關功能。

(9)包管理器:管理所有安裝在android系統內的包。

2.2.2類庫

在android中包含一些c/c++的類庫,這些類庫能被android系統中不同的元件來使用。開發者可以通過應用程式框架使用這些功能。部分核心類庫列表如下:

(1)surface manager:主要的功能是讓開發者可以去存取/顯示系統及管理的功能,在[顯示]與[存取操作]間的對應、互動以及實現無接縫的2d/3d多應用程式之間的整合。例如:在2d、2d顯示上的合成、疊合動作。

(2)3dlibraries:主要是依opengles1.0規範所定義的3d繪圖引擎。該庫使用硬體加速(當硬體可用時),可以將硬體的3d功能做最佳化的處理顯示。

(3)sgl:主要是處理有關顯示2d方面的繪圖引擎。

(4)media frame work:主要是以packetvideo公司的opencore為基礎所發展的多媒體類庫,該庫支援回放和錄製大量流行的音視訊格式和靜態圖片。例如:mpeg4、h.264、mp3、aac、amr、jpg、png、gif等格式

(5)free type:主要是用來顯示點陣圖和處理向量字形的。

(6)ssl:(securesocketsuyer),中文名為“安全套接層協議層”,它是網景公司提出的基於web應用的安全協議,當前版本為3.0。ssl協議指定了一種在應用程式協議(如http、telenet、nmtp和ftp等)和tcp/ip協議之間提供資料安全性分層的機制,它為tcp/ip連線提供資料加密、伺服器認證、訊息完整性以及可選的客戶機認證。它已被廣泛地用於web瀏覽器與伺服器之間的身份認證和加密資料傳輸。ssl協議位於tcp膽協議與各種應用層協議之間,為資料通訊提供安全支援。ssl協議可分為兩層:ssl記錄協議(ssl record proto col):它建立在可靠的傳輸協議(如tcp)之上,為高層協議提供資料封裝、壓縮、加密等基本功能的支援。ssl握手協議(ssl hand shake proto col):它建立在ssl記錄協議之上,用於在實際的資料傳輸開始前,通訊雙方進行身份認證、協商加密演算法、交換加密金鑰等。ssl協議提供的服務主要有:①認證使用者和伺服器,確保資料傳送到正確的客戶機和伺服器;②加密資料以防止資料中途被竊取;③維護資料的完整性,確保資料在傳輸過程中不被改變。

(7)sqlite:sqlite是一套開放性的關聯式資料庫,能夠被所有應用程式使用的輕量級的關係資料庫引擎。

(8)web kit:是一個先進的網頁瀏覽器引擎,被用來構建android瀏覽器和內嵌的web檢視,也可以讓開發者利用這個引擎來做不同的應用。

(9)lib c:就是一個bsd標準c類庫。但是,針對linux嵌入式裝置進行過最佳化的調整。

2.2.3 android執行時元件

雖然android是用java語言來開發、撰寫應用程式,但卻不使用java執行時元件來執行java程式,而是使用了由google自行研發的android執行時元件來執行程式。android執行時元件包括兩個重要的部分,一個是核心類庫,另一個是dalvik虛擬機器。

2.3android應用的構成和工作機制

對於一個android應用程式來說,是由activity、intentreceiver、service、content provider四部分組成,但並不是每一個android應用程式都必須由這四部分組成。在應用程式中使用時,需要在配置檔案中進行配置。這個配置檔案是每個android應用程式所必需的,用於定義應用程式的元件、元件的功能以及必要條件等。android應用的構成和工作流程如圖2-2:

圖2-2 android的構成和工作流程

3、android應用程式結構剖析

3.1 android的api

android api主要包含了以下幾個部分:

(1)

是系統的控制檔案,它告訴系統如何處理所建立的所有應用元件(尤其是活動(activity),服務(service),意圖接收器(intent receiver)和內容提供者(content provider))。舉例來說,控制檔案就是把活動和要接收的意圖(intents)連線在一起的“膠水”。

(2)活動

活動就是一個有生命週期的物件。一個活動就是完成某些工作的程式碼塊,這部分工作還可能包括對使用者ui介面的顯示。不過這不是必須的,有些活動從不顯示ui介面。

(3)檢視

檢視可以將其自身繪製到螢幕上。android的使用者介面由一系列的檢視樹構成。介面都是由一組以樹的形式出現的檢視組成的。開發者可以通過建立一個新的檢視的方法來使用自定義的圖形處理技術(比如開發遊戲,或者是使用了不常用的使用者圖形視窗介面)。

(4)意圖

意圖是一個簡單的訊息物件,它表示程式想做某事的“意圖”。比如應用程式想要顯示一個網頁,那麼它可以通過建立一個intent例項並將其傳遞給系統來表示意圖瀏覽這個uri。系統將定位到能處理這一intent的程式碼(在當前情況下就是瀏覽器),並執行之。意圖也可以用於廣播系統範圍內的有效事件(例如通知事件)。

(5)服務

服務是執行在後臺的一段程式碼。它可以執行在它自己的程序,也可以執行在其他應用程式的程序裡,這取決於自身的需要.。其它的元件可以繫結到一個服務上來,通過遠端過程呼叫(rpc)來呼叫這個方法。例如媒體播放器的服務,當用戶退出媒體選擇的介面時,仍然希望音樂依然可以繼續播放,這時就可用服務來保證當用戶介面關閉時音樂還繼續播放著。

(6)通知

通知將以小圖示的形式呈現在狀態列裡,使用者通過與圖示的互動來接收訊息。最常見的通知包括簡訊息、通話記錄和語音郵件,但是應用程式也可以建立它們自己的通知事件。

(7)內容提供者

內容提供者是用來提供對裝置上資料進行訪問。典型的例子就是使用內容提供者來訪問聯絡人列表。應用程式也可以使用其它程式通過內容提供者提供的資料,同時也可以定義自己的內容提供者來向其它應用提供資料訪問服務。

3.2android應用程式結構解析

通常由以下四個元件來構建一個完整的android應用程式。

①活動

②意圖接收器

③服務

④內容提供者

然而,並不是所有的android應用程式都必須具備上面的四個元件,可以由上面的一個或幾個來組建。當決定使用以上哪些元件來構建android應用程式時,需要將它們註冊在檔案中,這是一個xml配置檔案,在這個檔案中可以宣告應用程式元件以及它們的特性和要求。這個配置檔案是每個android應用程式所必需的。

3.2.1活動

活動是以上四個元件中最常用的一個。每個活動都是activity的子類,並實現了一些獨有的功能,如管理ui顯示和ui的反饋事件。一個活動就相當於應用程式的一個使用者介面,由事件響應以及檢視等組成。大多數的應用程式通常包括多個介面。例如:一個文字聊天應用程式,至少應該包含一個聯絡人列表介面、一個聊天介面、一個設定介面、一個聊天記錄查詢介面等等。每個介面其實都可看作是一個活動。顯示一個新介面就相當於生成一個對應的活動物件。在一些情況下,活動能夠返回給它的上級介面一個返回值,例如一個提供給使用者選擇照片的活動可以返回給它的呼叫者使用者選擇了哪個照片檔案。

當一個新的活動出現時,前一個活動被中斷並被放入到一個歷史堆疊中。使用者可以使用返回鍵使前一個活動重現。當一個活動不再需要時,可以將它們從歷史堆疊中移除。預設情況下,android會為每個應用程式保留從主介面開始的歷史堆疊。

android通過一個被稱作意圖的特殊類,來實現介面與介面之間的跳轉。一個意圖描述了一個應用程式想要做什麼。在意圖的描述結構中,含有兩個重要的資料結構:動作和動作對應的資料。典型的動作型別包括main、view、pick、edit等等,而動作對應的資料則以uri的形式表示。例如:顯示一個聯絡人資訊的介面,可以建立一個意圖,並將它的動作設定成view,資料設定成表示這個人資訊的uri。

除此之外,還有一個被稱作意圖過濾器(intentfiher)的相關類。當發生一個有效的目的請求時,意圖過濾器用來描述一個活動能夠處理什麼意圖。如上例中所描述,想要正常顯示一個聯絡人資訊的介面,必須宣告一個意圖過濾器,它說明當有聯絡人資料要被在介面上顯示時,知道如何處理它們。通常意圖過濾器要被註冊在檔案中。從一個介面跳轉到另一個介面是由解析各種意圖實現的。例如:一個活動使用startactivity(myintent)來呼叫其他活動時,系統會查詢所有已經安裝的應用程式的意圖過濾器,並從中挑選出能夠匹配myintent意圖的活動。隨後,這個新的活動接收到意圖(myintent)的通知並開始執行。當startactivity方法被呼叫,解析意圖的處理過程隨之發生,這個機制有以下兩個突出的優點:

活動可以通過一個以意圖形式產生的請求來重用其他元件的功能。

活動可以在任何時候被一個具有等價意圖過濾器的新活動所替代。

3.2.2意圖接收器

當想要編寫程式碼來對外部事件做一些處理時,可以使用意圖接收器。意圖接收器並不顯示ui介面,它是通過notificationmanager來通知使用者他們感興趣的事件發生了。意圖接收器同樣可以被註冊在檔案中,同時也可以在程式碼中使用sterreceiver()來註冊自己的意圖接收器。當一個意圖接收器被觸發時,系統會根據需要來啟動應用程式。

3.2.3服務

服務是具有長生命週期並且沒有使用者介面的程式碼。

3.2.4內容提供者

在android中,每個應用程式都是有自己的userid及在自己的程序中執行。這樣做的好處是,可以保護系統及應用程式,避免被其他不正常的應用程式所影響。可以把每個程序想像成是一個黑盒子,彼此不會互相影響,連記憶體的資料都無法共享。如果應用程式之間想要共享資料,就需要使用用內容提供者。一個內容提供者就是一個類,它實現了一個標準的方法集合。其他的應用程式可以使用這些方法來儲存和檢索此內容提供者處理過的資料。

3.3 intent的詳細解析

在一個android應用中,主要是由四種元件組成的,這四種元件可參考上一節的內容。而這四種元件是獨立的,它們之間可以互相呼叫,協調工作,最終組成一個真正的android應用。在這些元件之間的通訊中,主要是由意圖協助完成的。意圖負責對應用中一次操作的動作、動作對應的資料、附加資料進行描述,android則根據此意圖的描述,負責找到相應的元件,將意圖傳遞給它,並完成元件的呼叫。因此,意圖在這裡起著一個媒體中介的作用,專門提供元件之間互相呼叫的相關資訊,實現呼叫者與被呼叫者之間的解耦。

例如,在一個聯絡人維護的應用中,當在一個聯絡人列表螢幕(假設對應的activity為listactivity)上,點選某個聯絡人後,希望能夠調出此聯絡人的詳細資訊,為了實現這個目的,listactivity需要構造一個intent,這個intent用於告訴系統,要做“檢視”動作,此動作對應的檢視物件是“某聯絡人”,然後呼叫startactivity(intent intent),將構造的intent傳入,系統會根據此intent中的描述,到中找到滿足此intent要求的activity。系統會呼叫找到的activity,即為detailactivity,最終傳入intent,detailactivitv則會根據此intent中的描述,執行相應的操作。

3.3.1intent的抽象描述

在android參考文件中,對意圖的定義是執行某操作的一個抽象描述。該抽象描述的具體內容如下:

首先,它是要執行的動作的一個簡要描述,如檢視、修改等,android定義了一套標準動作。此外,還可以根據應用的需要,定義自己的動作,並可定義相應的活動來處理自定義的動作。

其次,是執行動作要操作的資料,android採用指向資料的一個uri方式來實現。

另外,除了動作和資料這兩個重要屬性外,還有一些附加屬性:

類別:被執行動作的附加資訊。例如launcher_category表示意圖的接受者應該在launcher中作為頂級應用出現;而alternativecategory表示當前的意圖是一系列的可選動作中的一個,這些動作可以在同一個資料上執行。

資料型別:顯式指定意圖的資料型別。一般意圖的資料型別能夠根據資料本身進行判定,但是通過設定這個屬性,可以強制採用指定的型別。

元件:指定意圖的目標元件的類名稱。通常android會根據意圖中包含的其它屬性的資訊,比如動作、資料/資料型別、類別進行查詢,最終找到一個與之匹配的目標元件。但是,如果元件這個屬性有指定的話,將直接使用它指定的元件,而不再執行上述查詢過程。指定了這個屬性以後,意圖的其它所有屬性都是可選的。

附加資訊:是其它所有附加資訊的集合。使用附加資訊可以為元件提供擴充套件資訊,比如,如果要執行“傳送電子郵件”這個動作,可以將電子郵件的標題、正文等儲存在附加資訊裡,傳給電子郵件傳送元件。總之,動作、資料/資料型別、類別和附加資訊一起形成了一種語言。這種語言使系統能夠理解諸如“檢視某聯絡人的詳細資訊”之類的短語。隨著應用不斷的加入到系統中,它們可以新增新的動作、資料/資料型別和類別來擴充套件這種語言。應用也可以提供自己的活動來處理已經存在的這樣的“短語”,從而改變這些“短語”的行為。

3.3.2android如何解析intent

在應用中,可以以兩種形式來使用intent:

(l)直接意圖:指定了元件屬性的意圖。通過指定具體的元件類,通知應用啟動對應的元件。

(2)間接意圖:沒有指定元件屬性的意圖。這些意圖需要包含足夠的資訊,這樣系統才能根據這些資訊,在所有的可用元件中,確定滿足此意圖的元件。對於直接意圖,android不需要去做解析,因為目標元件已經很明確,android需要解析的是那些間接意圖,通過解析,將意圖對映給可以處理此意圖的活動、意圖接收器或服務。

意圖解析機制主要是通過查詢己註冊在中的所有意圖過濾器及其中定義的意圖,最終找到匹配的意圖。在這個解析過程中,android是通過意圖的動作、資料型別、類別這三個屬性來進行判斷的,判斷方法如下:

如果意圖指明定了動作,則目標元件的意圖過濾器的動作列表中就必須包含有這個動作,否則不能匹配。

如果意圖沒有提供資料型別,系統將從資料中得到資料型別。和動作一樣,目標元件的資料型別列表中必須包含意圖的資料型別,否則不能匹配。

如果意圖中的資料不是content:型別的uri,而且意圖也沒有明確指定它的資料型別,將根據意圖中資料的格式(比如http:或者mailto:)進行匹配。同上,意圖的格式必須出現在目標元件的格式列表中。

如果意圖指定了一個或多個類別,這些類別必須全部出現在組建的類別列表中。比如意圖中包含了兩個類別:launcher_category和alternativec_category,解析得到的目標元件必須至少包含這兩個類別。

3.4android活動的生命週期

android平臺是個手機作業系統。撇掉其他功能不談,手機的特性,就是應該能隨時在未完成目前動作的時候,暫停正在使用的功能,切換到接電話、接收簡訊模式,而且在接完電話回到應用程式時,還希望能看到一樣的內容。現在使用者使用智慧手機,大多已習慣使用多工的作業系統(如windowsmobile),可以在用手機聽音樂的同時,執行其他多個程式。同時執行多個程式有它的明顯好處,但也有它的缺點。每多執行一個應用程式,就會多耗費一些系統記憶體,而手機裡的記憶體是相當有限的。當同時執行的程式過多,或是關閉的程式沒有正確釋放掉記憶體,系統執行時就會覺得越來越慢,甚至不穩定。為了解決這個問題,android引入了一個新的機制—生命週期。

android應用程式的生命週期是由android框架進行管理,而不是由應用程式直接控制。通常,每一個應用程式(入口一般會是一個活動的oncreate方法),都會佔據一個程序。當系統記憶體即將不足的時候,會依照優先順序自動進行程序的回收。不管是使用者或開發者,都無法確定應用程式何時會被回收。關於程序的生命週期將在下一節中介紹,本節主要介紹活動的生命週期。

一個活動類別除了oncreate方法之外,還預先定義了onpause(暫停)、onresume(繼續)等的基本方法,當從一個活動切換到另一個活動的時候,原來的活動將經過一連串的狀態改變。開發者可以在程式中新增一些各狀態相對應的流程,每次活動狀態改變時,就會執行相對應的流程。要讓使用者有好的使用體驗,活動需要在各個週期中負責保管狀態、恢復狀態、傳送資料等工作。

3.4.1活動的生命狀態

android的虛擬機器是使用堆疊管理。主要有四種狀態:

(l)活動狀態

活動狀態是指使用者啟動應用程式或活動後,活動執行中的狀態。在android平臺上,同一個時刻只會有一個活動處於活動或執行狀態。其他的活動都處於未啟動、停止或是暫停的狀態。

(2)暫停狀態

暫停狀態是指當活動暫時暗下來,退到背景畫面的狀態。當警告對話方塊或電話來了時,都會讓原來執行的活動退到背景畫面。新出現的警告對話方塊等介面元件蓋住了原來的活動畫面。活動處在暫停狀態時,使用者無法與原活動互動。

(3)停止狀態

停止狀態是指有其他活動正在執行,而這個活動己經離開螢幕,不再動作的狀態。通過按返回鍵,可以調出所有處於停止狀態的應用程式列表。處於停止狀態的活動,還可以通過通知來喚醒。

(4)已回收或未啟動狀態

已回收或未啟動狀態是指活動尚未被啟動、已經被手動終止或己經被系統回收的狀態。要手動終止活動,可以在程式中呼叫finish方法。如果是被系統回收,可能是因為記憶體不足了,所以系統根據記憶體不足時的回收規則,將處於停止狀態的活動所佔用的記憶體回收。

圖3-1 android活動生命週期

圖3-1所示的七個狀態又可以歸納成三組:

(l)資源分配(建立/銷燬)

完整的活動生命週期由建立狀態開始,由銷燬狀態結束。建立時分配資源,銷燬時釋放資源。

(2)可見與不可見(啟動/重新啟動/停止)

當活動執行到啟動狀態時,就可以在螢幕上看到這個活動。相反地,當活動執行到停止狀態時,這個活動就會從螢幕上消失。當用戶按下返回鍵回到上一個活動時,會先到重新啟動狀態,再到一般的啟動狀態。

(3)使用者取得螢幕的控制權(繼續/暫停)

當有個警告對話方塊、簡訊、電話等資訊進入時,原來的活動會進入暫停狀態,暫時放棄螢幕的控制權,被中斷到背景去,將前景交給優先順序高的事件。當這些優先順序高的事件處理完後,活動就改進入繼續狀態,此時又取得螢幕的控制權。

3.4.2活動的運作流程

由實際執行來看,我們可以歸納出所有android應用程式都遵循的運作流程:

(l)一般啟動

啟動一個活動的基本流程為oncreate一>onstart一>onresume。該流程首先分配資源給這個活動(建立狀態),然後將活動的內容顯示到螢幕上(啟動狀態);在一切就緒後,取得螢幕的控制權(恢復狀態),使用者可以開始使用這個程式。

(2)呼叫另一個活動

呼叫另一個活動的基本流程為onpause(l)一>oncreate(2)一>onstart(2)一>0nresume(2)一>onstop(l)。該流程首先凍結原來的活動,再交出螢幕控制權;直到活動2完成一般啟動流程後,活動1才會被停止。

(3)回到原來活動

回到原來活動的基本流程為onpause(2)一>onrestart(1)一>onstart(l)一>onresume(1)一>onstop(2)一>ondestroy(2)。另外按返回鍵也可以回到原來的活動。

(4)退出結束

退出結束的基本流程為onpause一>onstop一>ondestroy。如果程式中有直接呼叫finish方法來關閉活動的話,系統會跳過先凍結的階段,直接暫停,停止,然後銷燬。

(5)回收後再啟動

回收後再啟動的基本流程為oncreate一>onstart一>onresume。如果被回收掉的活動一旦又重新被呼叫時,會像一般啟動一樣再次呼叫活動的oncreate方法。

當在模擬器上已經執行過多個應用程式,只要按下返回鍵,就會開啟最近一次開啟過的活動。這時要是按下多次返回鍵,理論上遲早會返回到某個已經銷燬的活動。

如果應該開啟的活動己經被回收了,那麼這個活動會再次被建立。再次被建立的活動,跟原來開啟過的活動是不一樣的。

所以如果要讓再次被建立的活動跟原來開啟過的一樣,那麼在活動之間切換時,就要儲存資料:即在每次活動執行到暫停或停止狀態時先儲存資料,然後在建立時將資料讀出來。

4、手機播放器軟體設計實現

4.1 系統設計需求

4.1.1需求分析

設計需要結合使用幾種技術。

eclipse平臺:

eclipse 是一個執行外掛的平臺。可以下載安裝 eclipse classic 的最新版本。

android developer tools:

按照安裝說明安裝 android developer tools(eclipse 外掛)。

原始碼:

本設計中的原始碼片段包括:

(片段)— 這個檔案是 android 應用程式的應用程式部署描述符。

intentreceiver — 演示 intentreceiver 的實現,這個類處理 檔案中 intentfilter 標記所公佈的 intent。

— 這個檔案包含 android 活動所用的視覺元素或資源。

— 這個檔案是由 android developer tools 自動生成的,它把視覺資源 “連線” 到 java 原始碼。

(完整)— 這是完整的 檔案,包含每個重要元素的描述。

4.1.2下載開發資源

(l)首先開啟網址http://來下載最新的androidsdk。國內基本是用windows系統,所以就選擇windows版本的sdk。下載後直接解壓縮就可以使用,為了在控制檯中直接使用sdk中的工具,把sdk目錄新增到windows的path環境變數中。

圖4-1

(2)接著開啟網址來下jdk6。安裝完後,設定jdk環境變數java_home,classpath,path)。

(3)最後是開啟網址http://來下載eclipse3.2或3.3版本(開發android的ide)。

4.1.3更新ec1ipse並下載adt(android開發外掛)

(1)啟動eclipse,選擇help>software updates>find and install。

(2)彈出對話方塊後,選擇search for new features to install,然後點選next。

(3)點選new remote site。

(4)在編輯框中輸入更新外掛的地址:,點選ok。

(5)看到一個更新的列表,點選finish。

(6)在返回的對話方塊中選擇android plugin>eclipse integration>android development tools並且點選next。

(7)選擇accept terms of the license agreement,點選next。

(8)點選finish。

(9)選擇install all。

(10)重新啟動eclipse。

(11)重啟後設置android屬性中的android sdk目錄(不包括sdk下的tools):

①選擇window>preferences…開啟編輯屬性視窗。

②選擇android屬性面板。

③點選browse…,選擇加入android sdk的目錄。

④選擇apply,最後點選ok。

4.1.4使用ec1ipse開發android應用

使用eclipse ide開發一個android應用。首先是建立一個android工程,然後設定應用啟動配置。然後可以編輯程式碼,啟動,除錯應用。

(l)建立一個android工程。adt外掛提供了一個新的工程嚮導幫助快速的建立android工程和編輯現存的android專案的程式碼。

按照下面的步驟建立android工程:

①選擇file>new>project。

②選擇android>android project,點選next。

③設定工程的用途:

選擇create new project in workspace可以建立一個新的android工程,輸入工程的名字,程式碼的開發包的名字,應用介面的類名字,應用程式的標題的名字。選擇create project from existing source可以根據現存的程式碼建立一個工程.通過這個選項可以建立並執行現存的google提供的example application(在androidsdk的目錄中可以找到)。

④點選finish。

adt外掛將會為工程建立src/程式碼檔案存放的目錄、res/資原始檔目錄和應用工程的主配置檔案。

(2)建立android虛擬機器

點選windows>android sdk and avd manager,選中virtual devices,選擇new按鈕,填寫需要建立的name,並且選擇target,從android1.5-2.2版本。填寫虛擬機器的sd卡記憶體(如設定size為256mb),然後點選create avd。就完成對應版本的android虛擬機器建立。

圖4-2

(3)除錯應用程式。

一旦建立了工程啟動配置就可以按照如下的步驟除錯程式:從eclipse的主選單中選擇run>run或run>debug或者點選工程檔案右鍵選擇run as>android application。如果需要還可以重新配置啟動引數,比如選擇其他的程式介面作為啟動的主介面。

4.2手機播放器軟體程式中各類元件

4.2.1package explorer中的元件

src 資料夾

包含示例應用程式的包.

android developer tools 自動建立這個檔案,它提供訪問 android 應用程式的各種資源所需的常量。

res 資料夾

包含應用程式的資源,包括:圖示,佈局檔案,字串。

4.2.2應用程式的資源

正如前面提到的,android 中的資源放在專案的 res 子目錄中。資源分為三類:ables:這個資料夾包含圖形檔案,比如圖示和點陣圖。uts:這個資料夾包含表示應用程式佈局和檢視的 xml 檔案。後面會詳細研究這些檔案。es:這個資料夾包含 檔案。這是為應用程式實現字串本地化的主要方法。

4.2.3佈局檔案

圖4-3

fill_parent

使檢視元素佔滿可用的空間。也可以認為這就是 “拉伸”。

wrap_content

這個值讓 android 把元素一個接一個地排列,不進行拉伸。在構建期間對所有資源進行編譯。編譯過程的輸出之一是 檔案,這個檔案嚮應用程式的其餘部分提供資源。

圖4-4

檔案是 android 應用程式的部署描述符。這個檔案列出應用程式中包含的所有活動、服務、內容提供器和接收器,以及應用程式支援的intentfilter。

4.3手機播放器軟體設計實現

4.3.1系統主介面的實現

本軟體開始執行後,便直接進入了系統的主介面,為了系統以後能擴充套件其他服務,故將主介面設定成一般介面,如圖4-6所示。

圖4-5

圖4-5中是點選開始播放選單,歌曲會自動播放,點選停止播放按鈕點選後,歌曲會停止播放。

主介面的總體實現過程如下:

(1)首先建立佈局。開啟layout裡的,在這個佈局裡需要新增button和四個textviews的佈局。整體佈局採用的垂直型方式,單面巢狀一個水平型方式的佈局和相對型佈局方式。

(2)在程式一開始時,框架就反向呼叫oncreate方法,也呼叫onclicklistener()。呼叫oncreate()方法時,此函式首先正向呼叫父類別activity的oncreate()方法,先執行父類別的預設行為,然後才執行自己(myandroidservice)的oncreate()方法的附加行為。繼續執行到setcontentview()指令時,就去讀取的內容,依據它來進行螢幕畫面的佈局,並顯示出來。並可以在中設定背景圖片。

(3)其中在呼叫onclicklistener()方法時,執行到指令:

圖4-6

(4)當選取<music>選項時,有以下程式實現:

音樂播放的實現:

圖4-7

4.3.2手機播放器功能實現

軟體介面編輯:

在檔案中 設定textview,editview以及button。

並在中進行配置,如圖4-10:

圖4-8

如圖所示,程式表達如下:

圖4-9

最後顯示出xml檔案中設定的內容,其內容體現在檔案中。

圖4-10

另外,在中會對所有用到的類生成對應的id,在使用時直接呼叫id。

最後,在中要對android name,lable進行註冊。程式碼為:

圖4-11

4.3.3常見的錯誤分析解決

當除錯軟體完成後,對程式碼進行修改,在對程式就行第二次除錯時,容易遇到下面的提示錯誤,avd manager無法再次調試出程式:

圖2-12

則可以用一下解決方案,進入到模擬器中,點選settings->applications->mange

applications-> select the application->select “uninstall”,將啟動的手機音樂播放器手機播放器軟體刪除掉,下次就可以成功啟動。