安卓APP源碼和設(shè)計報告——導(dǎo)航系統(tǒng)
演示答辯發(fā)言稿:
注意:1.在mainfest.xml文檔中添加訪問權(quán)限即一系列<uses-permission>元素使用Android中提供的權(quán)限。比如百度地圖的使用聯(lián)網(wǎng)的情況下需要網(wǎng)絡(luò)功能權(quán)限。
2.在Stings.xml中添加一些字符串數(shù)組,離線數(shù)據(jù)管理、簡體繁體切換信息,存放字符串信息
麥當勞類目錄:

Mc_DBUtil
McAddressInfo
MainActivity
McAdView
McContant
MainActivity這個類起一個在MVC模型中的Controller的功能,生成軟件界面,是View層的內(nèi)容并且也從Model層取出數(shù)據(jù)通過它自身的控制,將信息顯示在View層上。。
MainActivity與BNavigatorActivity這兩個Controller分別控制主界面以及地圖界面,兩者有著關(guān)聯(lián)的關(guān)系,MainActivity可以控制主界面經(jīng)過一些觸發(fā)事件調(diào)用MainActivity中的LaunchNavigator()方法跳轉(zhuǎn)到地圖界面。即運行界面右上角的三角按鈕。
各類的作用簡介:
BNavigatorActivity類主要控制地圖界面,創(chuàng)建Mapview,導(dǎo)航視圖,設(shè)置語音播放,以及對導(dǎo)航過程中來電話的處理。
MainActivity則是對主界面進行控制的,其中包含許多自定義方法:其中最主要的便是gotoMainView()方法即主界面控制。首先初始化導(dǎo)航引擎,再自定義3個radioButton的監(jiān)聽器回調(diào)函數(shù)。從而實現(xiàn)按下3個按鈕后的對應(yīng)功能。還有初始化地址的方法,創(chuàng)建對話框方法、動態(tài)更新對話框內(nèi)容方法、為下拉框配置監(jiān)聽器方法、計算路徑距離方法、發(fā)布導(dǎo)航消息方法、獲得sd卡路徑方法,調(diào)用GPS方法、獲得位置方法、初始化店名、區(qū)名列表方法。位置改變觸發(fā)方法。導(dǎo)航的起點終點設(shè)置在此類中完成。用不同的state值表示按了不同的RadioButton,就是主界面的控制。
Mc_DBUtil即SQLite數(shù)據(jù)庫的創(chuàng)建,注意數(shù)據(jù)庫信息放入data/data/包名下面。正如sharedPerence中所提及的查看file Explore可以查看數(shù)據(jù)。對數(shù)據(jù)庫的增刪關(guān)閉操作。類中有初始化數(shù)據(jù)方法,通過sql語句獲取城市名列表、獲取區(qū)名列表、獲取店名列表、獲取確定了的店名列表、獲取店名、所有地址的經(jīng)緯度列表。
McADDressInfo類主要存放麥當勞店經(jīng)緯度信息,列表信息等。
McAdView是麥當勞廣告界面繼承view 類,使用圖片數(shù)組,利用線程實現(xiàn)圖片的更新,這里就放了3張圖片。如上機中曾分析的例子Handler利用線程控制圖片的更新展示。最主要的是將代碼作為了main.xml中的元素使得主界面中能夠出現(xiàn)廣告圖片。
McConstant則是存放一些常數(shù)如:MapView的尺寸信息、邊界寬度、Toast消息編號等。
運行效果:

