2011-04-04 72 views
0

我正在開發應用程序,它必須獲取經度和緯度。在我的情況下,requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)不在選項中。爲什麼?因爲我必須在用戶做某個需要位置的東西時才能獲取位置(假設他點擊按鈕)。當按鈕被擊中時,我需要準確定位時間。在requestLocationUpdates中,我們可以設置minTime - 如果我設置了這個,讓我們假設在30000處,「按鈕點擊時間」的位置不會像我想要的那麼好。同樣的原因minDistance也不如我想要的那麼好。如果我理解函數requestLocationUpdates correct - 當minTime和minDistance設置爲0時,位置會一直更新。如果我錯了,請糾正我。應用程序適用於我正在工作的公司,該應用程序將在白天和黑夜使用。所以如果應用程序會一直檢查位置更新,電池將經常是空的。這就是爲什麼我當時需要位置,該按鈕被擊中。用戶無法訪問互聯網和gps。所以我必須使用NETWORK_PROVIDERAndroid:如何singleUpdate位置和重新啓動後無法獲取位置

我也有重新啓動設備後獲取位置的問題。它不工作,直到我運行谷歌地圖。用戶也不會有這個可用,所以google在android上使用重定位後得到位置的函數是什麼?

目前,我使用此代碼:

LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     LocationListener mlocListener = new MyLocationListener(); 
     mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mlocListener); 
     mlocManager.removeUpdates(mlocListener); 



public class MyLocationListener implements LocationListener{ 
    @Override 
    public void onLocationChanged(Location loc){ 
    latitude=loc.getLatitude(); 
    longitude=loc.getLongitude(); 
    Text = "My current location is: \n" + "Latitud = " + loc.getLatitude() + "\nLongitud = " + loc.getLongitude(); 
    Toast.makeText(getApplicationContext(),Text,Toast.LENGTH_SHORT).show(); 
    } 
    @Override 
    public void onProviderDisabled(String provider){} 
    @Override 
    public void onProviderEnabled(String provider){} 
    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras){} 
} 

代碼爲here

但這段代碼不工作的權利。如果我按「獲取位置按鈕」吐司顯示和位置是正確的。但如果我多次按下按鈕,它什麼也不做。 - 但5分鐘後吐司顯示爲百倍......爲什麼是這樣?

+0

我測試過並注意到設備需要45s-90s才能連接網絡提供商並獲取經緯度。所以我解決了第二個問題... – 2011-04-04 13:01:49

回答

0

您在requestLocationUpdates之後立即調用removeUpdates。所以,聽衆永遠不會註冊。在onLocationChanged方法中調用removeUpdates。