當前位置:萬佳範文網 >

畢業論文 >畢業設計 >

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

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

摘要

計算機應用技術專業畢業設計: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”,將啟動的手機音樂播放器手機播放器軟件刪除掉,下次就可以成功啟動。

  • 文章版權屬於文章作者所有,轉載請註明 https://wjfww.com/biye/sheji/gqjqqw.html
專題