課程名稱:
班 級:
學(xué) 號:
姓 名:
任課教師:
導(dǎo)航程序分析與改造
一、程序功能和環(huán)境:
程序功能:
通過三種選擇方式:列表選擇、自己填寫地址、根據(jù)距離最近查詢來查詢南京市各個麥當勞的地址,用百度地圖即手機自帶的GPS顯示麥當勞位置,并依據(jù)路徑語音導(dǎo)航。
2.開發(fā)環(huán)境:
ADT:基于Eclipse的Android開發(fā)工具擴充套件(Android Development Tools plugin)
安卓手機一部
3.程序所必須的配置,設(shè)計:
百度地圖API:即armabi文件夾將其添加到libs文件夾下
在AndroidManifest.xml中添加權(quán)限:
a.SDK1.5需要android.permission.GET_TASKS權(quán)限判斷本程是否為當前運行的應(yīng)用
b.來電消音權(quán)限
c.使用網(wǎng)絡(luò)功能所需權(quán)限
d.使用wifi所需權(quán)限
e連接GPS所需權(quán)限
f.訪問百度地圖服務(wù)位置所需權(quán)限
在res values文件夾下的strings.xml中添加與百度地圖使用相關(guān)的資源信息。
g.在百度API中申請key,申請地址http://lbsyun.baidu.com/apiconsole/key,進入如下界面:

選擇創(chuàng)建應(yīng)用:

開始配置應(yīng)用,我們需要配置我們應(yīng)用的安全碼(形式為:輸入“安全碼”。安全碼的組成規(guī)則為:Android簽名證書的sha1值+“;”+packagename(即:數(shù)字簽名+分號+包名))安全碼的獲取方式如下:我們這邊使用Eclipse直接查看: winows -> preferance-> android -> build:

在之前的步驟中輸入安全碼,sha1值+我創(chuàng)建的應(yīng)用的包名,點擊確認如下圖:

這樣key的配置完成。
在AndroidManifest.xml中添加以下內(nèi)容:

然后點擊保存。
自動生成的keystore文件用于存放存放私鑰和證書信息,程序運行時可依據(jù)key值是否合法,如果是合法的才可以用百度地圖。
Key校驗的結(jié)果顯示到主界面上通過以下代碼,調(diào)用toast顯示瞬間信息:

