2010-05-27 88 views
13

我有這樣的代碼,以獲得最好的供應商Android開位置

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

locationListener = new MyLocationListener(); 
Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE); 
String provider = lm.getBestProvider(criteria, true); 
Location mostRecentLocation = lm.getLastKnownLocation(provider); 
if(mostRecentLocation != null) { 
    latid=mostRecentLocation.getLatitude(); 
    longid=mostRecentLocation.getLongitude(); 
} 
lm.requestLocationUpdates(provider, 1, 0, locationListener); 

,然後聽衆

private class MyLocationListener implements LocationListener { 

@Override 
public void onLocationChanged(Location loc) { 
    if (loc != null) { 
    latid = loc.getLatitude(); 
    longid = loc.getLongitude(); 
    // if(loc.hasAccuracy()==true){ 
    accuracyd = loc.getAccuracy(); 
    String providershown = loc.getProvider();  
    accuracy.setText("Location Acquired. Accuracy:" 
     + Double.toString(accuracyd) + "m\nProvider: "+providershown); 
    accuracy.setBackgroundColor(Color.GREEN); 
    // } 
    userinfo=usernamevalue+"&"+Double.toString(latid)+"&"+Double.toString(longid); 
    submituserlocation(userinfo); 
    } 
} 

當我測試它的設備(HTC Magic的)我發現當gps被禁用時,它立即從網絡鎖定。當我啓用GPS時,它不接收來自網絡的任何數據,並等待它從GPS鎖定。
我想鎖定的位置,如谷歌地圖,直到他們有一個很好的GPS信號,他們使用網絡來確定我的位置。
我雖然最好的標準會這樣做,但他們所做的是挑一個提供商一次。
是否有我的代碼有問題,或者我必須做線程和超時等,使其發生?

+0

spagi代碼幫助我大大 - 無處在Android開發人員網站是它解釋瞭如何獲得最好的供應商。一些設備可能有GPS,一些GSM,一些WiFi。 – 2011-02-16 06:38:23

+0

這是一篇非常有趣的Google文章:http://developer.android.com/training/basics/location/currentlocation.html – shkschneider 2012-10-16 09:30:07

回答

14

也許你可以嘗試收聽網絡提供商和gps提供商一段時間,然後檢查兩者的結果。如果您沒有來自GPS的結果,請改用網絡結果。我就是這麼做的。

+0

因此,我製作了2個位置監聽器,一個用於Gps,一個用於網絡,並使用requestLocationUpdates對它們進行初始化。我可以用一個onLocationChanged來聽他們呢? – spagi 2010-05-27 10:39:49

+0

是的,你應該聽兩者。在更新來自任何提供者之前,您甚至可以使用lastKnownLocation。 – Fedor 2010-05-27 11:27:48

+1

您可以在MyLocationListener中添加一個Location變量,並在onLocationChanged()中設置它的值。在主要活動中,創建兩個MylocationListener實例,一個用於gps,另一個用於網絡提供者。在一段時間內收聽兩者(你可以通過創建一個計時器線程來實現這一點),當時間到了時,停止監聽並首先檢查gpslistener中的位置變量(如果有的話),否則檢查networklistener。 – capecrawler 2010-05-28 01:23:07