本範例說明如何使用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是相當耗電的。 |