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를 사용할 것이지만 매초마다 호출됩니다.
귀하의 도움이 필요합니다. 고맙습니다.
답장을 보내 주셔서 감사합니다. 나는 'minTime'이 힌트라는 것을 알고있다. 그래서'Timer'와'Handler'를 사용하려고했습니다. 고정 된 시간 간격으로 GPS 좌표가 필요합니다. 이 간격은 항상 충족되어야합니다. 나가 간격이 2 분 어쩌면 30 분을 쓰는 곳에 그러나 중요한 것은 간격이 정확하게 완료된다이다. 때로는 효과적이고 때로는 불가능한 것이어야합니다. – jos1980
비슷한 위치에 로깅을 했어. 필자는 AlarmManager를 사용하고 PendingIntent를 Service 구성 요소에 보냈습니다. 이것은 귀하의 활동이 포 그라운드에 있는지 여부에 관계없이 발생합니다. – jsmith
이 댓글을 답으로 입력하십시오. 그렇게하면 사람들은 좋은 대답으로 투표하게됩니다. AlarmManager에 대해 감사합니다. 나는 당신이 말하는 것을 시도 할 것입니다. – jos1980