2012-12-14 2 views
0

는 [I이 2010 년 다시 묻는 질문에 대한 중복 알고 있어요하지만 그 질문은 정말 대답도 없었어]을 locationManager minDistance 설정 문제

내가 안드로이드에 내 윈도우 폰 애플리케이션의 일부를 변환하고있어합니다. 앱은 모두 운동 추적을 중심으로 회전합니다. WP7에서 위치 감시자는 GPS가 이동 이벤트를 트리거하는 데 필요한 이동량을 설정하는 "MovementThreshold"속성을 가지고 있습니다. 일반적으로 우리는 걸을 때 더 낮은 문턱을, 제트 비행기에서 더 높은 문턱을 원합니다. 속도가 바뀌면 움직임이 발생할 때마다 변경되는 코드로 조절할 수 있습니다.

 if (mph < 7) watcher.MovementThreshold = 5; 
      else if (mph < 15) watcher.MovementThreshold = 20; 
      else if (mph < 30) watcher.MovementThreshold = 100; 
      else if (mph < 50) watcher.MovementThreshold = 400; 
      else if (mph < 100) watcher.MovementThreshold = 800; 
      else if (mph < 120) watcher.MovementThreshold = 1200; 
      else if (mph < 200) watcher.MovementThreshold = 2400; 
      else if (mph < 400) watcher.MovementThreshold = 4800; 
      else watcher.MovementThreshold = 9000; 

현재 내 응용 프로그램 내 안드로이드 버전에서 나는 다음과 같은 호출 내 위치 서비스가 시작 한 번 ... locMgr.requestLocationUpdates (LocationManager.GPS_PROVIDER, 0, 0, locLstnr를) 만들;

그 세 번째 매개 변수는 WP7에서 MovementThreshold와 매우 비슷하게 들리는 minDistance (이제 0으로 설정 됨)입니다.

내 첫 번째 질문은 내 WP7 앱에서 MovementThreshold를 조절하는 것과 같은 방법으로 Android 앱에서 minDistance를 조절할 수 있습니까? 두 번째 질문은 : 어떤 종류의 호출이 가장 효과적일까요? - 위의 requestLocationUpdates가 minDistance 매개 변수를 변경하는 호출을 반복할까요? 감사합니다, 게리

답변

0

내 WP7 앱에서 MovementThreshold를 조절하는 것과 같은 방식으로 Android 앱에서 minDistance를 조절할 수 있습니까?

IMHO. 속도가 다양하므로 속도를 결정할 수 있도록 지속적인 GPS 수정이 필요하므로 스로틀을 조절할 수 있으므로 스로틀을 무력화시킬 수 있습니다. 특히, 제트 비행기가 착륙 할 때, 사용자가 도보 (또는 자동차)로 처음 몇 킬로미터를 여행하기를 기다리고 있기 때문에, 이것을 발견하기까지는 약간의 시간이 걸릴 것입니다.

물론 WP7에서도 그렇게해야 할 것입니다. 그렇다면 어떻게 그걸 당기고 있는지 모르겠습니다.

개인적으로 개인적으로 필터링하려면 직접 을 사용하는 것이 좋습니다.

어떤 종류의 호출이 가장 효과적일까요? - 위의 requestLocationUpdates가 minDistance 매개 변수를 변경하는 호출을 반복할까요?

원칙적으로 그렇습니다. 그러나 문서 인용 :

minDistance 매개 변수를 사용하여 위치 업데이트 빈도를 제어 할 수도 있습니다. 값이 0보다 크면 위치 공급자가 최소한 minDistance 미터가 변경되고 최소 minTime 밀리 초가 지나면 응용 프로그램에 업데이트를 보냅니다. 그러나 위치 제공 업체가 minDistance 매개 변수를 사용하여 전력을 절약하는 것이 더 어렵 기 때문에 minTime이 배터리 수명을 보존하는 주요 도구가되어야합니다.

(여기 minTime에 관한 문서 주석은 안드로이드의 새 버전 정말 관련이 있습니다, 안드로이드 1.x에서/2.x를 힌트로 minTime을 사용하지 필터)

0

가장 효율적인 방법은 시간을 기준으로 한 스로틀입니다.문서는 이미 다른 답변에서 인용되었지만 장치가 거리 측정을 수행하고 거리 임계 값을 계산하기 전에 필터링해야하는 것은 분명해야하지만 시간 임계 값은 장치가 위치 측정을하지 않도록합니다.

폴링에 고정 된 시간을 사용하여 업데이트를 한 번만 설정하면됩니다. "내 앱이 거리 변화에 대해 얼마나 빨리 알 필요가 있습니까?" 하나의 숫자를 넣을 수 있다면 (1 초, 100 초, 무엇이든), 업데이트 시간으로 사용하십시오. 콜백 함수에 대한 추가 호출을 피하려면 minDistance도 사용할 수 있습니다.

임계 값은 이미 "시간"입니다. 당신은 속도 (mph)를 계산하고 있으며 거리 임계 값 (미터, WP7의 "MovementThreshold"는 미터 단위이기 때문에 미터로 가정)을 사용하면 임계 값 (거리/거리)에서 거리를 이동하는 데 걸리는 시간을 쉽게 계산할 수 있습니다. 속도 및 단위 변경)를 입력하고 해당 숫자를 minTime으로 사용하십시오. 장치가 속도를 변경하지 않은 경우 시간 이전의 측정 값이 거리 임계 값보다 커야합니다. 이것은 찾고있는 슬라이딩 스케일을 제공하지만 더 효율적인 minTime을 사용합니다.

속도가 변경된 경우 새 속도로 처음 읽는 때까지 폴링 시간이 꺼집니다. 나는 이것이 당신에게 중요하지 않다고 생각합니다. 왜냐하면 이러한 변화를 높은 해상도로 감지하는 것이 중요하다면, 아마도 거리 대신에 시간을 기준으로 이미 폴링하고있을 것입니다.

관련 문제