2011-07-21 71 views
1

我正在使用此代碼獲取位置提供程序和位置。Android位置Wifi重新啓動後無法工作

 mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 
     mBestProvider = mLocationManager.getBestProvider(criteria, false); 
     mLocation = mLocationManager.getLastKnownLocation(mBestProvider); 

如果我關掉GPS,位置處於網絡,但如果我重啓手機(所以我虧稱爲最後的位置),並與3G數據連接關閉。所以我只使用WIFI,因此我無法獲得任何提供商,因此無法訪問任何位置。但谷歌地方的應用程序可以找到我。我認爲它可能會獲得最後的知名位置。但在那種情況下,我的其他應用程序應該能夠獲得該位置。任何想法發生了什麼?

回答

3

你調用它的方式它會返回所有的提供者啓用或不是因爲你傳遞它錯誤這可能是你的意圖,但你檢查了返回字符串?

mBestProvider = mLocationManager.getBestProvider(criteria, false); 

你可能會得到的GPS供應商,或者你可能會得到的網絡提供商,我已經學會了不信任的標準機制,因爲它似乎每個載波和設備的工作方式不同(我有一些莫名其妙的錯誤因爲這個)

因此,我總是特別要求gps和網絡供應商和檢查最後都知道,然後使用算法來確定最好的使用。

網絡提供商可以使用細胞 WiFi熱點/路由器來確定位置(谷歌保持的無線網絡信息的數據庫),所以它可能得到只有wifi的修復,而不是說是發生了什麼,但它可能是。

如果沒有結果,那麼它們很可能只是在首選項中緩存最近的位置更新,一些應用程序會這樣做。爲了測試這篇論文,如果沒有完成以上所有操作,只需將手機置於該狀態,並儘可能移動到具有相同屬性的非常不同的位置,則應該只需要2000米左右。如果您的應用仍然報告爲空,並且地點報告了舊位置,則您有答案。

如果地方的確使用wifi報告了更新的位置,並且您的應用程序無法(假設您實際驗證您正在獲取網絡提供商),那麼他們有可能通過Google位置服務器(GLS) MASF服務器通過部分cell/wifi信息,但這是錫箔曲線的極端。

+0

我必須添加設置NETWORK_PROVIDER的情況下,標準的機制沒有返回的條件,當我使用mLocation = mLocationManager.getLastKnownLocation(mBestProvider)我沒有得到任何結果。所以我無法獲得任何立場。我會做你說的測試,因爲我認爲他們可能存儲在偏好的位置上。 – Dayerman

+0

GPS/NETWORK/PASSIVE提供者都不返回任何東西。我曾做過一個試驗:禁用WIFI和地方刪除緩存/應用數據app.When我開的地方重新它說:「Requiere數據連接」我打開WIFI一遍,然後出現位置50米precission。這是否意味着他們正在使用第二個「祕密」API?導致WIFI打開並手動設置NEWTWORK_PROVIDER我什麼也沒有得到。 – Dayerman

+0

@dayerman您是否真的嘗試過在網絡提供商處設置位置監聽器等? getLastLocation可以返回null,但仍將位置更新報告給已註冊的偵聽器,這可能是他們剛剛獲得實際更新。如果你不那麼我認爲這是一個跡象表明其他事情正在發生,但我會先檢查它。 – Idistic