2013-07-26 3 views
12

Criteria 클래스에는 두 개의 상수 인 ACCURACY_HIGHACCURACY_FINE이 있으며 이는 정확도가 높은 위치 업데이트를 반환하기 위해 LocationManager을 요구하는 것으로 명백하게 사용됩니다. 여기에 documentation는 각각의 상수에 대해 말씀입니다 :정확도가 높은 기준 : ACCURACY_HIGH 또는 ACCURACY_FINE?

A constant indicating a finer location accuracy requirement 
    Constant Value: 1 (0x00000001) 

공공 정적 최종 INT ACCURACY_HIGH (API에 추가 된 공공 정적 최종 INT ACCURACY_FINE (1 API 수준에서 추가)

9 급)

a constant indicating a high accuracy requirement - may be used for horizontal, altitude, speed or bearing accuracy. For horizontal and vertical position this corresponds roughly to an accuracy of less than 100 meters. 
    Constant Value: 3 (0x00000003) 

가합니까 이 두 상수 중 어느 것이 제공되는지 (즉, 요구 사항) 최고 정확도?

답변

16

소스 코드에서 볼 수 있듯이 ACCURACY_FINE은 ACCURACY_COARSE로 그룹화되어 있으며 각각 1 & 2의 상수 값을 갖습니다. ACCURACY_LOW, MEDIUM 및 HIGH가 상수 값 1과 함께 그룹화 2 & 3.

setAccuracy 기대와 것 같다 COARSE 또는 FINE, setVerticalAccuracy, setHorizontalAccuracy, setSpeedAccuracy 및 setBearingAccuracy는 LOW, MEDIUM 또는 HIGH 기대하면서 수익률 중 하나.

public void setAccuracy(int accuracy) { 
    if (accuracy < NO_REQUIREMENT || accuracy > ACCURACY_COARSE) { 
     throw new IllegalArgumentException("accuracy=" + accuracy); 
    } 
    if (accuracy == ACCURACY_FINE) { 
     mHorizontalAccuracy = ACCURACY_HIGH; 
    } else { 
     mHorizontalAccuracy = ACCURACY_LOW; 
    } 
} 

정말 혼란,하지만 난 당신을 위해 조금을 정리 희망 : 당신이 setAccuracy를 호출 할 때 또한, 그것은과 같이 수평 정밀도를 설정합니다. grepcode에있는 소스에 대한 링크가 있습니다. 소스를 로컬에 가지고 있지 않으면 다운로드하여 직접 볼 수 있습니다.

+0

고마워요! 안타깝게도, 안드로이드 문서가 조금 부족한 또 다른 사례 인 것 같습니다. 소스 코드 링크가 도움이됩니다! – robguinness

+2

너무 많이 애원하지 마라. 그러나 만일 그 대답이 당신을 도왔다면, 당신은 그것을 받아 들일 수 있었다! – npace

+0

나는 대답을 받기 전에 하루나 이틀 동안 질문을하고 싶다. 나는 당신을 upvote 했어! – robguinness

5

두 상수는 가장 높은 정확도를 나타내지 만 다른 방법을위한 것입니다. 문서에서 (질문 이후에 업데이트되었을 수 있음) :

ACCURACY_FINEsetAccuracy에 대한 유효한 입력입니다.

ACCURACY_HIGHsetBearingAccuracy는, setHorizontalAccuracy, setSpeedAccuracysetVerticalAccuracy 유효 입력된다.

나는이 모델링의 아이디어는 LOW, MEDIUMHIGH이 더 미묘한 차이를 허용하는 반면 FINECOARSE, 당신에게 두 쪽의 선택을 줄 것으로 믿습니다. (setSpeedAccuracyLOWHIGH을 허용하여 모델링 것을 조롱하는 이유 문제는 남아있다. 그러나,이 문서 또는 디자인 중 하나에서 버그가 수 있습니다. :)) 영업 이익에서 언급 한 바와 같이

, 그들은 나중에 그 값을 도입, API 수준 9, FINE-COARSE의 API 수준 1과 대조됩니다. npace에있는 코드는 안드로이드 개발자가 내부적으로 일관성을 유지하기 위해 모든 것을 LOW에서 HIGH 값의 이름과 값으로 매핑한다는 것을 보여줍니다.장치가 실시간 위치를 제공 시작되면

-1

내 제안은 각 결과의 정확성을 확인하고 거부 고려하는 것입니다, 위치

의 정확성을 결정하는 여러 criteia 있습니다 있습니다 일정 금액보다 그 이상 귀하의 요구 사항에 따라. 위치 제공 업체가 더 오래 실행되고 기기에 하늘이 보이지 않고 휴대 전화 연결 상태가 좋으면 일반적으로 정확도가 특정 포인트까지 올라간 다음 수평으로 떨어지며 변동합니다. 다음은 각 GPS 위치 결과의 정확성을 확인하는 방법을 보여주는 의사 코드는 다음과 같습니다

1 
2 
3 

다음은 정확도 임계 값의 일부 거친 예입니다. 이러한 서로 다른 임계 값이 응용 프로그램의 동작에 미치는 영향은 요구 사항에 따라 다를 수 있습니다. 이는 현재 위치를 대략적인 주소로 변환하는 지오 코딩이 필요한 예입니다. 결과에 따라 응용 프로그램은 사용자에게 서로 다른 피드백을 제공했습니다.

Rooftop <= 10 meters (desired result) 
Street >10 meters and <= 100 meters (let user know it’s close but not perfect. Good enough?) 
Neighborhood > 100 meters and <= 500 meters (give visual feedback that accuracy is low) 
City > 500 meters and <= 2000 meters (ask user to verify city name from a list) 
County > 2000 meters (prompt for manual location input) 

사용자 고유의 사용 사례를 고려하십시오. 앱이 NFL 게임에서 공개 주차장을 찾도록 돕는 경우 100 미터 (328 피트) 이상의 정확도 값을 완전히 거부 할 수 있습니다. 반경 5 마일 (8000m) 이내의 치과 의사 사무실 목록을 반환하는 앱을 가질 수 있습니다. 또는 날씨 앱은 대략 당신이 어느 도시에 있는지 알 필요가 있습니다. 이는 단지 당신을 생각하게하는 데 도움이되는 아이디어 일뿐입니다.

public void onLocationChanged(Location location) { 
     if(location.getAccuracy() < 100.0 && location.getSpeed() < 6.95){ 
       //Do something 
     } 
     else{ 
       //Continue listening for a more accurate location 
     }