五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

2022-12-15 14:22 作者:考研保研直通車  | 我要投稿



畢業(yè)設(shè)計(jì)

基于Android的太原市景點(diǎn)

推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

1.課題意義及目標(biāo)

隨著人們生活水平的提高,外出旅游已經(jīng)成了人們放松休閑的主要活動(dòng)之一。現(xiàn)在移動(dòng)端設(shè)備已是人們必備,最重要的是攜帶方便,基于Android的太原市景點(diǎn)推薦系統(tǒng)可以讓人們更好的了解太原市的景點(diǎn)信息,方便游客更好的選擇。

2.主要任務(wù)

(1)了解景點(diǎn)信息以及分析需要實(shí)現(xiàn)的功能以及細(xì)節(jié)內(nèi)容,并搭建框架。

(2)進(jìn)行各個(gè)景點(diǎn)的信息的收集整理,并添加到對(duì)應(yīng)的功能模塊中。

(3)添加簡(jiǎn)單的地圖功能以及公交查詢功能。

(4)實(shí)現(xiàn)自駕游地圖導(dǎo)航功能(選做)

(5)為了游客記錄出行心得,添加記事本模塊,并進(jìn)行增刪改查功能的的實(shí)現(xiàn)。

3.主要參考資料

[1] 崔玥.蓉城旅游管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].四川:電子科技大學(xué),2013.

[2] 吳曉紅.基于Android的旅游景區(qū)自助導(dǎo)游系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].新疆大學(xué)信息科學(xué)與工程學(xué)院,2013,(28):61.

[3] 賀全榮.暑期自助游手機(jī)來(lái)搞定[J].2012,(11):28.

4.進(jìn)度安排

摘要

