2011-03-10 6 views
2

Android 앱을 개발 중이며 기기가 lat 및 lon으로 설명 된 특정 시점에 도달했는지 확인해야합니다. 내가 생각할 수있는 유일한 방법은 다음과 같습니다.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()); 

    } 

그러나 이로 인해 프로그램이 중단됩니다. 네가 나를 올바른 방향으로 이끌 수 있다면 나는 매우 감사하게 생각한다.

추가 질문을 할 기회를 갖도록하겠습니다. 내가 안드로이드와 GPS에 익숙하지 않다는 것을 염두에두고 GPS를 사용하는 응용 프로그램을 올바르게 개발하는 방법에 대한 문서와 정보는 거의 없다. 기본적으로 나는 장님으로 작업하고있다. 그래서 내 질문은 : 내가 뭘하려고 오전 내가로 제공 한 트랙의 시작에 도달 할 때 프로그램이 결정하는 것입니다

  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(); 

      } 

    } 

:

이 같은 onLocationChanged 방법은 모습입니다 포인트 세트. 따라서 프로그램을 시작하면 거리에 대한 합리적인 추정치가 제공됩니다. 문제는 내가 움직이기 시작할 때 거리가 업데이트되지 않는 것처럼 보입니다. 그러나 50 미터를 움직이면 업데이트됩니다. 반면에 응용 프로그램을 시작하고 시작 지점에서 10m 이내에 있지 않으면 올바르게 감지합니다. 그래서 기본적으로, 내가 장치와 함께 움직이는 동안, onLocationChanged 메소드는 지금 내가있는 정확한 위치를 알려주지 않는 것 같습니다. 내가 뭘 잘못하고 있는지 말해 줄 수 있니?

+0

를 필요로하는 것을 정확하게 수 있습니다. 그리고 추가적인 오류 분석을 위해서도 우리는 그것을 필요로합니다. – mreichelt

+0

답변 주셔서 감사합니다 : mreichelt : 실제로, 내 나쁜, 단지 응답을 멈추지 않는 충돌하지 않습니다. 기본적으로 while() 루프를 사용하고 위치 업데이트를 요청하면 작동하지 않는다고 생각합니다. onLocationChanged 메서드에서 if 문을 사용하기 만하면됩니다. – Petar

답변

1

봐 그것은 당신이 충돌 당신이 당신의 로그 캣에서 스택 추적에 유용한 정보를 찾을 수 있었다 경우

Proximity Alert

+0

그것은 훌륭합니다! 전에 어떻게 보지 못했을까요? 확실히 나를 많이 도와 줄 것입니다. – Petar

+0

반갑습니다. 기꺼이 도와 드릴 수 있습니다. 올바른 답으로 플래그를 지정하면 (왼쪽에있는 체크 표시를 클릭하십시오) stackoverflow 허용 등급이 올라가고 사람들이 더 많은 도움을받을 수 있습니다. stackoverflow에 오신 것을 환영합니다 ;-) – n3utrino

2

내 생각에는 GPS 수신기를 구독하는 등 LocationReference를 구현하는 것이 좋습니다. 예 : 이것

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 
    } 
} 
관련 문제