2014-03-02 8 views
0

위치 업데이트를 10 분마다 받으려고하는데 위치 업데이트 시간이 일치하지 않습니다. 언젠가 나는 10 분 후에 위치 업데이트를 얻으며 때로는 2 시간 후에 위치 업데이트를 얻습니다. 앱이 백그라운드 스레드에서 위치 정보를 가져옵니다. 여기 Android - LocationManager requestLocationUpdates - 위치 업데이트가 일치하지 않습니다.

코드입니다 : 나는 또한 두 값, minTime (10)와 minDistance (10m)를 설정했지만, 나는 심지어 1~2분 후 업데이트를

_locationManager.requestLocationUpdates(
       LocationManager.GPS_PROVIDER, 
       10 * 60 * 1000, 
       0, 
       _locationListener, 
       _gpsHandlerThread.getLooper()); 

. minTime과 minDistance에 OR 논리가 있는지 확실하지 않습니다. 즉 시간 간격이 10 분이거나 사용자가 10 미터 이동했거나 논리가있는 경우입니다.

내 요구 사항은 다음과 같습니다. - 사용자가 마지막 위치에서 10 미터 떨어진 곳에서 10 분 간격으로 사용자 위치를 가져옵니다.

어떻게이 작업을 수행 할 수 있습니까? 작동 원리에 대해 조금만 설명하면 도움이됩니다.

+0

를 사용하는 경우를

private Handler customHandler = new Handler(); private Runnable updateTimerThread = new Runnable() { @Override public void run() { try { Location myLocation = mGoogleMap.getMyLocation(); secndLocationListener.onLocationChanged(myLocation); } catch (Exception e) { Log.getStackTraceString(e); } } }; 

전화를 얻기 위해' LocationManager.GPS_PROVIDER'에서 첫 번째 수정 사항을 얻는 데 최대 20 분이 소요될 수 있습니다. 위성 - 당신이 하늘의 명확한 전망을 필요는 말할 것도없고 즉 실내에있는 경우 작동하지 않습니다. 반면에 'LocationManager.NETWORK_PROVIDER'는 장치가 무선 네트워크에 연결되는 즉시 위치 업데이트를 제공 할 수 있습니다. 단점은이 방법이 사용 된 GPS 방법보다 덜 정확하다는 것입니다. – ChuongPham

답변

0

이렇게하는 가장 좋은 방법은 requestLocationUpdates를 사용하는 것이 아니라 주기적으로 업데이트를 시작하는 타이머를 사용하는 것입니다. 그렇게하면 불필요하게 배터리를 다 쓸 필요가 없어집니다. 그래서 나는 이런 식으로 일을 끝내야합니다.

  1. 나는 GPS 값이 마음에 들지 않는지 몇 가지 검사를했습니다.
  2. GPS에 만족하면 업데이트를 제거하고 타이머를 시작하여 다시 업데이트를 시작합니다.
  3. 응용 프로그램을 다시 시작할 때마다 업데이트가 제공됩니다. GPS를 업데이트를 다시 시작

코드는 다음과 같습니다

Timer mTimer; 
private void sendFinalGps() { 
    mLocationManager.removeUpdates(this); 
    mTimer = new Timer(); 
    mTimer.schedule(new findGpsTime(), getTimeBetweenUpdates()); 
} 
1

사용자가이 핸들러를 위치이 당신이

customHandler.postDelayed(updateTimerThread , 10 * 60 * 1000); 
관련 문제