2012-06-22 45 views
0

我想知道用戶的位置,但如果它不是已經打開gps,就意味着我只想得到的位置是用戶正在使用Maps或類似的地方。Android獲取用戶的位置沒有requestLocationUpdates

,如果我做

locationManager.requestLocationUpdates(); 

,關於GPS開啓。

如果我使用

locationManager.getLastKnownLocation(); 

這總是返回相同的位置,即使是因爲地圖運行應該有新的問題。

想法任何人? :)

回答

0

可以使用PASSIVE_PROVIDER但這僅在API層面推出8 From Android Documentation for LocationManager

一個特殊的位置提供用於接收地點,而無需實際啓動位置鎖定。當其他應用程序或服務請求它們時,此提供程序可用於被動接收位置更新,而無需實際請求您自己的位置。該提供者將返回由其他提供者生成的位置。您可以查詢getProvider()方法以確定位置更新的來源。需要權限android.permission.ACCESS_FINE_LOCATION,但如果GPS未啓用,此提供程序可能只返回粗略修正。

這樣您就不會直接請求任何位置更新,只有當其他某個應用程序請求更新時纔會獲取它們。

至於getLastKnownLocation()再次引述Android文檔:

返回一個位置指示從給定的提供商處獲得的最後已知的位置鎖定的數據。這可以在不啓動提供者的情況下完成。請注意,此位置可能已過時,例如,如果設備已關閉並移至其他位置。 如果提供者當前被禁用,則返回null。

所以,如果你與getLastKnownLocation一遍又一遍地得到相同的位置再次它可能是供應商被禁用,你只是得到什麼函數名稱所表明的,即該設備的最後已知位置。閱讀上面的引用或參考Android文檔以獲取更多詳細信息。

0

試試這個:

有你Activity實施GpsStatus.Listener和使用

boolean isGpsStarted= false; 
public void onGpsStatusChanged(int event) { 
    switch (event) { 
     case GpsStatus.GPS_EVENT_SATELLITE_STATUS: 
      break; 
     case GpsStatus.GPS_EVENT_FIRST_FIX:        
      break; 
     case GpsStatus.GPS_EVENT_STARTED: 
      isGpsStarted = true; 
      break; 
     case GpsStatus.GPS_EVENT_STOPPED: 
      isGpsStarted = false; 
      break; 
    } 
} 

使用NETWORK_PROVIDERrequestLocationUpdates將使用WiFi和細胞定位和更高的精度開啓WLAN編程。定期檢查isGpsStarted是否爲真,然後切換到GPS_PROVIDERrequestSingleUpdate。同時檢查是否需要切換回NETWORK_PROVIDER並定期更新,如果isGpsStarted再次變爲錯誤。