2012-03-18 4 views
3

은 정확하지 않아도 (정확히 1km 정도의 정확도)이 필요하지 않은 GPS 위치를 찾으려고합니다. 그러나 매우 필요합니다. 빠른! 나는이 리스너를 등록Android : GPS 위치를 빠르게 얻으십시오.

(1S-5S) :

mlocListener = new MyLocationListener(); 
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); 
mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mlocListener); 

하지만 그 수정을 발견하는 데 시간이 너무 오래 걸립니다! 누구든지 위치를 더 빨리 찾을 수있는 방법을 알고 있습니까 (기본적으로 장치가있는 현재의 마을이 필요합니다). 감사합니다.

답변

5

그 기준을 사용하여 기준을 정의 할 수 있습니다.

public void setCriteria() { 
     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_FINE); 
     criteria.setAltitudeRequired(false); 
     criteria.setBearingRequired(false); 
     criteria.setCostAllowed(true); 
     criteria.setPowerRequirement(Criteria.POWER_MEDIUM); 
     provider = locationManager.getBestProvider(criteria, true); 
    } 

자세한 내용은 link을 참조하십시오.

그런 다음 공급자를 사용하여 위치를 가져 오십시오.

희망이 도움이 될 것입니다 ...

7

매우 세밀한 위치가 필요하지 않으므로 빠르게해야하므로 getLastKnownLocation을 사용해야합니다. 이런 식으로 뭔가 :

LocationManager lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE); 
Criteria crit = new Criteria(); 
crit.setAccuracy(Criteria.ACCURACY_COARSE); 
String provider = lm.getBestProvider(crit, true); 
Location loc = lm.getLastKnownLocation(provider); 

편집 : 안드로이드 데브 블로그는이 일에 좋은 포스트 here 있습니다. 블로그의 스 니펫은 모든 위치 제공 업체를 반복하여 마지막으로 알려진 위치를 얻습니다. 이것은 당신이 원하는 것 같습니다

List<String> matchingProviders = locationManager.getAllProviders(); 
for (String provider: matchingProviders) { 
    Location location = locationManager.getLastKnownLocation(provider); 
    if (location != null) { 
    float accuracy = location.getAccuracy(); 
    long time = location.getTime(); 

    if ((time > minTime && accuracy < bestAccuracy)) { 
     bestResult = location; 
     bestAccuracy = accuracy; 
     bestTime = time; 
    } 
    else if (time < minTime && 
      bestAccuracy == Float.MAX_VALUE && time > bestTime){ 
     bestResult = location; 
     bestTime = time; 
    } 
    } 
} 
+0

'ACCURACY_FINE'은 (는) 원하는 것과 반대 방향으로 들립니다. –

+0

제 잘못입니다. ACCURACY_COARSE (으)로 변경됨 –

관련 문제