線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:863
推到 Plurk!
推到 Facebook!

Location sensor 用法

缺席
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2016-10-18 14:12:03 IP:118.169.xxx.xxx 未訂閱
請問各位:

我這個問題在xe6年代已問過, 但似乎沒有得到答案, 想 到了xe10.1 再請教一次
有關 Location Sensor 的用法我掌握不了
在官方的範例上 (fmx)
設置一個 TSwitch, 在 Switch1.onSwitch Event 中寫
begin
LocationSensor1.Active := Switch1.IsChecked
end;

然後在 LocationSensor1LocationChanged 取得經緯度值
操作上, 當run app後, 滑動開啟 Switch on, 約莫 0.5秒會出現數值
以上範例沒有任何疑問的地方

但我現在要做是
在 app run起來後, 自動賦予 true,
所以我在onCreate 上寫了 LocationSensor1.Active := True;
但這樣的寫法, Location竟無法取得 gps
後我想, 可能是 Create 過程中, Sensor 還沒有 Ready, 所以改寫在 onActive 上, 一樣取不到
最後我又用另一種寫法, 就是在 onCreate 中加入 Timer的功能, 給予 3-5 秒的等待
在 onCreate 的最後一列加入 Timer1.Enabed := True 來啟動計時
把 LocationSensor1.Active := True 寫在 onTimer1Event , 這次有不一樣的結果
在 htc 手機, 開啟 app 時永遠找不到 gps, Samsumg 手機可以立即找到, 其他白牌也找不到
然而在htc手機, 如果把 Form 開啟關閉幾次, 就能找到 gps

我個人認為, 應該是 timing 的問題, 但好奇的是, 為什麼利用 Switch 方式就能幾乎在瞬間找到 gps,
不要switch, 直接指定 True, 就觸發不了, 不知各位有沒有這方面的經驗,
因為我不想讓user 知道有啟動 gps, 也不想讓user 多一個滑動起動gps 的動作,

謝謝~~
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2016-10-19 08:46:11 IP:118.169.xxx.xxx 未訂閱
昨天無意問在做測試發現
設置一個 Timer 來取 gps data,
宣告兩組 private 變數 gpsdata1, gpsdata2 : double;

onCreate 最後下
begin
....
LocateSensor1.Active := True; // 先啟動 sensor
Timer1.Enabled := True;
end;

onTimer1TimerEvent
begin
Timer1.Enabled := False;
label1.text := gpsdata1.toString;
label2.text := gpsdata2.toString;
end;

LocateSensor1.on ChangedEvent
begin
gpsdata1:= LocateSensor1...... (經度, 老是背不起來單字)
gpsdata2:= LocateSensor1.......(緯度, 還是背不起來)
LocateSensor1.Active := False;
end;

當我設定 Timer 毫秒數 = 2500
在 pc的桌機上 BlueStacker Android 模擬器跑 Form.Create 之後可在3秒內取得data
在 htc10 手機, 取不到
如果我把 Timer 調到 7000
在 htc10手機, 每次首開都可以取到

如果我改變設計, 不要用 Timer 來取值, 也不要在 onCreate 啟動 sensor
就是回到原始, 用 TSwitch 來啟動, 在
Switch1.on ChangeEvent
LocateSensor1.Active := Switch1.isChecked;

再用一個 TButton 來取得
Button1.onClick
begin
label1.text := gpsdata1.toString;
label2.text := gpsdata2.toString;
end;

如果是這樣的做法, 在 Form Create 完成後,
手動滑動 Switch on
等3秒鐘(人工等待)
再按 Button1 也可以取得 gps data

所以, 看來, gps 取 data 要有一定的Timing, 只是我不解的, 基本3秒是一個下限, 那為什麼利用 onCreate 的做法必須等到 7秒?
(以htc10 手機來做標準)

編輯記錄
P.D. 重新編輯於 2016-10-19 08:47:52, 註解 無‧
P.D. 重新編輯於 2016-10-19 08:49:49, 註解 無‧
系統時間:2024-11-23 17:38:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!