摘要:該文通過介紹設(shè)計一個基于Android的多功能手機(jī)相冊軟件,闡述了Android Camera、圖片編輯、微博客戶端開發(fā)等相關(guān)知識,尤其對使用Camera API直接控制相機(jī)硬件及新浪微博分享作了詳細(xì)的介紹,同時將設(shè)計過程中所用到的主要方法及控件進(jìn)行了詳細(xì)說明。具有較強的實用性。
關(guān)鍵詞:Android Camera;新浪微博; API
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2013)15-3614-03
Android 平臺以其強大的功能和友好的用戶界面,在幾大主流平臺的競爭中取得了巨大的勝利和飛速的發(fā)展,在移動操作系統(tǒng)市場的份額中所占的比例也越來越大。
3G時代的出現(xiàn),也使更多人愿意隨時隨地分享自己的信息。多功能手機(jī)相冊軟件將手機(jī)拍照、照片的編輯與美化、微博分享等功能結(jié)合在一起,給用戶帶來了一站式的體驗,也改變了用戶的生活方式。
1 Android簡介
Android是一種以Linux為基礎(chǔ)的開放源代碼操作系統(tǒng),主要使用于便攜設(shè)備。由Google和開放手持設(shè)備聯(lián)盟開發(fā)與領(lǐng)導(dǎo)。
1.1 Android架構(gòu)
Android的系統(tǒng)架構(gòu)和其它操作系統(tǒng)一樣,采用了分層的架構(gòu)。android分為四個層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運行庫層和linux核心層。Android系統(tǒng)架構(gòu)圖如圖1所示[1]。
1.2 Android平臺的關(guān)鍵組件
Android應(yīng)用組件是應(yīng)用程序的必要構(gòu)建模塊,每個組件都存在于自己的實體并且扮演著唯一的構(gòu)建模塊,可以用來定義Android應(yīng)用的完整行為。Android有四種不同類型的應(yīng)用組件,每個組件充當(dāng)不同的角色,并且有唯一的用來定義組件如何創(chuàng)建、如何消亡的不同的生命周期[2]。這四種應(yīng)用組件是:
1)Activities:一個Activity代表一個單獨的帶有用戶接口的屏幕。并且一個應(yīng)用可以啟動另一個完全不同的應(yīng)用中的Activity。
2)Services:service是運行在后臺執(zhí)行長期運行的操作或者遠(yuǎn)程進(jìn)程中的工作。Service不提供用戶接口。
3)Broadcast receivers:Broadcast receivers是一個能夠響應(yīng)系統(tǒng)級廣播的組件,如當(dāng)電池電量低或屏幕關(guān)閉時會進(jìn)行廣播聲明。
4)Content providers:它管理著一組共享的應(yīng)用數(shù)據(jù)。你可以在文件系統(tǒng)、SQLLite數(shù)據(jù)庫、網(wǎng)上或者任何其他持久性存儲設(shè)備等應(yīng)用程序可以訪問到的地方中存儲數(shù)據(jù)[3]。
2 系統(tǒng)總體設(shè)計
多功能手機(jī)相冊主要由4個模塊組成:拍照、編輯照片、照片分享及換膚功能。
1)拍照模塊主要完成拍照、照片存儲功能。
2)編輯照片模塊可以瀏覽手機(jī)上的所有照片,并上下滑動選中某張照片進(jìn)行大圖瀏覽、編輯,進(jìn)行美化。
3)照片分享模塊主要將拍攝的照片分享到另外一個SNS社區(qū)(如新浪微博、騰訊微博等)。
4)換膚功能模塊主要實現(xiàn)多種皮膚的更換。
3 系統(tǒng)詳細(xì)設(shè)計與實現(xiàn)
3.1 拍照模塊設(shè)計
Android手機(jī)關(guān)于Camera的使用,一是拍照,二是攝像。由于Android提供了強大的組件功能,為此對于在Android手機(jī)系統(tǒng)上進(jìn)行Camera的開發(fā),我們可以使用兩類方法:一是借助Intent和MediaStroe,調(diào)用系統(tǒng)Camera App程序來實現(xiàn)拍照和攝像功能;二是根據(jù)Camera API自己編寫Camera程序[4]。為了實現(xiàn)更多的自由拍照功能,本軟件通過調(diào)用Android的Camera APIs實現(xiàn)直接控制相機(jī)硬件,并將照片保存到手機(jī)的存儲卡中。
在拍照前首先檢查硬件設(shè)備,使用Camera的Open函數(shù)開啟攝像頭硬件,開啟成功后,使用SurfaceHolder.Callback的surfaceChanged函數(shù)中調(diào)用getParameters函數(shù)得到已打開的攝像頭的配置參數(shù)Parameters對象,需要注意的是當(dāng)Android版本低于2.2時,需要設(shè)置Parameters對象的rotation參數(shù)為90度,另外還可以設(shè)置預(yù)覽的屏幕尺寸、生成的圖片尺寸等,設(shè)置好參數(shù)就可以在SurfaceView預(yù)覽了。在預(yù)覽照片時,如果有手機(jī)來電,需要在Acitivity的onPause方法中釋放Camera對象,來電結(jié)束后在onResume方法中重新打開Camera對象。拍照模塊如圖2所示。
3.2 照片編輯模塊設(shè)計
瀏覽照片使用Gridview實現(xiàn)。首先通過File獲取手機(jī)存儲卡上的以jpg、gif、bmp等為擴(kuò)展名的照片文件,將其存儲到List中。為了實現(xiàn)GridView的效果,需要構(gòu)建一個BaseAdapter,這個類表示Grid中的所包含的內(nèi)容,即包含照片文件名的List。用戶可以上下滑動選擇一張圖片,照片的位置在GridView的onItemClick事件中傳入Gallery界面,在Gallery界面中將選中的照片以image和Gallery顯示,實現(xiàn)效果如圖3所示。編輯功能使用Matrix對照片進(jìn)行放大、縮小及旋轉(zhuǎn)。使用ImageUtils實現(xiàn)圓角及倒影等功能。編輯效果如圖4所示。
在GridView加載顯示圖片時,有一些圖片太大,容易導(dǎo)致內(nèi)存溢出,因此采取把圖片壓縮成縮略圖的方式,以減少圖片加載顯示的時間,提高用戶體驗。Android中bitmap類的方法bitmap.compress(Bitmap.CompressFormat.JPEG, quality,fos)可以實現(xiàn)將幾百K的圖片壓縮成幾k或幾百B。
3.3 照片分享設(shè)計
目前新浪微博開放平臺用戶身份鑒權(quán)使用OAuth2.0協(xié)議,同時提供對Web,桌面和移動應(yīng)用程序的支持[4]。當(dāng)用戶第一次登陸,進(jìn)行授權(quán)認(rèn)證時會獲取UserID號、Access Token和Access Secret,并將其存儲到SharedPreferences中以便用戶下次使用。用戶再次登錄時開始檢查SharedPreferences中是否有該用戶的新浪微博的記錄,避免了重新授權(quán)認(rèn)證的繁瑣操作。登錄界面如圖5所示。
開發(fā)中通過調(diào)用新浪微博提供的API從微博服務(wù)商那里獲得用戶的數(shù)據(jù),也可以發(fā)送數(shù)據(jù)給微博服務(wù)器。用戶上傳文字和圖片的界面如圖6所示。
4 結(jié)束語
本文介紹了基于Android的多功能手機(jī)相冊軟件的設(shè)計與實現(xiàn),其中對Android的Camera技術(shù)、圖片編輯技術(shù)和新浪微博客戶端設(shè)計作了詳細(xì)的闡述,并指出了應(yīng)用開發(fā)過程中可能遇到的問題和解決方法。集手機(jī)拍照、照片編輯、照片微博分享功能于一體,具有一定的實際意義和使用價值。
參考文獻(xiàn);
[1] Android Developer, http://developer.android.com .
[2] Android Developer, http://developer.android.com/guide/components/fundamentals.html.
[3] Android Developer, http://developer.android.com/training/camera/index.html.