隨著移動(dòng)通信與計(jì)算機(jī)互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,手機(jī)已成為現(xiàn)代人們工作生活必不可少的通訊和娛樂(lè)工具。旅游作為一種精神享受和休閑游樂(lè)的新型產(chǎn)業(yè),走信息化`高速發(fā)展道路,能隨時(shí)隨地獲取旅游相關(guān)信息已成為旅游者們的迫切需求。

本文通過(guò)分析 Android 的體系架構(gòu)及應(yīng)用程序的組成,利用Java和SQLite技術(shù),構(gòu)建了一個(gè)基于Android的太原市的景點(diǎn)推薦系統(tǒng)。該景點(diǎn)推薦系統(tǒng)主要包括主界面、景點(diǎn)信息介紹、寫(xiě)微記、搜索以及定位導(dǎo)航等。主界面以圖文并茂的方式展示了數(shù)十個(gè)景點(diǎn)簡(jiǎn)略信息;景點(diǎn)信息介紹界面從八個(gè)方面詳細(xì)介紹了景點(diǎn);微記可以增刪改差,并且具有分享功能,增加互動(dòng);搜索功能可以快速搜索景點(diǎn)名稱,查看相關(guān)景點(diǎn)信息;定位導(dǎo)航功能首先需要進(jìn)行當(dāng)前位置的定位,獲取地址以及經(jīng)緯度,然后進(jìn)行路線規(guī)劃,獲取導(dǎo)航路線、距離并預(yù)測(cè)行駛時(shí)間,可實(shí)現(xiàn)語(yǔ)音播報(bào)。

關(guān)鍵詞:Android,旅游,數(shù)據(jù)庫(kù),百度地圖api

The Design and Implementation of the Recommendation System of the Scenic Spots in Taiyuan Based on Android

Abstract

With the rapid development of mobile communications and computer Internet technology, mobile phone has become a indispensable tool of communication and entertainment for people’s work and life. When it comes to tourism, as a new kind of spiritual enjoyment and leisure amusement industry, it can anytime and anywhere access to travel information by using new information-based high-speed development road ,which has become the urgent need of tourists.

This paper analyzes the architecture of Android and its application, and constructs a recommendation system based on Android for Taiyuan city based on SQLite and Java technology. The main attractions of the system including the main interface, attractions information, writing searching and positioning navigation,etc.Main interface with illustrations show dozens of attractions brief information. It introduces the scenic spot information interface from eight aspects in detail introduced the attractions. Micro minds

has the increase, delete, modify, query functions,and has the share function.It increases interaction.Search function can quickly search for the name of the attractions,and view the relevant information attractions. Positioning and navigation function needs to locate the current position and gets address as well as the latitude and longitude, and route planning, obtaining navigation routes, distance and prediction of travel time and voice broadcasting can be realized.

Key:Android,travel,database,baidu map api

目錄

1 緒論11

1.1 研究背景及意義11

1.2 國(guó)內(nèi)外進(jìn)展11

1.3 本文的工作22

2 Android環(huán)境搭建和關(guān)鍵技術(shù)33

2.1 Android環(huán)境搭建33

2.1.1 JDK安裝33

2.1.2 Eclipse的安裝44

2.1.3 SDK版本下載44

2.2 關(guān)鍵技術(shù)的實(shí)現(xiàn)55

2.2.1 百度地圖API key的獲取55

2.2.2 Android定位1010

3 需求分析1212

3.1 需求概述1212

3.2 可行性分析1212

3.2.1 系統(tǒng)可行性1212

3.2.2 技術(shù)可行性1212

3.3 系統(tǒng)需求分析1313

3.4 外部接口需求1313

3.5 性能需求1313

3.6 安全需求1414

3.7 軟件環(huán)境1414

4 概要設(shè)計(jì)1515

4.1 系統(tǒng)總體設(shè)計(jì)1515

4.1.1 系統(tǒng)架構(gòu)設(shè)計(jì)1515

4.1.2 系統(tǒng)結(jié)構(gòu)1515

4.2 系統(tǒng)接口設(shè)計(jì)1818

4.3 數(shù)據(jù)存儲(chǔ)設(shè)計(jì)1818

4.3.1 ContentProvider存儲(chǔ)1818

4.3.2 SQLite數(shù)據(jù)庫(kù)存儲(chǔ)1919

5 詳細(xì)設(shè)計(jì)2020

5.1 界面設(shè)計(jì)2020

5.1.1 主界面設(shè)計(jì)2020

5.1.2 搜索界面設(shè)計(jì)2121

5.1.3 景點(diǎn)信息界面設(shè)計(jì)2222

5.1.4 微記模塊設(shè)計(jì)2424

5.1.5 定位導(dǎo)航模塊設(shè)計(jì)2828

5.1.6 返回鍵的監(jiān)聽(tīng)3131

5.2 數(shù)據(jù)庫(kù)設(shè)計(jì)3232

5.2.1 景點(diǎn)信息表jingdian3232

5.2.2 搜索記錄表history3333

5.2.3 微記內(nèi)容表 noteitems3434

6 測(cè)試3535

6.1 主界面加載問(wèn)題3535

6.2 景點(diǎn)信息界面dialog顯示問(wèn)題3636

7 結(jié)論3737

參考文獻(xiàn)3838

致謝3939

1 緒論

1.1 研究背景及意義

現(xiàn)在人們生活水平普遍提高,外出旅游成為日常生活的一部分。目前,游客獲取旅游信息的主要方式是咨詢旅行社或上網(wǎng)查詢,這種方式獲取的旅游信息比較粗略,不直觀,不靈活。隨著移動(dòng)網(wǎng)絡(luò)的飛速發(fā)展和安卓智能手機(jī)的普及,使游客在安卓智能手機(jī)上實(shí)現(xiàn)旅游信息方便快捷的查詢成為可能。

太原市是山西省的省會(huì),別稱并州,古稱晉陽(yáng),也稱“龍城”,國(guó)家歷史文化古城、

國(guó)家園林城市、是一座具有4700年歷史,2500多年建城歷史的古都。下轄地區(qū)地區(qū)

有6個(gè)市轄區(qū)、3個(gè)縣、一個(gè)縣級(jí)市,擁有古鎮(zhèn)鄉(xiāng)村、自然景觀、展館、公園等多個(gè)

類型的大大小小數(shù)十個(gè)景點(diǎn)。

基于移動(dòng)端的景點(diǎn)推薦軟件的實(shí)現(xiàn),可以代替游客了解景點(diǎn)信息的傳統(tǒng)方式,更

方便,更快捷。人們可以通過(guò)安卓手機(jī)快捷實(shí)時(shí)的查詢旅游信息,從而為制定旅游計(jì)

劃提供決策支持[4]。

1.2 國(guó)內(nèi)外進(jìn)展

隨著經(jīng)濟(jì)的穩(wěn)步發(fā)展和人民生活水平的日益提高,旅游活動(dòng)逐漸成為人們生活中的一個(gè)重要內(nèi)容,促進(jìn)了國(guó)內(nèi)旅游市場(chǎng)的蓬勃發(fā)展[1]。Android一詞的本意指“機(jī)器人”,同時(shí)也是Google于2007年11月5日宣布的基于Linux平臺(tái)的的開(kāi)源手機(jī)操作系統(tǒng)的名稱[2]。在移動(dòng)互聯(lián)網(wǎng)和移動(dòng)終端大發(fā)展的趨勢(shì)下,各類移動(dòng)應(yīng)用也在蓬勃發(fā)展[3],手機(jī)也是人們出行的必須品,人們?cè)絹?lái)越希望有一款智能化的簡(jiǎn)單易于用戶使用的智能旅游信息軟件,來(lái)更好的為人們出行服務(wù)。

目前,有很多景點(diǎn)信息的軟件,這些軟件都是全國(guó)性的,沒(méi)有一款針對(duì)具體地方的景點(diǎn)信息推薦的軟件,廣而不精[5]。在網(wǎng)上查詢信息的時(shí)候,會(huì)對(duì)于一些小的景點(diǎn)很難查到詳細(xì)的信息?,F(xiàn)如今國(guó)內(nèi)存在的軟件有一些,例如“景點(diǎn)通”,是一款可以幫助經(jīng)常旅游的用戶輕松掌握旅途景點(diǎn)的手機(jī)應(yīng)用[13],有任意縮放的精美地圖功能,景區(qū)內(nèi)旅行線路規(guī)劃,還有詳實(shí)的景點(diǎn)內(nèi)各個(gè)POI介紹。還有一款軟件就是“自游e派”,可實(shí)現(xiàn)上千個(gè)景點(diǎn)的深度語(yǔ)音講解,知名景點(diǎn)的電子導(dǎo)覽圖,用手機(jī)記錄軌跡、拍照、寫(xiě)微游記、微博分享、并在地圖、衛(wèi)星地球上展示出來(lái)。

旅游信息化已經(jīng)在發(fā)達(dá)國(guó)家經(jīng)歷了幾十年的發(fā)展。我國(guó)旅游業(yè)信息化開(kāi)始于20世紀(jì)80年代初期,起步比較晚,基礎(chǔ)比較薄弱,整體水平較低[6]。目前我國(guó)大多數(shù)旅游管理系統(tǒng)均是面向旅游者的,以各單獨(dú)旅游景區(qū)為單位的景區(qū)內(nèi)部“查詢系統(tǒng)”,查詢的內(nèi)容僅僅為景區(qū)內(nèi)景點(diǎn)、線路和各服務(wù)點(diǎn)信息。以一個(gè)地區(qū)為基礎(chǔ)的旅游信息系統(tǒng),涵蓋區(qū)域內(nèi)各旅游資源的系統(tǒng)少之又少[7]。

以地區(qū)為單位的基于Android的景點(diǎn)推薦系統(tǒng),更加方便的為本地區(qū)游客隨時(shí)隨地出行提供選擇。

1.3 本文的工作

現(xiàn)在主流的手機(jī)操作系統(tǒng)有Android和IOS[12]。Android有成熟的技術(shù)和廣泛的市場(chǎng),在這種的基礎(chǔ)下,為了滿足人們的需求,設(shè)計(jì)并實(shí)現(xiàn)了基于Android的太原市景點(diǎn)推薦系統(tǒng)。

本文的主要工作如下:

  1. 熟悉Android操作系統(tǒng)開(kāi)發(fā)需要用到知識(shí)和開(kāi)發(fā)方式,充分利用Android的
    成熟技術(shù)以及接口。

  2. 根據(jù)需求分析,分析系統(tǒng)可行性以及技術(shù)可行性,了解用戶人群的操作習(xí)慣
    以及邏輯判斷,根據(jù)這些開(kāi)發(fā)出能最大程度的滿足客戶的需求的功能模塊。
    (3) 對(duì)系統(tǒng)的功能模塊、所用接口、以及數(shù)據(jù)庫(kù)進(jìn)行概要設(shè)計(jì)。
    (4) 系統(tǒng)功能模塊的實(shí)現(xiàn),例如各個(gè)界面的設(shè)計(jì),地圖定位導(dǎo)航的前期工作申請(qǐng)key值以及后續(xù)開(kāi)發(fā),詳細(xì)的數(shù)據(jù)庫(kù)設(shè)計(jì),所用到的表以及字段等。
    (5) 進(jìn)行測(cè)試工作,發(fā)現(xiàn)問(wèn)題并解決問(wèn)題,完善界面優(yōu)化性能。最后進(jìn)行總結(jié)和展望。
    2 Android環(huán)境搭建和關(guān)鍵技術(shù)
    2.1 Android環(huán)境搭建
    2.1.1 JDK安裝
    首先需要下載JDK,安裝到固定目錄下(目錄最好沒(méi)有中文或者空格等字符,否則有時(shí)會(huì)出錯(cuò)),然后環(huán)境變量設(shè)置如下:


    1. 我的電腦->屬性->高級(jí)->環(huán)境變量->系統(tǒng)變量中添加以下環(huán)境變量:

    2. JAVA_HOME值為:E:\Aid E\eclipse\jdk(你安裝JDK的目錄)

    3. CLASSPATH值為:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.ja
      r;%JAVA_HOME%\bin;

    4. Path: 在開(kāi)始追加 %JAVA_HOME%\bin;

    5. NOTE:前面四步設(shè)置環(huán)境變量對(duì)搭建Android開(kāi)發(fā)環(huán)境不是必須的,可以跳
      過(guò)[11]。
      安裝完成之后,打開(kāi)cmd窗口,輸入java–version 查看JDK的版本信息。出
      現(xiàn)類似圖2.1的內(nèi)容表示安裝成功了:

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖 2.1 測(cè)試jdk是否安裝成功
2.1.2 Eclipse的安裝
Eclipse的安裝選擇是ADT Bundle。ADT Bundle包含了Eclipse、ADT插件和SDK Tools,是已經(jīng)集成好的IDE,只需安裝好JDK即可開(kāi)始開(kāi)發(fā)。
2.1.3 SDK版本下載
Android有很多版本,從1.x已經(jīng)發(fā)展到現(xiàn)在的Android5.1,隨著版本的更新,增加了很多新的功能,也替換了一些舊的功能。
進(jìn)入sdk目錄下,打開(kāi)安裝程序,選擇相應(yīng)的版本號(hào)進(jìn)行下載。由于現(xiàn)在Google受到限制,有時(shí)候會(huì)出現(xiàn)沒(méi)有可選包以及下載結(jié)果為uninstalled。所以需要進(jìn)行一些設(shè)置。


    1. 首先需要修改hosts文件:打開(kāi)“C:\Windows\System32\drivers\etc”路徑下的hosts文件(以記事本的方式打開(kāi))。然后加上以下內(nèi)容203.208.46.146?dl.google.com?和203.208.46.146?dl-ssl.google.com


(2) 其次需要添加鏡像,步驟如下:

啟動(dòng) Android SDK Manager ,打開(kāi)主界面,依次選擇『Tools』、『Options…』,

彈出『Android SDK Manager – Settings』窗口;

在『Android SDK Manager – Settings』窗口中,在『HTTP Proxy Server」和「H

TTP Proxy Port』輸入框內(nèi)填入鏡像服務(wù)器地址(不包含http://,如圖2.2)和端口,并且選中『Force?... sources to be fetched using?...』復(fù)選框。設(shè)置完成后單擊『Close』按鈕關(guān)閉『Android SDK Manager – Settings』窗口返回到主界面;

依次選擇『Packages』、『Reload』。

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖 2.2 SDK添加鏡像

2.2 關(guān)鍵技術(shù)的實(shí)現(xiàn)

2.2.1 百度地圖API key的獲取

  1. 登錄百度帳號(hào)
    訪問(wèn)API控制臺(tái)頁(yè)面,若您未登錄百度賬號(hào),將會(huì)進(jìn)入百度賬號(hào)登錄頁(yè)面,如圖2.3所示。

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖 2.3 登錄百度帳號(hào)界面

  1. 登錄API控制臺(tái)
    登錄會(huì)跳轉(zhuǎn)到API控制臺(tái)服務(wù),具體如圖2.4所示。

圖 2.4 登錄API控制臺(tái)界面

  1. 創(chuàng)建應(yīng)用
    如圖2.5,點(diǎn)擊”創(chuàng)建應(yīng)用”,進(jìn)入創(chuàng)建AK頁(yè)面,輸入應(yīng)用名稱,將應(yīng)用類型改為:“Android SDK”,如圖2.6所示。

圖 2.5 應(yīng)用列表界面

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖 2.6 選擇應(yīng)用類型界面

  1. 配置應(yīng)用
    應(yīng)用類型選為“Android SDK”后,需要配置應(yīng)用的安全碼,如圖2.7所示。

  2. 獲取安全碼

輸入“安全碼”。安全碼的組成規(guī)則為:Android簽名證書(shū)的sha1值+“;”+packagename(即:數(shù)字簽名+分號(hào)+包名)。注意:中間的分號(hào)為英文狀態(tài)下的分號(hào)!您可以通過(guò)兩種方法來(lái)獲取Android簽名證書(shū)的sha1值:(需事先配置好Android環(huán)境)

?獲取sha1值

第一種方法:使用keytool

第1步:運(yùn)行進(jìn)入控制臺(tái),如圖2.8所示。

第2步:定位到.android文件夾下,輸入cd .android,如圖2.9所示。

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖 2.7 創(chuàng)建應(yīng)用界面

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖2.8 cmd界面

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖 2.9 .android路徑下

第3步:輸入keytool -list -v -keystore debug.keystore,會(huì)得到三種指紋證書(shū),選取SHA1類型的證書(shū)(密鑰口令是android,在圖2.10中輸入),例如:其中keytool為jdk自帶工具;keystorefile為Android 簽名證書(shū)文件。

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖 2.10 輸入密鑰口令

最終得到的sha1值如圖2.11所示。

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖 2.11 sha1值

第二種方法:在eclipse中查看

windows -> preferance -> android -> build。如圖2.12所示。

圖2.12 eclipse查看sha1值

?獲取包名

包名是Android應(yīng)用程序本身在AndroidManifest.xml 中定義的名稱,如圖2.13所示紅色部分。

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖2.13 包名

隨后就可以在開(kāi)發(fā)中使用所申請(qǐng)的key值了。

2.2.2 Android定位

  1. 導(dǎo)入庫(kù)文件

在相關(guān)下載最新的庫(kù)文件。將so文件的壓縮文件解壓出來(lái),把對(duì)應(yīng)架構(gòu)下的so文件放入開(kāi)發(fā)者自己APP的對(duì)應(yīng)架構(gòu)下的文件夾中,建議全部放入,程序兼容性會(huì)大大提升,將locSDK_5.X.jar文件拷貝到工程的libs目錄下,這樣您就可以在程序中使用百度定位SDK了。

(2) 設(shè)置AndroidManifest.xml

每個(gè)app擁有自己?jiǎn)为?dú)的定位service,需要在application中添加如圖2.14所示的內(nèi)容,用來(lái)聲明service組件。

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖 2.14 service組件

(3) 聲明使用權(quán)限。具體內(nèi)容如圖2.16所示:

(4) 設(shè)置AcessKey

使用SDK5.0需要在Mainfest.xml設(shè)置Accesskey,設(shè)置有誤會(huì)引起定位和

地理圍欄服務(wù)不能正常使用,必須進(jìn)行Accesskey的正確設(shè)置。

通過(guò)在application標(biāo)簽中加入如圖2.15所示的內(nèi)容來(lái)設(shè)置AccessKey。

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖 2.15 key值設(shè)置

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖2.16 使用權(quán)限

3 需求分析

3.1 需求概述

隨著信息技術(shù)的進(jìn)步,人們所要求的生活質(zhì)量不斷提高,尤其是移動(dòng)端互聯(lián)技術(shù)的快速發(fā)展,電腦端的查詢已經(jīng)無(wú)法滿足人們的需求了,獲取便捷、有效信息的及時(shí)性和方便性已經(jīng)成為人們的基本要求。本系統(tǒng)的主要目的是為旅游服務(wù)提供一種便于攜帶操作方便的導(dǎo)航系統(tǒng),用于太原市的旅游景點(diǎn)。還能夠提供快速的景點(diǎn)信息查詢、寫(xiě)微記并進(jìn)行QQ或者朋友圈分享以及地圖導(dǎo)航等功能。

3.2 可行性分析

3.2.1 系統(tǒng)可行性

伴隨著經(jīng)濟(jì)不斷發(fā)展,旅游產(chǎn)業(yè)也蓬勃發(fā)展,人們旅游的次數(shù)越來(lái)越多。有計(jì)劃性的假期遠(yuǎn)游,去外省甚至出出國(guó);還有就是在平時(shí)的節(jié)假日周末在周邊旅游景點(diǎn)即興出游。人們需要一款了解景點(diǎn)信息的便攜式設(shè)備的軟件。針對(duì)太原市景點(diǎn)的推薦系統(tǒng),開(kāi)發(fā)在移動(dòng)端,極大的方便了游客在太原市內(nèi)以及周邊景點(diǎn)的出行。

3.2.2 技術(shù)可行性

PC端即使可以查看景點(diǎn)信息,但是出行在外,攜帶PC斷,不太方便;手機(jī)上網(wǎng)也可以查看景點(diǎn)信息,但是信息比較分散。該軟件是針對(duì)太原市景點(diǎn)信息的收集,基于移動(dòng)端的android平臺(tái)進(jìn)行開(kāi)發(fā)。Android技術(shù)是開(kāi)源的,研究開(kāi)發(fā)很方便,一般大型的項(xiàng)目龐大的數(shù)據(jù)都是使用SQL Server或者Oracle數(shù)據(jù)庫(kù),但是Android端一般都是小型的數(shù)據(jù),使用MySql或者SQLite數(shù)據(jù)庫(kù),本系統(tǒng)使用的就是輕型數(shù)據(jù)庫(kù)SQLite,地圖定位導(dǎo)航使用百度地圖SDK,這些都是免費(fèi)提供給開(kāi)發(fā)者使用的。系統(tǒng)開(kāi)發(fā)好之后,進(jìn)行打包,將apk文件安裝到手機(jī)上,就可以進(jìn)行使用。每一個(gè)景點(diǎn)信息都是通過(guò)數(shù)據(jù)庫(kù)保存,所以查詢景點(diǎn)信息不需要聯(lián)網(wǎng),就可以查詢相應(yīng)的景點(diǎn)信息。只有在微記進(jìn)行分享以及定位導(dǎo)航的時(shí)候需要進(jìn)行聯(lián)網(wǎng)。所以說(shuō)基于Android的太原市景點(diǎn)推薦系統(tǒng)的技術(shù)是非??尚械?。

3.3 系統(tǒng)需求分析

景點(diǎn)推薦系統(tǒng)主要是以文字和圖片的形式為大家提供服務(wù),同時(shí)擁有友好方便快捷的操作界面,Android系統(tǒng)現(xiàn)在己經(jīng)在廣泛的應(yīng)用于手機(jī)領(lǐng)域。本系統(tǒng)主要針對(duì)Android手機(jī),充分利用Android的優(yōu)勢(shì)開(kāi)發(fā)一款針對(duì)太原市景點(diǎn)的推薦系統(tǒng)。其需求包括:

(1) 用戶界面:初始化用戶界面主要用于向用戶展示粗略的景點(diǎn)信息。景點(diǎn)信息以列表形式顯示,圖文并茂。還有圖片輪顯,以及一些功能控件。

(2) 景點(diǎn)信息:用戶界面是對(duì)景點(diǎn)的粗略展示,點(diǎn)擊單一景點(diǎn),就會(huì)進(jìn)入相應(yīng)的

景點(diǎn)的詳細(xì)介紹,展示了關(guān)于這個(gè)景點(diǎn)的多個(gè)信息數(shù)據(jù)。為了滿足用戶的需求,提高體驗(yàn)度,增加了進(jìn)入上一個(gè)景點(diǎn)、下一個(gè)景點(diǎn)按鈕,方便用戶快速瀏覽多個(gè)景點(diǎn)信息。

(3) 搜索景點(diǎn):為了方便用戶快速查找相應(yīng)的景點(diǎn),增加了搜索景點(diǎn)功能,點(diǎn)擊

搜索框,進(jìn)入搜索界面,為了使用戶體驗(yàn)更人性化,還增加了搜索歷史紀(jì)錄以及刪除搜索歷史記錄功能,以及友好性提示。

(4) 寫(xiě)微記:游客出行結(jié)束后,難免會(huì)有游行心得,故增加了寫(xiě)微記模塊,也就

是一個(gè)簡(jiǎn)單的記事本功能,可以記錄心得。為了更加人性化,增加了分享功能,比如分享給QQ好友、朋友圈等,增加用戶體驗(yàn)。

(5) 地圖導(dǎo)航:利用百度地圖api,增加每個(gè)景點(diǎn)的地圖導(dǎo)航功能,方便用戶出行,

實(shí)現(xiàn)路徑規(guī)劃,實(shí)時(shí)導(dǎo)航。

3.4 外部接口需求

現(xiàn)在移動(dòng)端的地圖開(kāi)發(fā)只能有兩個(gè)選擇,一個(gè)是Google地圖,一個(gè)是百度地圖,使用百度地圖寫(xiě)好的接口,直接進(jìn)行二次開(kāi)發(fā)使用就可以了[10]。

3.5 性能需求

手機(jī)軟件要有良好的用戶體驗(yàn),良好的用戶體驗(yàn)體現(xiàn)在以下幾個(gè)方面:

(1) 界面友好

用戶界面要簡(jiǎn)潔直觀,設(shè)計(jì)合理,方便用戶操作,讓用戶操作起來(lái)比較舒服,并且UI視覺(jué)效應(yīng)好。

(2) 快速響應(yīng)

快速處理用戶的輸入或請(qǐng)求,對(duì)于需要長(zhǎng)時(shí)間處理的部分就會(huì)對(duì)用戶進(jìn)行友好提示,告知用戶該操作正在運(yùn)行,或者使用進(jìn)度條,讓用戶進(jìn)行等待。

  1. 有好提示

當(dāng)一些操作無(wú)法在進(jìn)行下去的時(shí)候,就會(huì)進(jìn)行相關(guān)提示。

(4) 屏幕適配

適合多個(gè)版本以及不同分辨率的屏幕。

3.6 安全需求

Android所設(shè)計(jì)的應(yīng)用,在默認(rèn)情況下,是沒(méi)有權(quán)限對(duì)其他應(yīng)用程序、操作系統(tǒng)或者用戶進(jìn)行有害操作。例如連接網(wǎng)絡(luò)、訪問(wèn)通訊錄、訪問(wèn)短信和通話記錄、讀取用戶的一些隱私數(shù)據(jù),還有保持設(shè)備活動(dòng)等等的操作。在開(kāi)發(fā)過(guò)程中,必須在清單文件的代碼中聲明這些權(quán)限,如果沒(méi)有進(jìn)行這不操作,應(yīng)用在運(yùn)行過(guò)程中執(zhí)行需要權(quán)限才可以執(zhí)行的操作時(shí),就會(huì)直接崩掉[8]。即使授予了權(quán)限,在應(yīng)用執(zhí)行需要權(quán)限的操作時(shí),Android系統(tǒng)本身也會(huì)友好提示應(yīng)用正在執(zhí)行某操作,詢問(wèn)是否允許。

3.7 軟件環(huán)境

操作系統(tǒng):Android1.5以上;

數(shù)據(jù)庫(kù):SQLite;

開(kāi)發(fā)工具:Android ADT,DDMS,Eclipse

4 概要設(shè)計(jì)

4.1 系統(tǒng)總體設(shè)計(jì)

4.1.1 系統(tǒng)架構(gòu)設(shè)計(jì)

本系統(tǒng)設(shè)計(jì)的基于Android的太原市景點(diǎn)推薦系統(tǒng),主要包括微記模塊、搜索模塊、主界面、內(nèi)容模塊以及導(dǎo)航模塊等。如圖4.1:

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖4.1 系統(tǒng)結(jié)構(gòu)圖

4.1.2 系統(tǒng)結(jié)構(gòu)

  1. 初始化界面主要用于向用戶展示粗略的景點(diǎn)信息,包括跳轉(zhuǎn)微記按鈕、景點(diǎn)搜索框、景點(diǎn)圖片的輪顯、已經(jīng)景點(diǎn)信息列表等。如圖4.2:

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖 4.2 用戶界面結(jié)構(gòu)圖

  1. 搜索界面主要用于用戶快捷搜索指定的景點(diǎn),然后查看景點(diǎn)信息,結(jié)構(gòu)如圖4.3所示。搜索框在不為空的情況下(也就是輸入內(nèi)容之后),可以進(jìn)行清空;點(diǎn)擊搜索按鈕,列表界面會(huì)顯示搜索內(nèi)容的列表;默認(rèn)情況下列表內(nèi)容是顯示搜索記錄列表,而且還帶有清空歷史記錄按鈕,使功能更加人性化。

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖 4.3 搜索界面結(jié)構(gòu)圖

  1. 寫(xiě)微記界面結(jié)構(gòu)如圖4.4所示,主要是顯示微記的列表,其中的操作按鈕還有以下功能,如圖4.5所示,點(diǎn)擊寫(xiě)微記,就會(huì)進(jìn)入微記界面,點(diǎn)擊刪除,就會(huì)進(jìn)入刪除微記界面,可以批量刪除。

基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

圖 4.4 微記界面結(jié)構(gòu)圖
(4)微記界面有一個(gè)大的區(qū)域,還有一個(gè)分享按鈕,可以通過(guò)選擇分享到QQ還是分享到朋友圈;再有就是一個(gè)選擇背景顏色的dialog彈框,可以更換背景顏色。完之后,點(diǎn)擊手機(jī)的返回鍵即可自動(dòng)保存操作。
(5)景點(diǎn)信息界面主要是從八個(gè)方面展示一個(gè)景點(diǎn)大部分系信息,如圖4.6,有名稱、介紹、類型、建議游玩時(shí)間、門(mén)票價(jià)格、開(kāi)放時(shí)間以及地址。景點(diǎn)介紹只在界面展示了一部分,點(diǎn)擊詳細(xì)信息按鈕,可以彈出對(duì)話框展示全部的景點(diǎn)介紹。為了方便快速瀏覽其他景點(diǎn),就添加了兩個(gè)按鈕“上一個(gè)”和“下一個(gè)”;而且還有導(dǎo)航按鈕,可以進(jìn)入地圖,實(shí)現(xiàn)導(dǎo)航。

圖 4.5 微記界面操作按鈕結(jié)構(gòu)圖

圖 4.6 景點(diǎn)信息界面結(jié)構(gòu)圖
4.2 系統(tǒng)接口設(shè)計(jì)
現(xiàn)在的Android開(kāi)發(fā)者越來(lái)越多,很多Android系統(tǒng)的應(yīng)用程序也都需要進(jìn)行地圖開(kāi)發(fā),使用定位、導(dǎo)航等功能。國(guó)內(nèi)開(kāi)發(fā)者大多數(shù)使用百度地圖API進(jìn)行地圖開(kāi)發(fā),這是百度免費(fèi)提供給開(kāi)發(fā)者的接口。提供基本地圖展現(xiàn)、搜索、定位、逆/地理編碼、路線規(guī)劃、LBS云存儲(chǔ)與檢索等功能,適用于PC端、移動(dòng)端、服務(wù)器等多種設(shè)備,多種操作系統(tǒng)下的地圖應(yīng)用開(kāi)發(fā)。
4.3 數(shù)據(jù)存儲(chǔ)設(shè)計(jì)
Android系統(tǒng)的數(shù)據(jù)存儲(chǔ)方式主要有四種,分別是:SharedPreference、SQLite、ContentProvider以及文件存儲(chǔ)[9]。在本系統(tǒng)中,綜合運(yùn)用了多種存儲(chǔ)方式,從而達(dá)到數(shù)據(jù)及時(shí)高效地保存共享。
4.3.1 ContentProvider存儲(chǔ)
Content Provider,即內(nèi)容提供商或者內(nèi)容提供器。
在Android中,ContentProvider是一種數(shù)據(jù)包裝器,適合在不同進(jìn)程間實(shí)現(xiàn)信息的共享。例如,我們可以用ContentProvider來(lái)封裝以SQLite作為的數(shù)據(jù)源,這樣就可以很好的為其他應(yīng)用提供信息共享服務(wù)。其他應(yīng)用在訪問(wèn)ContentProvider時(shí),可以使用一組類似REST的URI的方式進(jìn)行數(shù)據(jù)操作,大大簡(jiǎn)化了讀寫(xiě)信息的復(fù)雜度。例如,如果要從封裝圖書(shū)數(shù)據(jù)庫(kù)的ContentProvider獲取一組圖書(shū),需要使用類似以下形式的URI:content://com.scott.book.BookProvider/books而要從圖書(shū)數(shù)據(jù)庫(kù)中獲取指定圖書(shū)(比如23號(hào)圖書(shū)),需要使用類似以下形式的URI:content://com.scott.book.BookProvider/books/23。
ContentProvider是一個(gè)抽象類,定義了一系列操作數(shù)據(jù)的方法模板,BookProvider需要實(shí)現(xiàn)這些方法,實(shí)現(xiàn)圖書(shū)信息的各種操作。
現(xiàn)在知道了具體的URI之后,我們又如何操作進(jìn)而取得數(shù)據(jù)呢?此時(shí),我們就要了解ContentResolver這個(gè)類,它跟ContentProvider是對(duì)應(yīng)的關(guān)系,我們正是通過(guò)它來(lái)與ContentProvider進(jìn)行數(shù)據(jù)交換的。android.content.Context類為我們定義了getContentResolver()方法,用于獲取一個(gè)ContentResolver對(duì)象,如果我們?cè)谶\(yùn)行期可以通過(guò)
getContext()獲取當(dāng)前Context實(shí)例對(duì)象,可以通過(guò)這個(gè)實(shí)例對(duì)象所提供的getContentResolver()方法獲取到ContentResolver類型的實(shí)例對(duì)象,進(jìn)而可以操作對(duì)應(yīng)的數(shù)據(jù)。
ContentProvider對(duì)于Android應(yīng)用而言,組件必須相互獨(dú)立,如果這些Android應(yīng)用之間需要實(shí)現(xiàn)實(shí)時(shí)的數(shù)據(jù)交換。例如我們開(kāi)發(fā)里一個(gè)發(fā)送短信的程序,當(dāng)發(fā)送短信時(shí)需要從聯(lián)系人管理應(yīng)用中讀取指定聯(lián)系人的數(shù)據(jù)—-這就需要多個(gè)應(yīng)用程序之間進(jìn)行實(shí)時(shí)的數(shù)據(jù)交換。
4.3.2 SQLite數(shù)據(jù)庫(kù)存儲(chǔ)
在Android開(kāi)發(fā)項(xiàng)目中生成的SQLite數(shù)據(jù)庫(kù)會(huì)保存在各自的應(yīng)用程序目錄下,例如/data/data/<package name>/databases[14] 。應(yīng)用程序生成的數(shù)據(jù)庫(kù)文件是私有的,只有創(chuàng)建這個(gè)數(shù)據(jù)庫(kù)的應(yīng)用程序可以訪問(wèn),進(jìn)行增刪改差[15]。如果需要在其他應(yīng)用程序中訪問(wèn),就需要使用ContentProvider。
5 詳細(xì)設(shè)計(jì)
5.1 界面設(shè)計(jì)
Android系統(tǒng)定義了4個(gè)重要的組件,分別是Activity、Intent、ContentProvider以及BroadcastReciver[6]。
Activity是Android應(yīng)用中負(fù)責(zé)與用戶交互的組件——大致上把它想象成Swing編程中的JFrame控件。不過(guò)它與JFrame的區(qū)別在于:JFrame本身可以設(shè)置布局管理器,不斷地向JFrame中添加組件,但Activity只能通過(guò)setContentView(View)來(lái)顯示指定組件。
太原市景點(diǎn)推薦系統(tǒng)的界面由Android Activity構(gòu)成,通過(guò)Intent、Servcie 和ContentProvider完成與Android系統(tǒng)框架的交互。
5.1.1 主界面設(shè)計(jì)
系統(tǒng)啟動(dòng)后進(jìn)入SplashAcitivty設(shè)計(jì)的界面,只顯示一張圖片,兩秒后會(huì)自動(dòng)跳轉(zhuǎn)到主界面,如圖 5.1 所示。在這個(gè)界面主要包括三部分:自定義標(biāo)題欄、圖片輪顯以及景點(diǎn)列表。主界面被設(shè)計(jì)成MainActivity類,首先要設(shè)計(jì)自定義標(biāo)題欄就要把原有的標(biāo)題欄取消掉,在代碼中的setContentView()方法前面加上requestWindowFeature(Window.FEATURE_NO_TITLE);這樣就可以設(shè)置無(wú)標(biāo)題模式,然后根據(jù)自己的需要進(jìn)行標(biāo)題欄布局。
圖片輪顯是通過(guò)ViewPager來(lái)實(shí)現(xiàn)的,找?guī)讖埞潭▓D片資源,加載到ViewPager控件中,然后通過(guò)scheduleAtFixedRate()方法控制執(zhí)行頻率,調(diào)用線程每3秒切換一次圖片。
ListView是列表形式,景點(diǎn)列表就是通過(guò)這個(gè)控件來(lái)顯示的,列表的每一條稱為一個(gè)item,每一個(gè)item都顯示了一張圖片,已經(jīng)景點(diǎn)名稱和簡(jiǎn)略的景點(diǎn)介紹。布局采用的是相對(duì)布局RelativeLayout,顯示圖片用的是ImageView控件,將圖片放在res/drawable目錄下,通過(guò)TextView顯示兩條文字信息,而且設(shè)置android:maxLines=”2″屬性來(lái)控制最大顯示兩行。

圖5.1 主界面 圖5.2搜索記錄界面
5.1.2 搜索界面設(shè)計(jì)
搜索界面設(shè)計(jì)成SearchAcitivty類,界面主要顯示一個(gè)搜索框,搜索按鈕,以及標(biāo)題欄下方的列表。標(biāo)題欄下方的列表有兩個(gè)ListView,但是這兩個(gè)ListView不會(huì)同時(shí)顯示,進(jìn)入搜索界面主要顯示的搜索記錄列表,根據(jù)輸入框內(nèi)容搜索到的相應(yīng)景點(diǎn)的列表,只有在點(diǎn)擊搜索按鈕之后才會(huì)出現(xiàn),如圖5.2所示,實(shí)現(xiàn)這個(gè)效果所用的方法是setVisibility(int visibility)。所傳值為View.VISIBLE或者View.GON;顧名思義,gone是隱藏,visible是顯示,根據(jù)邏輯判斷來(lái)決定是顯示還是隱藏。
因?yàn)椴樵償?shù)據(jù)庫(kù)比較耗時(shí),為了方便搜索,將所有景點(diǎn)的名稱都寫(xiě)在了JingdianName類中的String類型的names數(shù)組中。查詢式只需要先和names數(shù)組中的值匹配。如5.3所示,輸入“迎澤”,點(diǎn)擊搜索之后,會(huì)出現(xiàn)兩個(gè)值,這是通過(guò)for循環(huán)遍歷names數(shù)組,挨個(gè)調(diào)用contains()方法,判斷是否包含輸入的字符,然后把所有滿足條件的值都取出來(lái),然后放到list集合中,最后添加到ListView進(jìn)行顯示,如果沒(méi)有搜索到相應(yīng)的景點(diǎn),會(huì)通過(guò)Toast提示“沒(méi)有該景點(diǎn)”。而且點(diǎn)擊搜索按鈕之后,會(huì)將輸入的值存入數(shù)據(jù)庫(kù)的表history中。最后會(huì)顯示在歷史記錄的ListView中。當(dāng)點(diǎn)擊清除歷史記錄按鈕的時(shí)候,會(huì)調(diào)用db.execSQL(“delete from ” + Contance.HISTORY_TABLENAME),來(lái)刪除表數(shù)據(jù),但是不會(huì)刪除表結(jié)構(gòu),這樣只清空數(shù)據(jù),之后還可以繼續(xù)保存。


圖 5.3 搜索內(nèi)容界面 圖5.4 景點(diǎn)信息界面
不管是歷史記錄列表,還是搜索內(nèi)容列表,點(diǎn)擊條目,會(huì)調(diào)用equals(),對(duì)names進(jìn)行判斷,查詢是否有一樣的值,如果沒(méi)有,就會(huì)提示沒(méi)有該景點(diǎn),如果有的話,就會(huì)查詢數(shù)據(jù)庫(kù),跳轉(zhuǎn)到相應(yīng)的景點(diǎn)信息界面。
5.1.3 景點(diǎn)信息界面設(shè)計(jì)
景點(diǎn)信息界面設(shè)計(jì)成了SingleActivity,如圖5.4所示,景點(diǎn)信息界面8個(gè)字段名稱對(duì)景點(diǎn)進(jìn)行介紹,通過(guò)點(diǎn)擊返回按鈕,會(huì)返回到主界面,點(diǎn)擊按鈕“上一個(gè)”和“下一個(gè)”會(huì)切換到相應(yīng)的景點(diǎn),順序和主界面的景點(diǎn)列表的景點(diǎn)排列順序是一致的。當(dāng)?shù)竭_(dá)第一個(gè)或者最后一個(gè)景點(diǎn)的時(shí)候,分別判斷id==1和id==JingdianName.names.
length是否成立,然后提示“已經(jīng)是第一個(gè)景點(diǎn)了”和“已經(jīng)是最后一個(gè)景點(diǎn)了”。由于景點(diǎn)介紹內(nèi)容比較多,如果全部羅列出來(lái)就會(huì)使界面有點(diǎn)長(zhǎng),所以設(shè)置景點(diǎn)信息的屬性android:maxLines=”4″,即最大行數(shù)為4,android:ellipsize=”end”屬性是設(shè)置超出的部分顯示省略號(hào),“end”值是將省略號(hào)顯示在結(jié)尾。在此添加了“[詳細(xì)介紹]”,點(diǎn)擊之后會(huì)顯示如圖5.5所示的內(nèi)容:


圖 5.5 景點(diǎn)介紹詳細(xì)信息
這是一個(gè)自定義對(duì)話框AlertDialog。首先自定義一個(gè)布局,然后通過(guò)下列代碼將這個(gè)view填充到dialog中:
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 獲得layout的填充器
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.content_dialog, null);
builder.setView(view);
右上角有個(gè)圖片按鈕,點(diǎn)擊的時(shí)候,就會(huì)調(diào)用dialog.dismiss()方法,關(guān)閉對(duì)話框。“上一個(gè)”和“下一個(gè)”按鈕,判斷點(diǎn)擊按鈕的id,當(dāng)點(diǎn)擊上一個(gè)按鈕的時(shí)候,就會(huì)傳值-1,當(dāng)點(diǎn)擊下一個(gè)按鈕的時(shí)候,就會(huì)傳值1,然后將當(dāng)前景點(diǎn)的id和傳入的值進(jìn)行運(yùn)算,得到新的id,然后查詢數(shù)據(jù)庫(kù),刷新界面的值,由于刷新UI容易造成阻塞,所以通過(guò)Handler進(jìn)行實(shí)現(xiàn),
Handler主要用于異步消息的處理:當(dāng)發(fā)出一個(gè)消息之后,首先進(jìn)入一個(gè)消息隊(duì)列,發(fā)送消息的函數(shù)即刻返回,而另外一個(gè)部分在消息隊(duì)列中逐一將消息取出,然后對(duì)消息進(jìn)行處理,換一種說(shuō)法,發(fā)送消息和接收消息不是同步的處理。主線程中做耗時(shí)操作,會(huì)造成阻塞,非主線程中更新UI會(huì)報(bào)錯(cuò)。 一般處理相對(duì)耗時(shí)比較長(zhǎng)的操作,都用到了這種機(jī)制。
只要在需要執(zhí)行刷新操作時(shí),Message msg = new Message();得到一個(gè)Message,然后設(shè)置標(biāo)識(shí)符msg.what = 100;然后設(shè)置傳送的數(shù)據(jù)msg.obj = list;(要提前把查詢到的數(shù)據(jù)庫(kù)的各個(gè)字段信息放到list集合中),最后調(diào)用handler.sendMessage(msg);來(lái)發(fā)送數(shù)據(jù)。在外圍new一個(gè)handler,然后通過(guò)匹配標(biāo)識(shí)符,然后執(zhí)行setText()來(lái)重新設(shè)置顯示信息的值。
界面還有一個(gè)“到這去”的選項(xiàng),點(diǎn)擊這個(gè)就會(huì)跳轉(zhuǎn)到導(dǎo)航界面,進(jìn)行導(dǎo)航。
5.1.4 微記模塊設(shè)計(jì)


    1. 微記主界面設(shè)計(jì)成WeijiActivity,如圖5.6所示,主要是由微記列表和操作按鈕選項(xiàng)組成的。微記列表是用ListView控件顯示的,主要顯示內(nèi)容、日期和時(shí)間這三個(gè)內(nèi)容。當(dāng)點(diǎn)擊操作按鈕之后,會(huì)彈出如圖5.7所示的自定義dialog。

圖 5.6 微記界面 圖5.7 微記操作選項(xiàng)
dialog有三個(gè)選項(xiàng),分別是寫(xiě)微記、刪除和取消。對(duì)dialog視圖實(shí)現(xiàn)的步驟如下:
① 首先獲得視圖
② 指定dialog的主題風(fēng)格
③ 設(shè)置dialog的視圖view,并給定寬高
④ 調(diào)用getWindow(),表示獲得這個(gè)Activity的Window對(duì)象,這樣這可以以同樣的方式改變這個(gè)Activity的屬性.
⑤ 設(shè)置顯示動(dòng)畫(huà)
⑥ 保證按鈕水平滿屏
⑦ 設(shè)置顯示位置
⑧ 設(shè)置點(diǎn)擊外圍解散
這三個(gè)選項(xiàng)都是以按鈕控件實(shí)現(xiàn)的,背景和點(diǎn)擊效果需要設(shè)置按鈕的屬性android
:background=”@drawable/pop_dialog_cancel_selector”,只需要在res/drawable下寫(xiě)上相應(yīng)的xml文件。對(duì)于設(shè)置按鈕的圓角corners,設(shè)置各個(gè)角的radius為5dp即可。對(duì)于按鈕的按下pressed以及獲得焦點(diǎn)focused等的效果,需要用到selector背景選擇器進(jìn)行設(shè)置。
對(duì)于dialog的彈入彈出效果,需要用動(dòng)畫(huà)來(lái)實(shí)現(xiàn),只需要在res文件夾下創(chuàng)建anim文件夾,在其中寫(xiě)下相應(yīng)的xml文件,文件內(nèi)容如下:
<translate
android:duration=”500″
android:fromXDelta=”0″
android:fromYDelta=”1000″
android:toXDelta=”0″
android:toYDelta=”0″ />
Duration是設(shè)置延遲時(shí)間,意思是500ms之后執(zhí)行動(dòng)畫(huà),其他屬性是設(shè)置動(dòng)畫(huà)彈出的X軸和Y軸的起始位置。


    1. 單擊dialog的刪除按鈕,會(huì)進(jìn)入刪除微記界面。刪除微記界面是設(shè)計(jì)成了WeijiDeleteActivity。如圖5.8所示,界面主要是由列表和兩個(gè)按鈕組成的。列表的每一項(xiàng)都是由內(nèi)容和一個(gè)CheckBox組成的,CheckBox的初始狀態(tài)是默認(rèn)不選中的,只需要設(shè)置屬性android:isChecked=”false”.當(dāng)大量選中需要?jiǎng)h除的微記的時(shí)候,用isSelected是否被選中來(lái)將這些狀態(tài)都保存在了一個(gè)Map集合中,最后點(diǎn)擊確定按鈕的時(shí)候,傳遞這些選中的值,將微記顯示頁(yè)面的對(duì)應(yīng)的微記刪除掉。然后重新查詢數(shù)據(jù)并顯示新的列表。

圖 5.8 刪除微記界面


    1. 當(dāng)點(diǎn)擊寫(xiě)微記按鈕或者直接點(diǎn)擊微記,都會(huì)進(jìn)入微記界面。不過(guò)不同的是,點(diǎn)擊寫(xiě)微記,進(jìn)入的是空白的微記界面;當(dāng)直接點(diǎn)擊微記,會(huì)顯示如圖5.9所示的界面,原本內(nèi)容都會(huì)顯示在里面。微記界面被設(shè)計(jì)成了WeijiNoteActivity,主要顯示左上角的時(shí)間,以及分享按鈕、更換背景顏色按鈕,以及一個(gè)區(qū)域框。


圖 5.9 微記界面

? 左上角的時(shí)間是獲取的系統(tǒng)當(dāng)前時(shí)間,實(shí)現(xiàn)獲得日期的代碼內(nèi)容如下:

public static String getDate() {

Calendar c = Calendar.getInstance();

int theYear = c.get(Calendar.YEAR) – 1900;

int theMonth = c.get(Calendar.MONTH);

int theDay = c.get(Calendar.DAY_OF_MONTH);

return (new Date(theYear, theMonth, theDay)).toString();

}

獲得時(shí)間的代碼如下:

public static String getTime() {

Calendar c = Calendar.getInstance();

int theHour = c.get(Calendar.HOUR_OF_DAY);

int theMinute = c.get(Calendar.MINUTE);

int theSecond = c.get(Calendar.SECOND);

return (new Time(theHour, theMinute, theSecond)).toString();

}

( 點(diǎn)擊右上角的分享按鈕,會(huì)出現(xiàn)如圖5.10所示的樣子。

圖5.10 微記分享界面

實(shí)現(xiàn)這個(gè)功能不只需要如下幾行代碼即可:

private void shareNote() {

String strContent = et_content.getText().toString();

Intent intent = new Intent(Intent.ACTION_SEND);

intent.putExtra(Intent.EXTRA_TEXT, strContent);

intent.setType(“text/plain”);

this.startActivity(intent);

}

Intent是意圖,可以接受相應(yīng)意圖的程序,都可以調(diào)用。

? 右上角還有設(shè)置背景顏色的按鈕,點(diǎn)擊就會(huì)彈出五種顏色供選擇,背景不是直接設(shè)置顏色,而是由圖片構(gòu)成。對(duì)顏色選擇進(jìn)行監(jiān)聽(tīng),當(dāng)選取顏色的時(shí)候,首先獲得對(duì)應(yīng)顏色圖片的id,然后賦值給mBackgroud_color,最后調(diào)用setBackgroudResource

(mBackgroud_color)方法,設(shè)置背景顏色。

最后點(diǎn)擊返回鍵的時(shí)候,就會(huì)保存一切數(shù)據(jù),不過(guò)首先判斷是新建的微記,還是更新的微記。需要通過(guò)ContentValues保存的字段有內(nèi)容、日期、時(shí)間以及背景顏色四個(gè)值,微記通過(guò)ContentProvider保存的,訪問(wèn)ContentProvider程序通過(guò)ContentResolver接口可以訪問(wèn)ContentProvider共享的數(shù)據(jù),在Activity當(dāng)中通過(guò)getContentResolver()可以得到當(dāng)前應(yīng)用的 ContentResolver實(shí)例,最后通過(guò)調(diào)用ContentResolver的insert()方法,將保存的ContentValues中的數(shù)據(jù),通過(guò)匹配相應(yīng)的uri進(jìn)行保存更新。

5.1.5 定位導(dǎo)航模塊設(shè)計(jì)

為了滿足自駕游,開(kāi)發(fā)了定位導(dǎo)航模塊。定位界面主要設(shè)計(jì)成LocationActivity,當(dāng)從景點(diǎn)信息界面進(jìn)入到導(dǎo)航界面的時(shí)候,就會(huì)獲取當(dāng)前進(jìn)入時(shí)所在的景點(diǎn)名稱。例如,在汾河公園的信息界面,點(diǎn)擊按鈕“到這去”,就會(huì)進(jìn)入定位界面,首先是通過(guò)

putExtra(key,value)方法傳遞景點(diǎn)名稱,進(jìn)入導(dǎo)航界面的時(shí)候,自動(dòng)初始化Intent

Intent = getIntent();然后通過(guò)getStringExtra(key),匹配相應(yīng)的key值,這就是所謂的鍵值對(duì)。獲取到傳遞過(guò)來(lái)的景點(diǎn)名稱,通過(guò)setText()方法,自動(dòng)將終點(diǎn)景點(diǎn)設(shè)置成目的地。起點(diǎn)是獲取當(dāng)前的位置,如果不獲取當(dāng)前的位置,直接點(diǎn)擊導(dǎo)航,會(huì)通過(guò)equals()方法判斷起點(diǎn)的EditText是否空值,(所謂的空值是字符串長(zhǎng)度為空,而不是null,只有當(dāng)沒(méi)有初始化的時(shí)候,才會(huì)為空,否則只是長(zhǎng)度為空),如果為空的話,就會(huì)通過(guò)Toast提示“請(qǐng)先定位當(dāng)前位置”,如圖5.11所示。

圖 5.11 定位之前界面 圖5.12 定位之后界面

起點(diǎn)的EditText中已經(jīng)給了提示“點(diǎn)擊獲取我的位置”,這是通過(guò)設(shè)置hint現(xiàn)實(shí)的,而且設(shè)置屬性android:textColorHint=”#0000FF”設(shè)置顯示顏色為藍(lán)色。而且設(shè)置了起點(diǎn)和終點(diǎn)的EditText屬性android:focusable=”false”,也就是不能獲得焦點(diǎn),當(dāng)然也就不可以。然后只設(shè)置了onClickListener監(jiān)聽(tīng)事件對(duì)其進(jìn)行監(jiān)聽(tīng)。當(dāng)點(diǎn)擊的時(shí)候,就會(huì)調(diào)用定位代碼進(jìn)行定位。這個(gè)過(guò)程總共獲取三個(gè)值,一個(gè)是當(dāng)前地址addr,一個(gè)是經(jīng)度Longitude,還有一個(gè)是緯度Latitude。當(dāng)時(shí)只將當(dāng)前地址addr顯示在起點(diǎn)的EditText框中,結(jié)果如圖5.12所示。經(jīng)緯度保存起來(lái),用來(lái)傳遞到導(dǎo)航界面,進(jìn)行導(dǎo)航。

當(dāng)定位到當(dāng)前位置的時(shí)候,點(diǎn)擊開(kāi)始導(dǎo)航按鈕,就會(huì)進(jìn)入路線規(guī)劃界面。界面設(shè)計(jì)成RoutePlanActivity。起點(diǎn)是當(dāng)前位置,終點(diǎn)是景點(diǎn)名稱,進(jìn)入界面首先會(huì)自動(dòng)算路,通過(guò)設(shè)置算路結(jié)果監(jiān)聽(tīng)器IRouteResultObserver,可以獲取算路的結(jié)果,起點(diǎn)的經(jīng)緯度是定位界面定位之后,保存起來(lái),然后通過(guò)Intent傳遞到算路界面,終點(diǎn)的經(jīng)緯度是事先將45個(gè)景點(diǎn)經(jīng)緯度,分別寫(xiě)到double類型的數(shù)組longitude和latitude中。得到景點(diǎn)名稱,然后通過(guò)for循環(huán)遍歷存放景點(diǎn)名稱的names數(shù)組,得到所在位置的position,然后去除longitude和latitude相應(yīng)position的值,用來(lái)作為導(dǎo)航終點(diǎn)的經(jīng)緯度。

經(jīng)緯度是double類型的,要通過(guò)計(jì)算得到int類型的經(jīng)緯度,代碼如下:

sX = (int) (nowLatitude * 1e5);

sY = (int) (nowLongitude * 1e5);

eX = (int) (endLatitude * 1e5);

eY = (int) (endLongitude * 1e5);

得到起點(diǎn)和終點(diǎn)的地址和經(jīng)緯度之后,就可以進(jìn)行算路了:最后的算路結(jié)果如圖5.13所示。

圖5.13 算路界面 圖 5.14 導(dǎo)航過(guò)程

導(dǎo)航的語(yǔ)音播報(bào)是可以選擇的,可以選擇是否需要語(yǔ)音導(dǎo)航,只要加上libejTTS.so

就可以實(shí)現(xiàn)語(yǔ)音播放了。

算路成功后會(huì)獲得算路結(jié)果RoutePlanModel,然后即可以根據(jù)算路結(jié)果發(fā)起導(dǎo)航,導(dǎo)航方式分為模擬導(dǎo)航和真實(shí)GPS導(dǎo)航兩種。進(jìn)入到模擬導(dǎo)航或者GPS導(dǎo)航后,點(diǎn)擊轉(zhuǎn)向標(biāo)按鈕即可以切換到文字導(dǎo)航,在文字導(dǎo)航界面,可以切換到HUD模式。選擇模擬導(dǎo)航,會(huì)自動(dòng)播放一遍導(dǎo)航過(guò)程,語(yǔ)音播報(bào)方向、距離、路況、減速限速等。

導(dǎo)航過(guò)程如圖5.14所示。

5.1.6 返回鍵的監(jiān)聽(tīng)

Android手機(jī)一般都自帶三個(gè)操作鍵,分別是Back鍵、Home鍵以及Menu鍵。這些鍵都是為了方便用戶操作手機(jī)。每個(gè)應(yīng)用程序想要用戶在程序界面點(diǎn)擊這些操作鍵達(dá)到預(yù)期的效果,都需要進(jìn)行監(jiān)聽(tīng)。Home鍵和Menu鍵可以不設(shè)置,但是絕大多數(shù)Back鍵都設(shè)置,應(yīng)為Back對(duì)于應(yīng)用程序多頁(yè)面之間的邏輯切換起到了至關(guān)重要的作用。點(diǎn)擊返回鍵的之后,需要返回到哪個(gè)界面,當(dāng)前界面是否finish()掉,執(zhí)行什么操作,都是需要對(duì)返回鍵進(jìn)行監(jiān)聽(tīng),在相應(yīng)的重寫(xiě)方法中執(zhí)行所需代碼。

直接獲取按鈕按下事件,此方法兼容Android 1.0到Android 2.1 也是常規(guī)方法,直接重寫(xiě)Activity的onKeyDown方法即可。

本系統(tǒng)中用到了連續(xù)按下兩次返回鍵退出程序的方法。只需要判斷是按下的返回鍵,然后進(jìn)行“再按一次退出程序”提示,監(jiān)聽(tīng)是否在2秒內(nèi)又一次按下返回鍵,如果是就會(huì)執(zhí)行System.exit(0)退出程序。代碼如下:

private long exitTime = 0; // 返回鍵退出的時(shí)間

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK

&& event.getAction() == KeyEvent.ACTION_DOWN) {

if ((System.currentTimeMillis() – exitTime) > 2000) {

Toast.makeText(getApplicationContext(),”再按一次退出程序”,Toast.LENGTH_SHORT).show();

exitTime = System.currentTimeMillis();

} else {

finish();

System.exit(0);

}

return true;

}

return super.onKeyDown(keyCode, event);

}

而對(duì)于Android 2.0開(kāi)始又多出了一種新的方法,對(duì)于Activity 可以單獨(dú)獲取Back鍵的按下事件,直接重寫(xiě)onBackPressed方法即可。

5.2 數(shù)據(jù)庫(kù)設(shè)計(jì)

本系統(tǒng)的數(shù)據(jù)庫(kù)中用到的表主要是存放景點(diǎn)信息的表jingdian、存放搜索歷史記錄的表history以及存放微記內(nèi)容的表noteitems。

5.2.1 景點(diǎn)信息表jingdian

景點(diǎn)信息表jingdian的表結(jié)構(gòu)如表5.1所示,加上id總共有9個(gè)字段,id是用來(lái)查詢的,其他8個(gè)字段是用來(lái)存放需要顯示的數(shù)據(jù)庫(kù)。

表 5.1 景點(diǎn)信息表

Jingdian表是事先生成了“jingdian_db”數(shù)據(jù)庫(kù)中,說(shuō)明這個(gè)一個(gè)外部資源文件。Android要使用外部資源文件一般有兩種方法,分別是:

  1. 第一種是res目錄下存放的可編譯的資源文件:
    這種資源文件系統(tǒng)會(huì)在R.java里面自動(dòng)生成該資源文件的ID,所以訪問(wèn)這種資源文件比較簡(jiǎn)單,通過(guò)R.XXX.ID即可;

  2. 第二種是assets目錄下存放的原生資源文件:

因?yàn)橄到y(tǒng)在編譯的時(shí)候不會(huì)編譯assets下的資源文件,所以我們不能通R.XXX.ID的方式訪問(wèn)它們。我們不能通過(guò)該資源的絕對(duì)路徑去訪問(wèn)它們,因?yàn)閍pk安裝之后會(huì)放在/data/app/**.apk目錄下,以apk形式存在,asset/res和被綁定在apk里,并不會(huì)解壓到/data/data/YourApp目錄下去,所以我們無(wú)法直接獲取到assets的絕對(duì)路徑,因?yàn)樗鼈兏揪蜎](méi)有。

不過(guò)Android系統(tǒng)提供了一個(gè)AssetManager工具類,它提供對(duì)應(yīng)用程序的原始資源文件進(jìn)行訪問(wèn);這個(gè)類提供了一個(gè)低級(jí)別的API,它允許以簡(jiǎn)單的字節(jié)流的形式打開(kāi)和讀取和應(yīng)用程序綁定在一起的原始資源文件。通過(guò)getAssets()方法獲取AssetManager對(duì)象。

我們首先要做的是把數(shù)據(jù)庫(kù)文件“jingdian_db”復(fù)制到代碼工程的assets文件夾下,assets文件夾里面的文件都是保持原始的文件格式,需要用AssetManager以字節(jié)流的形式讀取文件。

  1. 先在Activity里面調(diào)用getAssets()來(lái)獲取AssetManager引用。

(2) 再用AssetManager的open(String fileName)方法則指定讀取的文件以及訪問(wèn)模式就能得到輸入流InputStream。

(3) 然后就是用已經(jīng)open file 的inputStream讀取文件,讀取完成后記得inputStream.close()?。

(4) 調(diào)用AssetManager.close()關(guān)閉AssetManager。

這種形式的導(dǎo)入之后,打開(kāi)數(shù)據(jù)庫(kù)的方式也不一樣,不是SQLiteDatabase db = getWritableDatabase()/getReadableDatabase();而是SQLiteDatabase sqLite = SQLiteData

base.openOrCreateDatabase(data/data/包名/files/數(shù)據(jù)庫(kù)名稱, null);隨后就可以其他方式

一樣讀取數(shù)據(jù)庫(kù)了。

5.2.2 搜索記錄表history

搜索記錄表history很簡(jiǎn)單,只有兩個(gè)字段,一個(gè)是_id,一個(gè)是h_name字段,只需要在第一次搜索的時(shí)候創(chuàng)建數(shù)據(jù)庫(kù),并建立history表,之后每次清空搜索記錄的時(shí)候,只刪除表數(shù)據(jù),不刪除表結(jié)構(gòu),就不用在創(chuàng)建數(shù)據(jù)庫(kù)了。

public static final String HISTORY_TABLENAME = “history”;

public static final String CREAT_HISTORY = “create table ” + HISTORY_TABLENAME+ “(_id integer primary key autoincrement, h_name text not null)”;

db.execSQL(Contance.CREAT_HISTORY);

表結(jié)構(gòu)如表5.2所示:

表 5.2 搜索記錄表

5.2.3?微記內(nèi)容表?noteitems

微記內(nèi)容表noteitems有5個(gè)字段,創(chuàng)建語(yǔ)句如下:

String sql_noteitems = “CREATE TABLE ” + TABLE_NOTEITEMS + ” (“

+ NoteItems._ID + ” INTEGER PRIMARY KEY AUTOINCREMENT ,”

+ NoteItems.CONTENT + ” TEXT,” + NoteItems.UPDATE_DATE

+ ” TEXT,” + NoteItems.UPDATE_TIME + ” TEXT,”

+ NoteItems.BACKGROUND_COLOR + ” INTEGER,”

+ ” INTEGER” + “);”;

db.execSQL(sql_noteitems);

表結(jié)構(gòu)如表5.3所示:

表 5.3 微記內(nèi)容表


6 測(cè)試

6.1 主界面加載問(wèn)題

主界面的景點(diǎn)信息列表是以圖片+文字的形式展示的,圖片存放在res/drawable目錄下,進(jìn)入主界面的時(shí)候,ListView需要填充數(shù)據(jù)并顯示,這是就要加載文字和圖片資源。加載文字并沒(méi)有什么,但是由于圖片有將近50張,每一張圖片有100kb左右。一次性加載大量資源是會(huì)耗時(shí)的,有時(shí)會(huì)加載不成功,即使加載成功了,滑動(dòng)起來(lái)會(huì)非常的不流暢,有時(shí)候直接造成ANR(系統(tǒng)無(wú)響應(yīng):應(yīng)用一般在5s后還是沒(méi)有反應(yīng),就會(huì)抱著個(gè)錯(cuò),然后程序會(huì)自動(dòng)退出)。通過(guò)Log信息查看錯(cuò)誤信息,報(bào)的錯(cuò)誤是OOM(out of memory:內(nèi)存溢出,也就是所謂的內(nèi)存耗盡)。

這時(shí)的就用到了“二次裁剪”。顧名思義,二次裁剪就是對(duì)圖片進(jìn)行加工,是圖片占用的內(nèi)存更小。

Bitmap是Android系統(tǒng)中圖像處理的最重要類之一。用它可以獲取圖像文件信息,進(jìn)行圖像剪切、旋轉(zhuǎn)、縮放等操作,并可以指定格式保存圖像文件。利用Bitmap-

Factory可以從一個(gè)指定文件中,利用decodeFile()解出Bitmap;也可以定義的圖片資源中,利用decodeResource()解出Bitmap。在使用方法decodeFile()/decodeResource()時(shí),都可以指定一個(gè)BitmapFacotry.Options。利用Options的下列屬性,可以指定

decode的選項(xiàng):

  1. inPreferredConfig 指定decode到內(nèi)存中,手機(jī)中所采用的編碼,可選值定義

在Bitmap.Config中。缺省值是ARGB_8888。

(2) inJustDecodeBounds 如果設(shè)置為true,并不會(huì)把圖像的數(shù)據(jù)完全解碼,即

decodeXyz()返回值為null,但是Options的outAbc中解出了圖像的基本信息。

(3) inSampleSize 設(shè)置decode時(shí)的縮放比例。

先設(shè)置inJustDecodeBounds= true,調(diào)用decodeFile()得到圖像的基本信息;利用圖像的寬度(或者高度,或綜合)以及目標(biāo)的寬度,得到inSampleSize值,再設(shè)置inJustDecodeBounds= false,調(diào)用decodeFile()得到完整的圖像數(shù)據(jù)。先獲取比例,再讀入數(shù)據(jù),如果欲讀入大比例縮小的圖,將顯著的節(jié)約內(nèi)容資源。有時(shí)候還會(huì)讀入大量的縮略圖,這效果就更明顯了。

具體步驟如下:

① 給定BitmapFactory設(shè)置解碼的參數(shù)

② 從解碼器中獲取原始圖片的高度,這樣就避免了直接申請(qǐng)內(nèi)存控件

③ inJustDecodeBounds如果設(shè)置為true,并不會(huì)把圖像的數(shù)據(jù)完全解碼,亦即decodeXyz()返回值為null,

④ 但是Options的outAbc中解出了圖像的基本信息。

⑤ 設(shè)置屬性inSampleSize,值表示縮略圖大小為原始圖片大小的幾分之一

⑥ 壓縮完后便可以將inJustDecodeBounds設(shè)置為false了

6.2 景點(diǎn)信息界面dialog顯示問(wèn)題

景點(diǎn)信息界面的景點(diǎn)介紹是通過(guò)dialog顯示,由于內(nèi)容多的時(shí)候,dialog也無(wú)法一次性顯示這么多內(nèi)容,所以需要加上滾動(dòng)條ScrollView,否則下方的內(nèi)容不顯示。由于設(shè)置屬性不當(dāng),但只最下方的一行沒(méi)有顯示出來(lái),也就是無(wú)法滾動(dòng)到最低端,

原因是在TextView中設(shè)置了Android?:layout_marginTop=”20dp”,導(dǎo)致marginTop之后,scrollView初始顯示的位置向下移動(dòng)了20dp,為了讓它正常顯示,最后在代碼里面設(shè)置一下scrollView的初始顯示位置就可以了。

7 結(jié)論

未來(lái)的社會(huì)越來(lái)越智能化以及信息化,新技術(shù)越來(lái)越多,手機(jī)終端已經(jīng)成了信息化和智能化的載體。

基于Android的太原市景點(diǎn)推薦系統(tǒng)是為了滿足對(duì)太原市旅游景點(diǎn)信息的空間信息的直觀表示的需求,整合了太原市景點(diǎn)的資源,根據(jù)客戶需求的功能進(jìn)行了詳細(xì)的設(shè)計(jì)與是實(shí)現(xiàn)。本文為了方便游客分享出行新的,增加了微記模塊并且實(shí)現(xiàn)了分享功能;為了方便旅客出行,增加了導(dǎo)航模塊,快速定位當(dāng)前位置,并規(guī)劃合理路線進(jìn)行目的地的導(dǎo)航。

基于Android的太原市景點(diǎn)推薦系統(tǒng)只是一個(gè)初具模型的應(yīng)用,創(chuàng)新程度以及技術(shù)能力有限。后期發(fā)展可以繼續(xù)優(yōu)化界面功能,以及一些算法。為了增強(qiáng)互動(dòng)性,增加用戶登錄功能,使用服務(wù)器交互數(shù)據(jù),用更多的圖片來(lái)展示景點(diǎn)的風(fēng)貌。地圖方面不斷的完善,進(jìn)行定點(diǎn)查詢,更加精準(zhǔn)的定位以及導(dǎo)航。為了適應(yīng)更多的平臺(tái),進(jìn)行IOS斷開(kāi)發(fā),以及網(wǎng)頁(yè)端的開(kāi)發(fā)。最后加上景點(diǎn)周圍的美食、酒店等資源,使本系統(tǒng)更加貼近生活,功能更加完善,平臺(tái)更加廣泛,方便大家的旅游生活,增加旅游樂(lè)趣。

參考文獻(xiàn)

[1] 崔玥.蓉城旅游管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].四川:電子科技大學(xué),2013.

[2] 陳德武,魏新建,王萬(wàn)里.基于安卓的西北地區(qū)旅游信息查詢系統(tǒng)[J].中國(guó)石油勘探開(kāi)發(fā)研究院西北分院地球物理研究所,2014,(01):74.

[3] 孫國(guó)平.基于Android的景區(qū)景點(diǎn)路線推薦服務(wù)研究[J].沈陽(yáng)市勘察測(cè)繪研究院,2014,(04):72.

[4] 吳曉紅.基于Android的旅游景區(qū)自助導(dǎo)游系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].新疆大學(xué)信息科學(xué)與工程學(xué)院,2013,(28):61.

[5] 廖克書(shū),胡濤,羅鋒.基于Android的恩施大峽谷移動(dòng)旅游景點(diǎn)綜合系統(tǒng)的應(yīng)用

研究[J].湖北民族學(xué)院信息工程學(xué)院,2013,(18):23-24.

[6] 夏飛陽(yáng).基于Android手機(jī)平臺(tái)的自助旅游系統(tǒng)的的設(shè)計(jì)與實(shí)現(xiàn)[D].廣東:華南理工大學(xué),2012.

[7] 侯風(fēng)波.基于Android系統(tǒng)的徐水旅游信息系統(tǒng)地實(shí)現(xiàn)[D].四川:電子科技大學(xué),2012.

[8] 賀全榮.暑期自助游手機(jī)來(lái)搞定[J].2012,(11):28.

[9] 郭霖.第一行代碼–Android[M].北京:人民郵電出版社,2014:2-3.

[10] Landscape Studies at Sutton Common(South Yorkshire),and Meare Village East(Somerset)[J].Journal of Archaeological Science,2001,28:365-375.

[11] 青島東合信息技術(shù)有限公司.Android程序設(shè)計(jì)[M].北京:電子工業(yè)出版社,2012.2:24-25,

187-193.

[12] 竇長(zhǎng)娥,劉仁義,劉南.基于 ArcIMS 的旅游地理信息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2006,25(3):160-164.

[13] Visval ingam.M.Visualization in GIS,Cartography and Visc Visualization in Geographical Information System.Edited by Hilary M.Hearnshaw&David J.Urwin.1994.P18-25.

[14]?sqlite.org/releaselog/3?SQLite Release 3.7.10 On 2012 January 16.

[15] 王倩, 基于 C/S 結(jié)構(gòu)的內(nèi)存數(shù)據(jù)庫(kù)研究與設(shè)計(jì)[D].東北大學(xué):東北大學(xué),2008.

致謝

首先要感謝指導(dǎo)教師劉海靜老師,對(duì)我的多次指導(dǎo)。我深深受益于老師的關(guān)心、愛(ài)護(hù)和諄諄教導(dǎo)。她作為老師,點(diǎn)撥迷津,讓人如沐春風(fēng),獲益匪淺。能在劉海靜老師的指導(dǎo)監(jiān)督下完成大學(xué)最后的任務(wù),我為自己感到慶幸。在此謹(jǐn)向老師表示我最誠(chéng)摯的敬意和感謝!

我還要感謝所有教導(dǎo)過(guò)我、關(guān)心過(guò)我的老師。我的班主任張麟華老師以及太原工業(yè)學(xué)院教育過(guò)我的老師們。你們?yōu)槲业膶W(xué)業(yè)傾注了大量心血,你們?yōu)槿藥煴淼娘L(fēng)范令我敬仰,嚴(yán)謹(jǐn)治學(xué)的態(tài)度令我敬佩。

在此要感謝太原工業(yè)學(xué)院,給了我一個(gè)寬闊的學(xué)習(xí)平臺(tái),讓我不斷吸取新知,充實(shí)自己。

最后需要特別感謝的是我的父母。父母的養(yǎng)育之恩無(wú)以為報(bào),他們是我十多年求學(xué)路上的堅(jiān)強(qiáng)后盾,在我面臨人生選擇的迷茫之際,為我排憂解難,他們對(duì)我無(wú)私的愛(ài)與照顧是我不斷前進(jìn)的動(dòng)力。

謝謝大家。


基于Android的太原市景點(diǎn)推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
邹平县| 英超| 新宾| 股票| 绥中县| 巫山县| 南宁市| 南江县| 余庆县| 青海省| 交城县| 麟游县| 南乐县| 洱源县| 抚州市| 怀仁县| 宁河县| 宜君县| 饶平县| 闽清县| 和龙市| 澎湖县| 维西| 平泉县| 三亚市| 辛集市| 体育| 东方市| 襄城县| 张家界市| 浏阳市| 邢台县| 东乡| 米林县| 子洲县| 五莲县| 霞浦县| 富锦市| 达日县| 类乌齐县| 宜宾市|