二、MVC架構(gòu)用例、結(jié)構(gòu)分析、類圖:
1.主界面的controller與主界面相關(guān)類之間的關(guān)系圖:
MVC結(jié)構(gòu)分析:
MainActivity這個類起一個在MVC模型中的Controller的功能,生成軟件界面,是View層的內(nèi)容并且也從Model層取出數(shù)據(jù)通過它自身的控制,將信息顯示在View層上。這里Mc_DBUtil屬于Model層,存放了程序所需的數(shù)據(jù),包含了對數(shù)據(jù)庫的操作方法。McConstant類存放了一些與距離、界面、尺寸相關(guān)的常數(shù)。McADDressInfo類主要存放麥當勞店經(jīng)緯度信息,列表信息等。MainActivity使用了Mc_DBUtil、McConstant、McADDressInfo幾個類中的屬性及方法。McAdView屬于View層它繼承了View類,包含了MainActivity類型的屬性,用于顯示界面的廣告部分。
2.兩個controller:主界面controller與地圖controller之間的關(guān)系圖:
結(jié)構(gòu)分析:
MainActivity與BNavigatorActivity這兩個Controller分別控制主界面以及地圖界面,兩者有著關(guān)聯(lián)的關(guān)系,MainActivity控制主界面經(jīng)過一些觸發(fā)事件后調(diào)用其中的LaunchNavigator()回調(diào)方法重寫onJumptoNavigator()跳轉(zhuǎn)到地圖界面。
3.程序中各類的簡介及作用:
BNavigatorActivity:主要控制地圖界面,創(chuàng)建Mapview,導(dǎo)航視圖,設(shè)置語音播放,以及對導(dǎo)航過程中來電話的處理。
MainActivity:對主界面進行控制,其中包含許多自定義方法:其中最主要的便是gotoMainView()方法即主界面控制。首先初始化導(dǎo)航引擎,再自定義3個radioButton的監(jiān)聽器回調(diào)函數(shù)。從而實現(xiàn)按下3個按鈕后的對應(yīng)功能。還有初始化地址的方法,創(chuàng)建對話框方法、動態(tài)更新對話框內(nèi)容方法、為下拉框配置監(jiān)聽器方法、計算路徑距離方法、發(fā)布導(dǎo)航消息方法、獲得sd卡路徑方法,調(diào)用GPS方法、獲得位置方法、初始化店名、區(qū)名列表方法。位置改變觸發(fā)方法。導(dǎo)航的起點終點設(shè)置在此類中完成。用不同的state值表示按了不同的RadioButton,就是主界面的控制。
Mc_DBUtil:SQLite數(shù)據(jù)庫的創(chuàng)建,注意數(shù)據(jù)庫信息放入data/data/包名下面。正如sharedPerence中所提及的查看file Explore可以查看數(shù)據(jù)。對數(shù)據(jù)庫的增刪關(guān)閉操作。類中有初始化數(shù)據(jù)方法,通過sql語句獲取城市名列表、獲取區(qū)名列表、獲取店名列表、獲取確定了的店名列表、獲取店名、所有地址的經(jīng)緯度列表。
McADDressInfo:主要存放麥當勞店經(jīng)緯度信息,列表信息等。
McAdView:麥當勞廣告界面繼承view 類,使用圖片數(shù)組,利用線程實現(xiàn)圖片的更新,這里就放了3張圖片。如上機中曾分析的例子Handler利用線程控制圖片的更新展示。最主要的是將代碼作為了main.xml中的元素使得主界面中能夠出現(xiàn)廣告圖片。
McConstant:存放一些常數(shù)如:MapView的尺寸信息、邊界寬度、Toast消息編號等。
主要代碼分析:
BNavigatorActivity.java的地圖界面創(chuàng)建主要依靠以下代碼:
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//創(chuàng)建NmapView
if (Build.VERSION.SDK_INT < 14) {
BaiduNaviManager.getInstance().destroyNMapView();
}
MapGLSurfaceView nMapView = BaiduNaviManager.getInstance().createNMapView(this);
//創(chuàng)建導(dǎo)航視圖
View navigatorView = BNavigator.getInstance().init(BNavigatorActivity.this, getIntent().getExtras(), nMapView);
//填充視圖
setContentView(navigatorView);
BNavigator.getInstance().setListener(mBNavigatorListener);
BNavigator.getInstance().startNav();
// 初始化TTS. 開發(fā)者也可以使用獨立TTS模塊,不用使用導(dǎo)航SDK提供的TTS
BNTTSPlayer.initPlayer();
//設(shè)置TTS播放回調(diào)
BNavigatorTTSPlayer.setTTSPlayerListener(new IBNTTSPlayerListener() {
}
}
數(shù)據(jù)庫設(shè)計:
我用的是Android系統(tǒng)自帶的SQLite數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)庫。將創(chuàng)建的數(shù)據(jù)庫放在“/data/data/com.example.mcnavigation3/sd.db”此路徑下。在創(chuàng)建數(shù)據(jù)庫前要判斷是否存在這個數(shù)據(jù)庫,數(shù)據(jù)庫若存在則打開數(shù)據(jù)庫,若不存在則自己創(chuàng)建數(shù)據(jù)庫。數(shù)據(jù)庫打開或創(chuàng)建好后建立數(shù)據(jù)表
建表語句:
create table if not exists sminfo
(infoid INTEGER(5),
city varchar(20),
csmc varchar2(40),
dm varchar2(80),
dz varchar2(100),
jd varchar2(20),
wd varchar2(20));
注意要有數(shù)據(jù)庫關(guān)閉操作,數(shù)據(jù)的一些操作必須調(diào)用這個方法,以防一個操作后數(shù)據(jù)庫發(fā)生改變影響其余操作。對數(shù)據(jù)的增刪改查都是用sql語句實現(xiàn)的。該程序數(shù)據(jù)庫的設(shè)計依靠的是Mc_DBUtil類。
對數(shù)據(jù)庫的增刪改查的操作由以下代碼實現(xiàn):

