android 網路定位失敗 location為null的真正原因
阿新 • • 發佈:2018-12-27
最近開發一個android應用,需要用到定位功能,經過網上查資料發現gps定位速度太慢,遂決定用網路定位,結果在本人的三星手機上除錯發現
locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE); if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000, 0,locationListener); Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if(location != null){ longitude = location.getLongitude(); } }
執行後location永遠為null,哪怕用網上流傳的辦法用while迴圈一直獲取也無法得到非空的值。
其真正原因是三星等國內的手機廠商對android系統進行了改動,將谷歌的服務包刪除,上述結果就是講網路定位服務包缺少的結果,最明顯的就是谷歌地圖無法定位,因為谷歌地圖用的也是這套api,而其他百度、高德等實用自己的地圖api包,所以依然可以使用,而使用谷歌原版android就沒有這個問題,在虛擬機器中測試也可以發現執行正常。解決方法很簡單,既然缺少服務包,那麼重新加上即可,不用刷機,只是安裝過程與一般的應用安裝方法不同,一定記住先按框架再安裝服務
安裝方法 http://bbs.lephone.cc/thread-365363-1-1.html
服務包下載 http://bbs.gfan.com/android-4071962-1-1.html
雖然講的不是很詳細,一般使用者可能不是很懂,但是我相信作為開發人員一定可以看懂。