2013-11-15 4 views
2

... 아니면 내가 잘못하고 있습니다. 내가 원했던 것은 내가 집안을 걷는 모든 1 미터의 토스트를 보여주는 것입니다. 아래 코드는 잘못된 결과를 제공합니다. 휴대 전화에 앱을 설치하는 순간 이동하지 않고도 토스트를 얻을 수 있습니다!Android : 측정 된 거리 사이의 거리가 잘못되었습니다

public class MainActivity extends Activity { 

private LocationListener mLocationListener; 
private String mLocationProvider; 
private LocationManager mLocationManager; 
private Location mCurrentLocation; 
private int mCounter = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    mLocationListener = new MyLocationListener(); 

    Criteria criterion = new Criteria(); 
    criterion.setAccuracy(Criteria.ACCURACY_FINE); 
    criterion.setCostAllowed(true); 
    criterion.setPowerRequirement(Criteria.POWER_HIGH); 

    mLocationProvider = mLocationManager.getBestProvider(criterion, true);  
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    mCurrentLocation = mLocationManager.getLastKnownLocation(mLocationProvider); 
    mLocationManager.requestLocationUpdates(mLocationProvider, 5000, 1, mLocationListener); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    mLocationManager.removeUpdates(mLocationListener); 
} 

private class MyLocationListener implements LocationListener { 

    @Override 
    public void onLocationChanged(Location newlocation) { 
     float distance = mCurrentLocation.distanceTo(newlocation); 
     if (distance >= 1) { 
      mCounter++; 
      Toast.makeText(MainActivity.this, String.format("Message #%d: you walked one more meter", mCounter), Toast.LENGTH_SHORT).show(); 
      mCurrentLocation = newlocation; 
     } 
    }  
} 
} 
+0

앱을 설치 한 순간 거리 변수는 3.036으로 설정되었습니다. 사용하는 제공 업체가 gps가 아닌 네트워크 인 이유는 무엇입니까? – user2765861

+0

예, 네트워크 공급자가 불안정한 결과를 나타냅니다. 귀하의 위치는 지속적으로 변화합니다. – Naddy

+0

외부에 GPS를 사용하여 오도 된 결과를 받았지만 여전히 정확할 수도 있습니다. – user2765861

답변

0

GPS 신호는 1m 반경의 정확한 위치를 제공하기에 충분하지 않습니다. GPS를 사용하여 실제 상황에서 최대 50 - 100m의 편차가있을 수 있습니다. 이것은 당신이있는 환경에 많이 달려 있습니다. GPS는 건물, 물 등에 의해 반사됩니다. 평균 편차는 10 ~ 20m입니다. 네트워크 공급자 대신 GPS 공급자를 사용하여 건물 내부를 살펴보면이 상황이 더욱 악화됩니다.

더 이상 같은 좌표를 연속으로 두 번 얻을 수 없습니다. 이동하지 않더라도! 이를 피하기 위해 일시적으로 위치를 저장하고 새로운 위치와 비교할 수 있습니다. 그들 사이의 거리가 지정된 경계선에 도달하면 새 위치를 사용하십시오.

0

GPS로 위치 공급자를 변경하십시오. 그리고 새로운 위치를 요청하기 전에 LocationListener를 인스턴스화했습니다 (onResume(); onResume()은 onCreate() 후에 호출됩니다). 이는 시작시 토스트를 보여주는 앱의 이유 일 수 있습니다. requestLocationUpdates() 후에 LocationListener를 인스턴스화하려고 시도했을 수 있습니다.