2013-07-05 82 views
1

我一直在研究基於位置的應用程序。Android getBestProvider永不返回GPS

我測試兩個Samsung Galaxy S4Samsung Tab 7

當調用getBestProvider()如果啓用了網絡和其他方式,這是我的Galaxy S4的情況下,它通常返回GPS。

然而,當我試圖運行選項卡上的應用,GPS供應商從未被getBestProvider()回來,即使它已啓用。

S4有Android 4.2.2而標籤有4.1.1,這可能是問題,如果沒有,是什麼?

+0

三星手機有一個固有的問題,他們沒有像預期的那樣正確移植谷歌。不幸的是,他們沒有像我們這樣的開發人員有一個缺陷區來記錄錯誤。谷歌不會讓我們登錄三星的錯誤,因爲三星爲他們的手機定製android不像HTC。 – Siddharth

+0

做這個實驗,在你的任何設備上運行你的代碼,除了三星,HTC。它會像魅力一樣工作。 – Siddharth

回答

2

不管你用什麼提供GPS,網絡或最好的,所有的工作就從本地獲取位置(在設備)高速緩存的原理相同。

如果你想立即GPS你需要破解的系統更新緩存,然後讀取它。在三星手機上,這種攻擊是必要的。在HTC和其他型號你不需要這個黑客。 我(幸運的是)找到了用黑客來觸發緩存更新的方法。

在getLastKnownLocation之前調用以下代碼。

<YourActivity>.getLocationManager().requestLocationUpdates(
     LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() { 
     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
     } 
     @Override 
     public void onProviderEnabled(String provider) { 
     } 
      @Override 
     public void onProviderDisabled(String provider) { 
     } 
     @Override 
     public void onLocationChanged(final Location location) { 
    } 
}); 

OR

使用LocationClient。新的API(位於)用於位置更新。這些API不需要你找到最好的提供者,而是在下面做所有這些。

+0

謝謝,但我有一個問題(可能是一個愚蠢的),但究竟是什麼HomeScreen? 此外,即使我有我自己的requestLocationUpdates實現,我應該寫這段代碼嗎? –

+0

已更正。請檢查。 – Siddharth

+0

它說getLocationManager()是未定義的! –

1

getBestProvider()不會總是返回GPS。因爲GPS並不總是最好的供應商。該選項卡連接到WiFi?從wifi的位置是相當準確的,以便可以返回,如果你連接到無線網絡。

此外,您應切換到Google Play服務中的新定位服務。使用熔斷器位置提供商將不再需要管理提供商,併爲您提供最佳結果。

+0

事情是,即使當我強迫地點獲取基於GPS提供商的位置時,我也沒有任何信號! 和我不知道新的位置服務是什麼,可以請你提供某種聯繫或教程,thnQ –

+1

@Siddharth非常感謝你,但不會是被視爲一個問題,當用戶與三星設備下載我的應用程序 另外,爲什麼沒有發生在我的三星S4 –

+1

你應該在三星論壇上發佈這個問題。我不會有答案。 – Siddharth