2014-07-03 78 views
0

在我的活動中,我需要使用gps獲取手機的當前位置。我已經使用了以下代碼:Android gps getlastknownlocation返回空指針異常

Location gpslocation; 
LocationManager lmanager=(LocationManager)getSystemService(Context.LOCATION_SERVICE); 
gpslocation= lmanager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

//error in the next line as follows java.lang.nullpointerexception 

gpslatitude=gpslocation.getLatitude(); 
gpslongitude=gpslocation.getLongitude(); 

我知道getlastknownknownlocation會獲取固定gps的最後一個位置。在這種情況下,getlastknownlocation返回一個空指針。這就是爲什麼會出現異常,我的應用程序部隊關閉。另外我知道還有另一種使用onlocationchanged獲取GPS座標的方法。但爲了這個工作,設備必須處於移動狀態一段距離。因爲在我的應用程序中,我想以固定的方式獲取GPS座標,有沒有其他方法可以在android中使用gps獲取GPS座標。

我不想使用網絡提供者,因爲它只會給出距我當前位置實際位置約5公里的位置座標。所以我不會鼓勵在我的應用中使用網絡位置。因爲5公里的距離對我來說不是一個可以接受的範圍。是否有任何其他方式使用代碼修復GPS座標。在使用lastknownlocation的時候,我會爲我的應用程序提供解決方案。

回答

2

某些設備不支持getLastKnownLocation(例如我的Motorola XT720)。您必須實現LocationListener,並將位置更新保存到onLocationChanged中,由您自己保存到數據庫或共享首選項。當getLastKnownLocation爲null時,使用該保存的位置。

編輯: 該方法的主要問題是,當用戶移動了很多它不準確。另一個解決方案是寫一個服務女巫例如火每小時一次的位置管理器保存結果,然後您將在舊設備上每小時更新一次「最後位置」。

+0

它並不是說它們不支持它 - 它們可能沒有它。跟蹤可能已關閉很長時間沒有保存位置。如果您要求更新,請在收到一份更新後使用它,否則它會正常返回。這是跨所有設備。 –

+0

我的設備從來沒有lastLocation,無論何時我要求 - 總是爲空。即使我在onLoctionChange之後或在使用其他使用GPS的應用程序之後立即詢問。 –

+1

我沒有專門用於測試的設備之一,但其應該工作的方式是,如果結果是陳舊的或者它從未有過,則GLKL將返回NULL,並且如果它有一個新鮮的足夠。我傾向於懷疑它完全壞了,但我相信一些設備可能不會返回結果,除非GPS打開。無論哪種方式,比寫入共享首選項更好 - 當他需要時,他應該調用requestSingleUpdate。 –