2010-11-30 87 views
1

我正在寫一個地理應用程序,它可以很好地工作,但我正在考慮如何在沒有GPS或3G的設備上工作,並且WiFi可能關閉或不提供位置信息。如何判斷Android設備是否能夠提供位置?

是我最好的選擇,只是請求位置更新(或使用最後一次已知)並假設有一種方法來獲取位置(無論是GPS還是網絡),還是框架包含一種方法來查看可用的方法,以及避免地理查找延遲?

我在沒有GPS的設備上繪圖我的應用應該爲用戶指定位置提供一個UI,並在sharedprefs中記住它,以便它們不必重新輸入它(我在考慮設備如Google TV和平板電腦)。

對於如何處理在具有不同級別的地理位置的各種設備環境中獲取位置的過程以及如何處理這些建議,我將不勝感激。

回答

1

您可以調用LocationManager.getAllProviders()來檢索所有位置提供程序,或調用LocationManager.getProviders(true)來檢索活動位置提供程序。

boolean hasActiveLocationProvider = false; 
LocationManager locationManager = Context.getSystemService(Context.LOCATION_SERVICE); 
List<String> providers = locationManager.getProviders(true); 
for (String providerName:providers) { 
    if (providerName.equals(LocationManager.GPS_PROVIDER) 
     || providerName.equals(LocationManager.NETWORK_PROVIDER)) { 
    hasActiveLocationProvider = true; 
    } 
} 

http://developer.android.com/reference/android/location/LocationManager.html

+0

看來,這隻告訴我有什麼理論提供者,而不是現在有什麼實際可用的。例如如果我在帶GPS的設備上運行上述代碼並關閉所有網絡,它仍會返回兩個項目,即GPS和NETWORK。我需要比這更多的細節,我需要知道哪些是可用的,或者至少打開了,是否有API來做到這一點? – 2011-01-20 17:16:11

0

擴展aleung的和奧利的回答這是爲我工作最好的。可能還有幾個需要填補的空白。

private boolean hasActiveLocationProvider(Context context) { 
    LocationManager locationManager = (LocationManager) context 
      .getSystemService(Context.LOCATION_SERVICE); 
    List<String> providers = locationManager.getProviders(true); 
    for (String providerName : providers) { 
     if (providerName.equals(LocationManager.GPS_PROVIDER)) { 
      return true; 
     } 
     if (providerName.equals(LocationManager.NETWORK_PROVIDER)) { 
      ConnectivityManager cm = (ConnectivityManager) context 
        .getSystemService(Context.CONNECTIVITY_SERVICE); 
      boolean isConnected = cm.getActiveNetworkInfo() != null 
       && cm.getActiveNetworkInfo().isConnectedOrConnecting(); 
      if (isConnected) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 
相關問題