2011-11-28 35 views
3

我試圖從android手機通過GPS獲取緯度和經度信息,當我在室外或直接在天空下時,我可以立即獲得值,但是當我在室內或室內時花費超過一分鐘才能獲得價值。任何人都可以幫助我在房間內使用我的應用程序時快速獲取此值。如何快速獲取緯度和經度或GPS數據,而我們在室內的Android手機?

我用得到的值下面的代碼:

LocationManager locManager; 
locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,500.0f, 
            locationListener); 
Location location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

private final LocationListener locationListener = new LocationListener() { 
    public void onLocationChanged(Location location) { 

    EditText myLocationText = (EditText)findViewById(R.id.editText1); 
    EditText myLocationText1 = (EditText)findViewById(R.id.editText2); 
    String latString = ""; 
    String LongString = ""; 

    if (location != null) { 
     double lat = location.getLatitude(); 
     double lng = location.getLongitude(); 
     latString = "" + lat; 
     LongString ="" + lng; 



    } else { 
     latString = "No location found"; 
     LongString = "No location found"; 
      } 
    myLocationText.setText(""+ latString); 
    myLocationText1.setText(""+ LongString); 
} 

是否有獲得比使用其他LocationManager的GPS值的任何其他方式?

+0

我想你會想使用GPS的緩存。簽出此鏈接:http://forums.groundspeak.com/GC/index.php?showtopic=215136。 他們正在爲此比較各種工具。也許其中一個會適合你的目的? –

+1

如果您的應用程序無法接收到衛星信號,那麼GPS當然無法使用。如果你在室內得到任何信號,那就是獎金。你不希望你的電視沒有天線工作。 – NickT

+0

@KevinCoulombe [尋寶](http://en.wikipedia.org/wiki/Geocaching)是一項運動,你確定這個鏈接是相關的嗎? – Craigy

回答

1

你可以得到最後已知的位置,這是相當快:

/** 
* Gets the last known location. 
* 
* @param locationManager the location manager 
* @return the last known location 
*/ 
public static Location getLastKnownLocation(LocationManager locationManager) 
{ 
    Location bestResult = null; 
    float bestAccuracy = 10000; 
    long bestTime = 0; 

    List<String> matchingProviders = locationManager.getAllProviders(); 

    for (String provider: matchingProviders) { 
     Log.d("LOCATION", "Provider: " + provider); 
     Location location = locationManager.getLastKnownLocation(provider); 
     Log.d("LOCATION", "Location found? "+ (location==null?"NO":"YES")); 
     if (location != null) { 
      float accuracy = location.getAccuracy(); 
      long time = location.getTime(); 
      Log.d("LOCATION", "Acc: "+ String.valueOf(accuracy) + " -- Time: " + String.valueOf(time)); 
      if ((time > minTime && accuracy < bestAccuracy)) { 
       bestResult = location; 
       bestAccuracy = accuracy; 
       bestTime = time; 
      } 
      else if (time < minTime && 
        bestAccuracy == Float.MAX_VALUE && time > bestTime){ 
       bestResult = location; 
       bestTime = time; 
      } 
     } 
    } 
    Log.d("LOCATION", "BEST FOUND? "+ (bestResult==null?"NO":"YES")); 

    return bestResult; 
} 
0

你可以使用的LocationManager以下方法設備的最後已知位置,這是一個已經過去的找到位置全系統。

這種方法的關鍵在於:

Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider); 

詳情參見Obtaining User Location

0

如果在室內,因爲你是不太可能進去的信號,你會使用LocationManager.NETWORK_PROVIDER的更好。您也可以使用getLastKnownLocation(),但這可能不存在或過時。

0

如果你想得到一個房間的位置,gps提供商是緩慢的。你可以嘗試改變:

locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,500.0f, 
            locationListener); 
Location location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

通過:

locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000L,500.0f, 
             locationListener); 

而且你會在 '公共無效onLocationChanged(位置定位)' 的方法得到的位置。

0

我使用網絡提供商來獲取協同參與者,並且在客廳裏的房子裏總是快得多。但是,當我在地下室區域嘗試相同的時候,儘管我幾乎等待了幾分鐘,但它根本不會獲取座標。

注:我能夠做出從地下室打個電話,我也能夠瀏覽以及..

相關問題