知識社群登入
[Android課程行動加值應用]—行動領隊管理系統-艾鍗學院
by 艾鍗學院, 2012-01-17 18:23, 人氣(4952)
艾鍗學院Android產訓專班成果發表
第5組: Android領隊管理系統
Version: 1.0A
Release Date: December 05h 2011

開發組員

戴天來

張芷瑜

蘇盈盈

鄭中倫

指導老師: Jarey

開發時程

課程學習訓練:

Java程式設計-30小時 + Android應用程式開發-45小時

實作開發時間:

3週半(含專題規劃討論與文件撰寫)












領隊管理系統主要的目的在解決團體出遊時,領隊難以完整的掌控所有隊員的行踨,同時也很難以控制每個行程的時間與行程。在團體出遊時最常遇到的問題不外呼是集合與點名,還有行程時間的控制,像是集合時間到了還沒看到人,或是到了一個旅遊景點所有的團員一下子就都走散了,有些人可能會走失了,或是忘了集合的地點。在傳統的做法領隊必須要透過手機針對走丟的團員進行電話連絡,了解目前團員的狀態。另外在開放自由活動時又得要不斷重覆的叮寧集合時間與地點,更大一點的團可能還需要動用許多的服務人員在每個重要的路口一一的引導你的團員。
無論今天是旅行社在帶團活動,或是自行車隊出遊、公司旅遊活動、小型家庭出遊,都會遇到上述的狀況與問題。因此本專題主要的目的是希望能透過結合Android 手機本身的GPS定位與網路能力,來分擔掉領隊的工作,透過APP可以輕鬆的發送點名的訊給所有的團員手機,團員也可以快速的透過手機來回覆是否己到達集合地點,領隊在也不用帶一大張的團名姓名與電話連絡清單,還可以同時即時的掌握所有團員目前的所在地點。同時團員在發生緊急狀況時也可以透過APP呼叫領隊過來處理,在旅遊的過程中更可以透過本APP即時的掌握了解各景點的旅遊資訊。
圖1-1: 系統應用圖

  • 領隊呼叫團員集合
  • 領隊點名
  • 領隊確認團員位置
  • 地圖導航尋找走失團員
  • 團員查找集合時間與地點資訊
  • 團員查找領隊位置
  • 團員發出SOS緊急求救訊息
  • 旅遊行程與景點資訊即時查看

圖2-1為本軟體架構圖,領隊與團員所使用的是同一隻APP軟體,使用電話號碼做為登入的帳號,登入系統後會自動判別是領隊或是團員並自動依照權限給予不同的操作介面。由於軟體必須持續的與Server保持連線,因此我們將連線的管理與GPS的定位資訊階放在底層Remote Server端實作,所有高層的應用程UI介面皆透過IO控制層去與底層Service進行資訊的存取交換。我們在IO控制層中自竹行定義實作了一套通訊協定(Protocol),包含了領隊與Server還有領隊與隊員之間的通訊資料格式。透過這樣三層式的軟體架構設計,用戶可以不用一直開著本APP軟體,其Service會自行在背景運作,並且我們將Service獨立出來跑在另外一個Process(Remove Service)之中,所以可以大量的減少背景Service的記憶體消耗。而中間的IO層本身具有封包分析與封包分配的功能,上層的應用程式(Activity)可以向IO層註冊要監聽的封包指令,IO層在分析出該封包後會自動Call-Back上層的應用程式去進行處理,並顯示內容於UI畫面上。而中間有需要使用到資訊庫資訊則可以透過DataBase Adapter提供了許多高階的API函式可以存取操作資料庫,DataBaseAdapter設計為Singleton架構,以方便在應用層或是在IO層都可以直接的進行存取操作。
圖2-1 軟體架構方塊圖

  • 登入介面
登入者帳號與資料庫比對,判斷權限是否為領隊,不同的權限會有不同的功能呈現。
透過GPS定位,領隊可看到自己與團員位置及資訊,團員則可以看到自己與領隊的即時位置。
圖2-2 登入畫面

圖2-3 首頁介面

  • 點名、集合通知介面
按下點名按鈕後,透過SERVER集體發通知給所有團員。
團員收到通知後,點選『到達』,透過SERVER將值回傳給領隊。
自動判別團員是否點選『到達』,若到達就顯示亮燈並顯示傳送時間。
按下集合通知,透過SERVER,將領隊設定集合地點及輸入相關文字傳送給團員。

圖2-4 點名通知 圖2-5 點名通知 圖2-6 集合通知

  • 成員名單及撥打電話介面
連結資料庫將使用者資訊依照欄位顯示出來。
按下撥打電話鍵,將會連結資料庫直接撥打成員電話。
圖2-7成員名單

圖2-8撥打電話

  • 旅遊資訊介面
連結資料庫將行程資料依照欄位去顯示。
點擊行程後於Dialog跳出視窗顯示詳細資訊。
圖2-9行程資訊

圖2-10資訊內容


為了能實作一套具有擴充性與相容性的通訊協定,因此我們必需建立一套具有彈性的軟體架構設計,得以讓我們設計的IO管理層得以使用抽像的介面去處理封包內容,其實細部的封包實作則放在實作層去進行實作。圖3-1為依照圖2-1的系統軟體架構疊堆圖所實作出的程式碼。總共有超過30隻以上的Java應用程式,分為12個package目錄。必須在短短的一個月內完成這個不算小的軟體開發,我們必須要有一套可以供所有組員同時進行程式碼開發,並且又不會互相影響到對方程式的協助工作平台。在此我們透過由艾鍗提供的SVN Server,與預先討論設設好的軟體架構與package目錄分類,所有的組員得以同時的進行開發工作。期間我們學習到如何切出SVN分支,如何做SVN主幹與分支的合並,如何解決SVN衝突,如何團隊運作...等等許多寶貴經驗。
圖3-1 Android軟體架構實作

以下圖片為依照圖2-1的軟體堆疊圖去實作的軟體框架,我們以UML圖形的方式來表示。其中使用到了許多Java設計模式(Design Pattern),我們將實作層與抽像層分離,在中間的IO管理層,與DataBaseAdapter層皆是使用抽像的介面去進行處理,如此一來要進行功能擴充時只要建立新的類別去實作對應的抽像介面(或實作對應的抽像類別),便可以直接將該功能掛進原本的框架裡運作,而不用去大改應用程式架構。
  • SQLite設計 (使用UML 顯示程式 的相依和關聯)
Class inheritance view

Class dependence view

Class association view

  • IO CONTROL PROTOCOL(使用UML 顯示程式 的相依和關聯)
Class inheritance view

Class dependence view

Class association view

  • REMOTE SERVICES
Class inheritance view

展場照片:







完整Demo介紹影片



開發過程(幕後花絮)


想了解更多Android相關產業應用專題? 請依以下連結至Android專題總覽精華區。