2011-03-10 93 views
2

我正在開發Android應用程序,我需要確保設備已經達到了經緯度和經度描述的某個點。我能想到的唯一的事情就是有這樣的事情:Android gps:如何檢查某個點是否已經達到?

Location initLoc = theManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
    double lat = initLoc.getLatitude(); 
    double lon = initLoc.getLongitude(); 
    MyPoint firstPoint = getPoints().get(0); 

    double dist = CalcHelper.getDistance1(lat, lat, firstPoint.getLat(), firstPoint.getLon()); 

    while(dist > 30){ 

     initLoc = theManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     lat = initLoc.getLatitude(); 
     lon = initLoc.getLongitude(); 
     dist = CalcHelper.getDistance1(lat, lon, firstPoint.getLat(), firstPoint.getLon()); 

    } 

但是,這會導致程序崩潰。如果你能帶領我在這裏找到正確的方向,我會非常感激。

讓我藉此機會再問一個問題。正如我所說我是Android和GPS的新手,並且考慮到關於如何正確開發適用於GPS的應用程序的文檔和信息,我基本上都是盲目工作的。所以我的問題是:

這是onLocationChanged方法的樣子:

  public void onLocationChanged(Location location) { 

      double lat = location.getLatitude(); 
      double lon = location.getLongitude(); 
      MyPoint firstPoint = MainScreen.dataset.getPoints().get(0); 

      double dist = CalcHelper.getDistance1(lat, firstPoint.getLat(),lon, firstPoint.getLon()); 

      if(dist < 10){ 

       Context context = getApplicationContext(); 
       CharSequence text = "Start reached. Starting moving on track"; 
       int duration = 6000; 
       Toast toast = Toast.makeText(context, text, duration); 
       toast.show(); 

      }else{ 

       Context context = getApplicationContext(); 
       CharSequence text = "Distance until start: "+dist; 
       int duration = 6000; 
       Toast toast = Toast.makeText(context, text, duration); 
       toast.show(); 

      } 

    } 

我所試圖做的是使程序確定什麼時候我已經達到了我作爲已經提供了一個音軌的開始一組點。所以,當我啓動程序時,我會收到合理的距離估計。問題是,當我開始移動時,距離似乎沒有被更新,它會被更新,但移動50米後,它說我只移動了5個說。另一方面,當我啓動應用程序並且距離起點不到10米時,它會正確檢測到它。所以基本上,當我用設備移動時,onLocationChanged方法似乎並沒有給我現在所處的正確位置。你能告訴我我可能做錯了什麼嗎?

+0

如果你沒有崩潰,你可以找到在您的logcat堆棧跟蹤有用的信息。而對於進一步的錯誤分析,我們也需要。 – mreichelt 2011-03-10 22:13:16

+0

感謝您的回答:mreichelt:其實它不會崩潰,我的壞,只是停止響應和凍結。我想,基本上,使用while()循環並請求位置更新不起作用。我只是在onLocationChanged方法中使用if語句。 – Petar 2011-03-10 23:35:11

回答

1

看這可能是你需要什麼

Proximity Alert

+0

太棒了!我怎麼可能以前沒有看到它。肯定會幫助我很多。 – Petar 2011-03-10 23:15:01

+0

不客氣。很高興我能幫上忙。如果您將正確答案標記爲正確(點擊左側的複選標記),您的計算器接受評分將提高,人們更可能幫助您。歡迎來到stackoverflow ;-) – n3utrino 2011-03-10 23:19:13

2

我認爲你想要做的是讓你的活動實現LocationListener,即訂閱GPS修正。例如。

public class MyActivity extends Activity implements LocationListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // request current location updates 
     LocationManager locMan = (LocationManager) getSystemService(LOCATION_SERVICE); 
     // set here the criteria for location provider accuracy 
     Criteria locationProviderCriteria = new Criteria(); 
     locationProviderCriteria.setAccuracy(Criteria.ACCURACY_FINE); 
     String locationProvider = locMan.getBestProvider(locationProviderCriteria, true); 
     locMan.requestLocationUpdates(locationProvider, MIN_TIME_BETWEEN_UPDATES_IN_MILLIS, MIN_DISTANCE_BETWEEN_UPDATES_IN_METERS, this); 
    } 

    /* 
    * This method will be called on each location update 
    */ 
    @Override 
    public void onLocationChanged(Location loc) { 
     //put here your logic to see whether the user reached the destination 
    } 
} 
相關問題