2012-06-11 2 views
0

2 분마다 장치의 GPS 위치 추적을 저장해야하는 응용 프로그램을 개발 중입니다. 테스트를 위해2 분마다 GPS 추적 (requestLocationUpdates, Timer 또는 Handler)

locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 120000L, 0f, this); 

가 나는 삼성 갤럭시 미니 (안드로이드 2.3.5)를 사용
첫 번째 시도는 requestLocationUpdates를 사용하는 것이 었습니다.
USB 케이블을 연결하여 디버그 모드로 테스트를 수행하면 모든 것이 완벽하게 작동합니다. 2 분마다 위치가 바뀝니다.
문제는 USB를 분리하고 거리로 가서 테스트하는 것입니다. 이렇게하면 매초 GPS 위치를 얻습니다. 너무 많아. USB 케이블로 디버그 모드에서 응용 프로그램을 테스트하는 경우

new Timer().scheduleAtFixedRate(new TimerTask(){ 
    @Override 
    public void run() { 
     Location loc=getLastBestLocation(Activity.this); 
     GpsStore.save(loc); 
    } 
}, 120000L, 120000L); 

가 다시 말하지만, 모든 것이 잘 진행

:
많은 리뷰 내 코드 후 나는 타이머를 사용하기로 결정했습니다.
응용 프로그램이 포 그라운드에있는 경우 모두 정상적으로 작동하면 응용 프로그램이 백그라운드에서 실행될 경우 TimerTask가 2 분마다 실행되지 않고 중지되고 응용 프로그램이 포 그라운드로 갑자기 돌아 오면 모든 응용 프로그램이 갑자기 실행됩니다 그것이 정상적으로 실행 된 TimerTask의 시간을 곱하십시오. 그러나 모든 것은 약 1 초 만에 신속하게 이루어집니다.

는 다시 많은 리뷰 내 코드 후, 내가 대신 타이머 핸들러로 사용하기로 결정 :

 final Handler handler = new Handler(); 
     Runnable runnable = new Runnable() { 
      public void run() { 
            Location loc=getLastBestLocation(Activity.this); 
            GpsStore.save(loc); 

       handler.removeCallbacks(this); 
       handler.postDelayed(this,120000L); 
      } 
     }; 
     handler.removeCallbacks(runnable); 
     handler.postDelayed(runnable, 120000L); 

항상 모든 USB와 디버그 모드에서 작동합니다. 내가 거리에서 테스트를 할 때 응용 프로그램이 핸들러에 의해 포어 그라운드에있을 때 정확히 2 분마다 1을 실행하는 경우가 있지만, 애플리케이션이 백그라운드에서 Runnable을 사용하여 핸들러는 2 분마다 실행되지 않고 실행되지 않습니다.

나는 단지 requestLocationUpdates를 사용할 것이지만 매초마다 호출됩니다.
귀하의 도움이 필요합니다. 고맙습니다.

답변

0

locationManager.requestLocationUpdates에 대한 설명서를 보면 minTime 인수는 힌트로 간주된다는 것을 알 수 있습니다. 실제 LocationProvider는 지정한 것보다 빨리 업데이트를 제공 할 수 있습니다. minDistance 값을 설정하는 것이 좋습니다. 최소 100m로 설정하십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 'minTime'이 힌트라는 것을 알고있다. 그래서'Timer'와'Handler'를 사용하려고했습니다. 고정 된 시간 간격으로 GPS 좌표가 필요합니다. 이 간격은 항상 충족되어야합니다. 나가 간격이 2 분 어쩌면 30 분을 쓰는 곳에 그러나 중요한 것은 간격이 정확하게 완료된다이다. 때로는 효과적이고 때로는 불가능한 것이어야합니다. – jos1980

+0

비슷한 위치에 로깅을 했어. 필자는 AlarmManager를 사용하고 PendingIntent를 Service 구성 요소에 보냈습니다. 이것은 귀하의 활동이 포 그라운드에 있는지 여부에 관계없이 발생합니다. – jsmith

+0

이 댓글을 답으로 입력하십시오. 그렇게하면 사람들은 좋은 대답으로 투표하게됩니다. AlarmManager에 대해 감사합니다. 나는 당신이 말하는 것을 시도 할 것입니다. – jos1980