此程序的數(shù)據(jù)都由以上代碼存儲實現(xiàn)。
運行邏輯:
1.從數(shù)據(jù)庫中讀取內(nèi)容的時序圖:
2.根據(jù)用戶輸入地點查詢地圖時序圖:
運行界面:
主界面的顯示主要依靠main.xml以及MainActivity的控制,主界面所需的圖片拷貝到工程的res文件夾下的drawable文件夾下。
界面下方的圖片作為麥當勞導(dǎo)航的廣告部分,其顯示主要依靠以下代碼:
Main.xml中:

正如此段代碼所寫此部分要結(jié)合McAdView這個類
此部分圖片的動態(tài)主要依賴圖片數(shù)組以及線程控制。數(shù)組用于存放與麥當勞有關(guān)的3張圖片,重寫線程中的run()方法實現(xiàn)圖片的切換顯示,定切換周期。實現(xiàn)代碼如下:
數(shù)組存儲圖片代碼:

調(diào)用線程代碼:

圖片的動態(tài)顯示即圖片的重畫,這段代碼的作用是每隔3000ms重畫一張圖片,從而動態(tài)地顯示圖片起到做廣告的作用。并依據(jù)圖片的張數(shù)循環(huán)顯示所有圖片。
界面廣告區(qū)域加載圖片的方法代碼如下:

程序的測試:
功能測試:
用ADT編譯代碼在手機上安裝程序并運行
a.點開程序,選擇列表選擇按鈕;選擇相應(yīng)的南京區(qū)名,再選擇相應(yīng)的店名,會自動填寫地址。如圖:
還可以選擇其余兩個按鈕,自己填寫按鈕是自己填寫目的地地址;點最近查詢按鈕可以選擇距離找出此距離內(nèi)最近的目的地。此程序的起點是手機GPS檢測到的你所在的地點的經(jīng)緯度。
b.選好目的地后,點擊右上角的三角按鈕進入地圖界面:
導(dǎo)航過程中有語音提示,告訴你行駛路線距離等
C.從地圖界面回到主界面按返回按鈕如下圖所示:
還有“導(dǎo)航結(jié)束”的語音提示。這個測試屬于黑盒測試。
monKey測試:
通過eclipse啟動一個Android的emulator
進入SDK路徑即:在ADT安裝中的SDK里的platform-tools處用dos窗口打開
在其中輸入:
adb devices測試連接情況如圖:
先輸入adb shell:
再輸入 monkey -p com.example.mcnavigation3 -v 20
此命令的作用為啟動指定的應(yīng)用程序,并向其發(fā)送20個偽隨機事件。運行結(jié)果如下:
六、程序的不足與改進:
1.程序的不足:我參照楊帆同學(xué)的代碼進行改進但是沒能實現(xiàn)歡迎界面跳轉(zhuǎn)到導(dǎo)航界面,據(jù)我分析是A A的掌握有所欠缺,沒能很好地運用,地圖的顯示也有所欠缺,無法顯示店名只能顯示店附近的地名或飯店。
2改進的可能性:
能把麥當勞的標志顯示在地圖上
增加交通方式的選擇規(guī)劃最優(yōu)方式,這都是百度導(dǎo)航做到的因此我還需對百度導(dǎo)航有進一步地了解。
總結(jié):我還需要對百度導(dǎo)航進一步了解,了解其中組件如何設(shè)置實現(xiàn),百度地圖設(shè)計與調(diào)用這一塊知識還是比較模糊的,在同學(xué)的幫助下,我順利地實現(xiàn)了麥當勞導(dǎo)航,在不明白的時候一定要與同學(xué)或經(jīng)驗人士多多探討,這也加快了對程序的理解,防止走錯路。這一實訓(xùn)讓我對安卓程序有了進一步的了解。也了解了安卓的基本設(shè)計思路,弄清了安卓程序的結(jié)構(gòu)。