2014-04-06 66 views
1

我有一個簡單的應用程序,應該返回我當前的GPS位置,下面的代碼,基本上基於Embarcadero提供的教程。三星Galaxy 2上的Delphi XE5 TLocationServices不使用GPS

執行時,我的三星GPS圖標不顯示,返回的位置通常是100m偏離真實位置。

我已經嘗試了各種有價值的'準確性',並試圖在將對象設置爲活動之前和之後設置「準確性」 - 行爲沒有變化。

我已經獲得的其他應用程序(包括Galaxy自帶的「地圖」)在使用時顯示GPS圖標並返回正確的位置。

隨着GPS圖標不顯示,我假設應用程序不使用GPS - 我如何指示它這樣做? (FINE位置獲得權限)

procedure THeaderFooterForm.FormCreate(Sender: TObject); 
    begin 
    LocationSensor1.Active := true; 
    LocationSensor1.Optimize := true; 
    LocationSensor1.Accuracy := 100000; 
    LocationSensor1.Distance := 0; 
end; 

procedure THeaderFooterForm.LocationSensor1LocationChanged(Sender: TObject; 
    const OldLocation, NewLocation: TLocationCoord2D); 
var 
    URLString: String; 
    URLLoadFile: TStringList; 
begin 
    lblLat.Text := NewLocation.Latitude.ToString; 
    lblLong.Text := NewLocation.Longitude.ToString; 

    URLLoadFile := TStringList.Create; 
    URLLoadFile.Add('<iframe'); 
    URLLoadFile.Add(' width="' + WebBrowser1.Width.ToString + '"'); 
    URLLoadFile.Add(' height="' + WebBrowser1.Height.ToString + '"'); 
    URLLoadFile.Add(' frameborder="0" style="border:0"'); 
    URLLoadFile.Add('src=' + Format(
    'https://maps.google.com/maps?q=%s,%s&output=embed', 
    [Format('%2.6f', [NewLocation.Latitude]), Format('%2.6f', [NewLocation.Longitude])]) + '>'); 
    URLLoadFile.Add('</iframe>'); 
    URLLoadFile.SaveToFile('sdcard/Android/data/com.embarcadero.GridLock/files/URLLoadFile.html'); 
    // Show Map using Google Maps 
    URLString := 'file://sdcard/Android/data/com.embarcadero.GridLock/files/URLLoadFile.html'; 
    WebBrowser1.Navigate(URLString); 
    URLLoadFile.Free; 

end; 

在此先感謝, 克里斯

回答

0

當你請求一個位置,你沒有真正的保證系統將使用GPS。

當直接看不到足夠的衛星時,您的手機將回退到其他方法返回位置。它可以使用附近的WiFi熱點找出你的位置,或者它可以使用GSM塔來確定你的位置,這當然不會像GPS那麼精確。

嘗試將手機放在靠近窗戶的地方,或者出門外,然後重試。一定要清楚地看到天空,所以不要站在樹下或高層建築物之間。另外,如果您一段時間沒有使用GPS,您的手機可能需要15分鐘才能更新關於衛星位置的信息(它由衛星廣播,但速度很慢)。如果你有數據連接,你的手機可以通過互聯網下載這些信息,這可以加速你的冷啓動,你會得到更快的定位。

0

感謝您的輸入Wouter。在這種情況下,我嘗試過使用外部應用程序,但我絕對相信它不是試圖訪問GPS。我已經使用了其他應用程序(無論是在室內還是室外),當他們訪問GPS時,手機狀態欄上的圖標會顯示 - 它在建立初始修復時閃爍。使用Delphi定位服務時,它根本不會嘗試訪問GPS提供商 - 圖標不會顯示或閃爍。

我敢肯定,必須有一些設置,指定服務使用GPS供應商,只需要找到它......

克里斯

0

在幫助文本,它指出,如果您將Optimize設置爲false,它不會嘗試使用其他位置查找器。它還規定,如果您嘗試更改程序中的優化,而不是將其設置爲初始參數,則可以推出。還有其他一些只能在Windows下工作的東西(Windows中的什麼GPS?)和IOS。當前我等到f:= LocationSensor1.Sensor.Latitude * 1.0停止產生一個異常(它最初給你NANs),然後在訪問任何GPS數據之前等待20個GPS OnLocationChanged事件。不是太好,但對我來說不是太糟糕。

祝你好運!