2013-01-20 97 views
1

我有以下代碼:如何獲得持續的GPS位置

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

MyLocationListener類:

public class MyLocationListener implements LocationListener{ 

     @Override 
     public void onLocationChanged(Location loc){ 
     loc.getLatitude(); 
     loc.getLongitude(); 
     tv_GPSlat.setText("Latitude: " + loc.getLatitude()); 
     tv_GPSlon.setText("Longitude: " + loc.getLongitude()); 
     } 

     @Override 
     public void onProviderDisabled(String provider){ 
     Toast.makeText(getApplicationContext(),"GPS is not working", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onProviderEnabled(String provider){ 
     Toast.makeText(getApplicationContext(),"GPS is working",Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras){ 
     } 
    } 

我想目前的經度和緯度保存到我的TextView S(tv_GPSlattv_GPSlon)但位置值不是恆定的(它們一直在變化)。我怎樣才能做到這一點?

回答

0

GPS並不準確 - 即使您不移動它也會反彈一下。只要把你得到的第一個位置,並忽略未來的更新,除非他們的移動超過一定數量。這是最簡單的方法。

+0

但如何做到這一點? – Sharpowski

+0

使用Location.distanceTo()比較發送給您的新結果與上一個結果。如果距離小於您想要的任何閾值,請忽略更新。 –

+0

我想保存第一個顯示的位置(經度和緯度)儘可能變量,但我不知道如何。 – Sharpowski

0

你必須得到位置,一旦你得到它(即你的處理程序方法被調用),你必須取消註冊處理程序以停止接收更新。只需在您的處理方法onLocationChanged()月底在MyLocationListener加入這一行:

LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
mlocManager.removeUpdates(this); 
0

數據成員添加到您的位置監聽器,並保持先前​​的位置吧:

public class MyLocationListener implements LocationListener { 

    public Location mSavedLocation; 

    @Override 
    public void onLocationChanged(Location loc) { 
     // If we don't have saved location, or the distance between 
     // the saved location and the new location is bigger than 
     // 5 meters (~15ft) save the new location 
     if ((mSavedLocation == null) || 
      (loc.distanceTo(mSavedLocation) > 5)) { 
      mSavedLocation = loc; 
     } 
     // Update the screen with the current saved location 
     tv_GPSlat.setText("Latitude: " + mSavedLocation.getLatitude()); 
     tv_GPSlon.setText("Longitude: " + mSavedLocation.getLongitude()); 
    } 

    // ... no changes to the rest of the class 
} 

現在的其餘部分您的代碼也可以使用以下最新的保存位置:

mlocListener.mSavedLocation 
0

我想知道爲什麼沒有人提到這一點。可能是我缺少一些東西。你所做的電話有0,0。它應該有毫秒,distanceinmeters。這種方式的位置改變只在特定距離行進或在超時之後被調用。我正在使用GPS和網絡提供商也不依賴於(有時GPS不可靠)。

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, God.KM20TIME, 
      God.KM20DISTANCE, (LocationListener) updates); 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, God.KM20TIME, 
      God.KM20DISTANCE, (LocationListener) updates);