於背景記錄GPS資料

本範例說明如何使用App Inventor最新的 service功能來記錄 GPS 資料於背景。手機待機時仍可執行

本文感謝豐原高中郭再興老師熱情支援~

注意事項: 這個Service 網站仍然在發展中,必須使用英文版,不然編譯會出現錯誤;
另外撰寫好的程式,必須自行轉成 *.apk 下載到手機端執行。

請登入 http://services.appinventor.mit.edu 
後建立一個新專案就可以開工了。

 
Designer
參考下圖加上畫面上的元件,其中必較特別的是放置不可視元件Sensors->ApplicationMessenger,命名為Screen_ApplicationMessenger;它的LocalMessagesToReceive屬性設定成MsgName,稍後會用到


新增一個task命名為Task1
 


放置不可視元件Clock、ApplicationMessenger,並且命名為Task_ApplicationMessenger
再將Clock1的屬性TimerEnabled設定為False
 
 
Blocks

接下來撰寫程式,分兩部分進行 : (一) Screen1的程式 (二) Task1的程式

(一) 撰寫Screen1的程式
1.宣告cnt全域變數
 
2.按下Start_Button按鈕,就啟動Task1這個任務,並且把Interval_TextBox1.Text的參數傳給Task1。接著在Label1顯示訊息 "Service Start….
 
3.按下Stop_Button,就停止Task1任務,同時在Label1顯示訊息 "Service Stop

 
4.稍後Task1會傳送訊息過來,所以當接收到訊息時,就把變數cnt遞增1單位,連同接收到的message組合成新字串後,顯示到data_Label
 
5. Screen區域完整的程式如下
 

 

 



(二) 撰寫 Task1程式
1. 按下Start_Button按鈕啟動Task1任務,Task1從startValue取得傳入參數,用來設定Clock1.TimerInterval屬性,同時也將TimerEnabled、TimerAlwaysFires都設定為True,開始定期啟動。
 
2. 每次Clock1啟動,就會將目前時間,連同"MsgName”標題一併打包起來,送給Screen程式

3. Task1區域完整程式如下
 

 
程式撰寫完畢,編譯並下載程式,請點選Build->App(provide QR code for .apk)。再用手機掃描條碼,下載程式安裝完畢後,執行程式

畫面中按下 [1.Start] 按鈕啟動Service,每隔1秒鐘就會看到Task1傳回來的最新時間,
若按下 [2.Stop] 就會中止service



 
加上GPS資料

接著來試試看如何自動記錄GPS經緯度資料

請在Task1中加入一個 LocationSensor元件
 
程式碼加入如下圖紅框內程式,就是把時間加上LocationSensor1的緯度與經度資料,整理成字串,傳送給Screen1程式顯示
 
執行後畫面如下,有了經緯度資料了



 
寫入手機的 txt 檔

接著要將這些GPS資料寫入手機上的txt檔,因此要用到File元件。

請新增一個File元件到Task1的 Desiner畫面中。
 
修改Task1內的Clock1.Timer事件,程式碼如下圖
1. 首先宣告一個ldata的字串區域變數,並將時間、緯度、經度、換行字元,整理成字串

2. 將ldata的訊息送出去給Screen的程式顯示在螢幕上

3. 然後再把ldata的訊息存到根目錄下的檔案內 /gpsdata.txt
 


Task1完整程式如下圖


啟動程式後,按下 [1.Start] 按鈕啟動服務,過一會兒,再到根目錄下找到 gpsdata.txt,打開檔案看到內容如下圖。 如果不要操作時,記得要按下 [2.Stop] 按鈕,不然Task1可是會一直運作,GPS是相當耗電的。