2015-11-12 46 views
0

我正在一個Android應用程序,這個想法是,用戶登錄併發送一個表單到數據庫。該表格還包含使用gps的用戶的實際位置。獲取與Android的GPS位置 - 並不總是工作

這是我使用的代碼:

的onCreate - >

LocationManager locationManager = (LocationManager) 
       getSystemService(Context.LOCATION_SERVICE); 

     LocationListener locationListener = new MyLocationListener(); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 1, locationListener); 

那麼類 - >

class MyLocationListener implements LocationListener { 


     @Override 
     public void onLocationChanged(Location loc) { 

      long variance; 
      variance = age_minutes(loc); 


      if (variance < 1) { 

       Log.v("asdf","we are inside" + variance); 

       posH.longitude = String.valueOf(loc.getLongitude()); 
       Log.v("asdf", posH.longitude); 
       posH.latitude = String.valueOf(loc.getLatitude()); 
       Log.v("asdf", posH.latitude); 

       posH.valid = true; 

      } else { 

       Log.v("asdf","we are outside" + variance); 
       posH.valid = false; 
      } 


     } 

這裏的問題是,它並不總是工作: 例如,我打開表單,我按發送,但onlocationchanged不會被調用,直到我等待20秒,有時更多,有時不會被調用,不關心,如果我移動或不。

我想,讓我打開窗體,並自動獲取當前GPS位置的方法...

回答

0

您可以使用開始與最後一個已知的位置,直到你得到更多的當前數據。

Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

Android Location Strategies

從移動設備獲取用戶位置可能是複雜的。有幾個原因可能會導致位置讀數(不論來源)是否包含錯誤並且不準確。錯誤在用戶位置的一些來源包括:

  • 的位置信息源千頭萬緒 GPS,小區ID,和Wi-Fi可以分別提供一個線索給用戶位置。確定使用和信任是精確度,速度和電池效率的權衡問題。

  • 用戶移動 由於用戶位置發生變化,您必須通過每隔一段時間重新估計用戶位置來計算移動。

  • 變化的準確性 來自每個位置源的位置估計的準確性不一致。 10秒前從一個源獲得的位置可能比來自另一個源或同一個源的最新位置更精確。 這些問題會使得難以獲得可靠的用戶位置閱讀。

+0

有時lastknownlocation是空的,這會導致絕對沒有位置。 – WhiteFloater

+0

使用lastKnownLocation作爲起點,然後使用您現有的代碼來偵聽並獲取更好的位置數據。無論如何,我們無法保證您能夠獲得正確或任何位置數據。你只需要調整你的應用來處理它。 –