董袁泉 徐 李
(沙洲職業(yè)工學(xué)院,江蘇 張家港 215600)
隨著智能手機(jī)走進(jìn)普通人的生活,它已成為人們獲取信息的主要設(shè)備。Android是一套真正意義上的開(kāi)放性移動(dòng)設(shè)備綜合平臺(tái),它包括操作系統(tǒng)、中間件和一些關(guān)鍵的平臺(tái)應(yīng)用[1]。Android平臺(tái)的開(kāi)放性等特點(diǎn)既能促進(jìn)技術(shù)的創(chuàng)新,又有助于降低開(kāi)發(fā)成本,還可以使運(yùn)營(yíng)商能非常方便地制定自己的特色化的產(chǎn)品。
Android是一個(gè)包含操作系統(tǒng)、中介架構(gòu)層及應(yīng)用程序所產(chǎn)生出來(lái)的軟件堆棧架構(gòu)如圖1所示。Android系統(tǒng)自上而下共有4層[2],包括應(yīng)用層(Applications),應(yīng)用框架層(Application Framework),核心庫(kù)和運(yùn)行環(huán)境層(Libraries和Android Runtime),操作系統(tǒng)層(Linux Kernal)。
在應(yīng)用層可以使用Java語(yǔ)言進(jìn)行各種應(yīng)用程序的開(kāi)發(fā)。
該層為系統(tǒng)提供了很多的API,它包括:Activity Manager,Window Manager,Content Providers,View System 等管理功能。
Android應(yīng)用框架需要系統(tǒng)底層的一些C/C++庫(kù)的支持。這些庫(kù)包括:Bionic 系統(tǒng) C 庫(kù), 多媒體庫(kù),SGL,SSL,OpenGL ES1.0,SQLite,Webkit,F(xiàn)reeType。在Android操作系統(tǒng)中,每個(gè)Java程序都運(yùn)行在一個(gè)獨(dú)立的Dalvik虛擬機(jī)上。Dalvik被設(shè)計(jì)為一個(gè)設(shè)備,可同時(shí)高效地運(yùn)行多個(gè)虛擬系統(tǒng)。它在保證API方面的兼容的同時(shí),針對(duì)移動(dòng)手機(jī)進(jìn)行了大幅優(yōu)化,占用資源更小,運(yùn)行效率更高。
該層包括顯示驅(qū)動(dòng)、鍵盤(pán)驅(qū)動(dòng)、USB驅(qū)動(dòng)、Flash內(nèi)存驅(qū)動(dòng)等各種設(shè)備驅(qū)動(dòng)。
在應(yīng)用程序架構(gòu)內(nèi)已經(jīng)具備多種不同的基礎(chǔ)組件,在開(kāi)發(fā)應(yīng)用程序時(shí),就可以直接調(diào)用這些組件來(lái)使用,可以節(jié)省開(kāi)發(fā)應(yīng)用程序的精力及時(shí)間。
集成的瀏覽器是Android內(nèi)建的瀏覽器,以WebKit的瀏覽引擎為基礎(chǔ)所開(kāi)發(fā)成的[3]。WebKit是一個(gè)開(kāi)源瀏覽器網(wǎng)頁(yè)排版引擎,配合Android手機(jī)功能,可以在瀏覽網(wǎng)頁(yè)時(shí),達(dá)到更好的效果。
在2D方面,Android提供了一套特有的類庫(kù)SGL;而在3D方面則是使用OpenGLES1.0(openGL for Embedded systems)規(guī)范的類庫(kù),它們是一種非??斓膱D形引擎,并且支持硬件加速。
SQLite提供結(jié)構(gòu)化的數(shù)據(jù)存取。SQLite是一款輕型的數(shù)據(jù)庫(kù),支持SQL語(yǔ)句。同時(shí)它還支持事務(wù)功能和并發(fā)處理等等,適合在手機(jī)上使用。
主要用于播放媒體文件。這同時(shí)包括對(duì)音頻(如播放MP3或其他音樂(lè)文件等)和視頻(如播放從網(wǎng)上下載的視頻)的支持,并支持“播放URI地址”模式,在網(wǎng)絡(luò)上直接播放的流媒體。另外支持各種通用的靜態(tài)圖像格式,例如:JPG、PNG、GIF等格式。
對(duì)于一個(gè)Android應(yīng)用程序來(lái)說(shuō),是由活動(dòng)Activity、意圖接收器Intent Receiver、服務(wù)Service、內(nèi)容提供者 Content Provider四部分組成[4],然而,并不是所有的Android應(yīng)用程序都必須具備上面的四個(gè)組件,可以包含一個(gè)或幾個(gè)。當(dāng)決定使用以上哪些組件來(lái)構(gòu)建Android應(yīng)用程序時(shí),需要將它們注冊(cè)在AndroidManifest.xml文件中,在這個(gè)文件中可以聲明應(yīng)用程序組件以及它們的特性和要求。
活動(dòng)是以上四個(gè)組件中最常用的一個(gè)。每個(gè)活動(dòng)都是Activity的子類,并實(shí)現(xiàn)了一些獨(dú)有的功能,如管理UI顯示和UI的反饋事件。一個(gè)活動(dòng)就相當(dāng)于應(yīng)用程序的一個(gè)用戶界面,由事件響應(yīng)以及視圖等組成。大多數(shù)的應(yīng)用程序通常包括多個(gè)界面。Android通過(guò)一個(gè)被稱作意圖的特殊類,來(lái)實(shí)現(xiàn)界面與界面之間的跳轉(zhuǎn)。一個(gè)意圖描述了一個(gè)應(yīng)用程序想要做什么。通常意圖過(guò)濾器要被注冊(cè)在AndroidManifest.xml文件中。從一個(gè)界面跳轉(zhuǎn)到另一個(gè)界面是由解析各種意圖實(shí)現(xiàn)的。
當(dāng)想要編寫(xiě)代碼來(lái)對(duì)外部事件做一些處理時(shí),可以使用意圖接收器。意圖接收器并不顯示UI界面,它是通過(guò)Notification Manager來(lái)通知用戶他們感興趣的事件發(fā)生了。意圖接收器同樣可以被注冊(cè)在AndroidManifest.xml文件中,同時(shí)也可以在代碼中使用 Context.register Receiver()來(lái)注冊(cè)自己的意圖接收器。當(dāng)一個(gè)意圖接收器被觸發(fā)時(shí),系統(tǒng)會(huì)根據(jù)需要來(lái)啟動(dòng)應(yīng)用程序。
服務(wù)是具有長(zhǎng)生命周期并且沒(méi)有用戶界面的代碼[5]。
Content Provider可實(shí)現(xiàn)應(yīng)用程序的數(shù)據(jù)存取及不同應(yīng)用程序之間的數(shù)據(jù)共享。每個(gè)Content Provider都有一個(gè)公共的URI,這個(gè)URI用于表示這個(gè)Content Provider所提供的數(shù)據(jù)。
系統(tǒng)主要的功能是聯(lián)系人的信息管理,查找和刪除聯(lián)系人,給聯(lián)系人撥打電話,發(fā)送信息,發(fā)送郵件。
個(gè)人隨身通訊錄系統(tǒng)的用途說(shuō)明如表1所示,文件結(jié)構(gòu)如圖2所示。
表1 文件用途
Android的資源文件保存在/res的子目錄中。其中/res/anim目錄中保存的是產(chǎn)生動(dòng)畫(huà)效果的XML文件,/res/drawable/目錄中保存的是圖像文件,/res/values目錄中保存的是用來(lái)自定義字符串和顏色的文件,/res/xml目錄中保存的是XML格式的數(shù)據(jù)文件,/res/layout目錄中保存的布局文件。所有在程序開(kāi)發(fā)階段可以被調(diào)用的資源都保存在這些目錄中。
4.4.1 主界面 Activity_main.java
當(dāng)安裝本系統(tǒng)后,按下Menu鍵出現(xiàn)系統(tǒng)主界面,關(guān)鍵代碼如下:public class Activity_main extends Activity{
ListView lv;//顯示所有數(shù)據(jù)的ListView
GridView bottomMenuGrid;//主菜單的布局
……………
String[]activity_main_menu_itemName={ “顯示所有”,“刪除所有”,“備份數(shù)據(jù)”,“還原數(shù)據(jù)”,“后退” };//菜單文字
int[]activity_main_menu_itemSource={R.drawable.showall,R.drawable.menu_btn_delete,R.drawable.menu_backup, R.drawable.menu_restore,
R.drawable.menu_fresh,R.drawable.menu_return};//主菜單圖片
String[]bottom_menu_itemName={ “增加”,“查找”,“刪除”,“功能”,“退出” };
String fileName;
int[]bottom_menu_itemSource={R.drawable.menu_new_user,
R.drawable.menu_search,R.drawable.menu_btn_delete,
R.drawable.controlbar_showtype_list,R.drawable.menu_exit};
先聲明了用到的組件。從代碼中可以看出,MainActivity的主要功能就是軟件的導(dǎo)航欄。
4.4.2 增加聯(lián)系人列表 AddnewContact.java
增加聯(lián)系人的主要代碼如下:
btn_btn_save.setOnClickListener(new OnClickListener(){
public void onClick(View arg0){
if(!flag){
btn_btn_save.setText(“保存修改”);
setEditTextAble();
flag=true;
et_name.setFocusable(true);
et_name.setFocusableInTouchMode(true);
et_name.requestFocus();
et_name.requestFocusFromTouch();
}else{
setTitle(“modify”);
modify();
setEditTextDisable();
setColorToWhite();
btn_btn_save.setText(“修改”);
flag=false;
et_name.setFocusable(false);
et_name.setFocusableInTouchMode(false);
}
}
});
其余功能的代碼此處不再贅述。
4.4.3 程序配置文件 AndroidManifest.XML:
<?xml version=“1.0” encoding=“utf-8”?>
<manifest xmlns:android=“http://schemas.android.com/apk/res/android”
package=“com.zhengping.contact”
…………
<application
android:icon=“@drawable/androidcontact”
android:label=“個(gè)人通訊錄”>
<activity
android:name=“.Main”
android:label=“個(gè)人通訊錄”>
<intent-filter>
<action android:name=“android.intent.action.MAIN” />
<category android:name =“android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
<activity android:name=“.UserDetail” />
<activity android:name=“.AddNew” />
<activity android:name=“.MainPrivacy” />
</application>
<uses-permission android:name=“android.permission.CALL_PHONE”>
</uses-permission>
<uses-permission android:name=“android.permission.WRITE_EXTERNAL_STORAGE”>
</uses-permission>
</manifest>
本文分析了Android應(yīng)用程序的架構(gòu),介紹了Android應(yīng)用程序開(kāi)發(fā)的相關(guān)技術(shù)和流程,并通過(guò)一個(gè)具體的實(shí)例來(lái)說(shuō)明Android應(yīng)用開(kāi)發(fā)的具體過(guò)程;隨著智能手機(jī)的發(fā)展,研究基于Android平臺(tái)的應(yīng)用開(kāi)發(fā)具有重要的意義。
[1]彭許波.基于Android系統(tǒng)遠(yuǎn)程控制客戶端服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)[D].重慶郵電大學(xué),2013.
[2]葉曉靜,黃俊偉.基于Android系統(tǒng)的多媒體播放器解決方案[J].現(xiàn)代電子技術(shù),2011,34(24):73-77.
[3]高勝寒.基于Android平臺(tái)webkit核心的瀏覽器的設(shè)計(jì)與實(shí)現(xiàn)[D].電子科技大學(xué),2012.
[4]黃思沛.基于Android的校園應(yīng)用的設(shè)計(jì)初探——以校園活動(dòng)平臺(tái)為例[J].電子世界,2014,7:141-143.
[5]劉瑾,劉一瑋,李玥.基于Android平臺(tái)的 WiFi管理軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)光盤(pán)軟件與應(yīng)用,2014,17(17):75-78.