0

我想使用GPS_Provider作爲獲取用戶當前位置的主要方法,但是在某些情況下,GPS不起作用。如果我的應用程序無法使用GPS獲取用戶位置,我想切換到NETWORK_PROVIDER。我怎樣才能實現這個?如果位置管理器無法使用GPS_Provider獲取位置,請切換到NETWORK_Provider

lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 

//setting up criteria (biased toward GPS) 
Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE); 
criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH); 
String providerName = lm.getBestProvider(criteria, true); 

//requesting location updates (if app cant use GPS, switch to requestLocationUpdates.NETWORK_PROVIDER) 
lm.requestLocationUpdates(providerName, 180000, 0, ll); 

回答

0

一個解決方案是異步請求更新GPS和NETWORK。 GPS和NETWORK都需要兩個獨立的監聽器。無論哪個聽衆首先返回,您都將停止獲取其他提供商的更新。 (即如果你從網絡上的結果第一,停止獲取網絡和GPS更新。)

讓我知道如果你感到困惑或不。

+0

理想情況下,我希望GPS可以嘗試首先獲取位置至少60秒,如果它無法獲得它然後切換到網絡提供商。有沒有簡單的方法來實現這一點? – thedeepfield

+0

這聽起來像一個可怕的用戶體驗。但是,如果這是你想要的,那麼你可能需要使用一個處理程序並延遲60秒(或以毫秒爲單位的60秒)。如果您在60秒之前獲得了位置,請刪除處理程序消息。否則處理程序回調將被調用。從處理程序回調中,您可以啓動網絡提供程序。 – StackOverflower

0

可能會或可能不會是一個好主意,

我做什麼,我都註冊網絡和GPS提供商......一旦我開始獲取GPS座標合作,那麼我會則會忽略共同座標被獲取網絡provider使用location.getProvider()使用布爾變量。

0

對於我的實現。我首先檢查gps位置,如果它返回null。然後檢查網絡位置。

Location locationGps = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
Location locationNetwork = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

     if (locationGps != null) { 
      //set location as gps 
      hasFix = true; 
     } 

     else if (locationNetwork != null) { 
      //set location as network 
      hasFix = true; 
     } 
+0

感謝您添加代碼。我對android/java很陌生,並且對所有這些的時機都有疑問。你的代碼首先嚐試使用GPS提供商,那麼如果它不能,它會使用網絡提供商?我的理解是,網絡提供商幾乎總是會提供更快的修復程序,如果是這種情況,locationgps將始終爲空,並且用戶位置將始終由locationnetwork確定? – thedeepfield

+0

是的。對不起,我粘貼的代碼不是很完整,只是一個用作示例的代碼片段。我首先檢查是否有GPS解決方案,如果是的話 - 那就是我用作我的位置。否則,如果有網絡位置我使用它 - 如果兩者都不是,我讓用戶知道該位置當前不可用。我的理解是,GPS定位比網絡定位更準確。我用這個鏈接作爲參考http://developer.android.com/guide/topics/location/strategies.html – jiiri

+0

這只是檢查是否最後一個已知的位置修復爲GPS或網絡。我正在尋找檢查GPS是否能夠獲得gps鎖(不檢查是否由用戶啓用)。 – thedeepfield