2011-08-29 2 views
1

MapView 애플리케이션에서 내 위치 수신기에 문제가 있습니다. 특히 시간에 문제가있어서 실제 위치가지도에 그려집니다.Android : Mapview의 위치 업데이트가 오래 걸립니다. 위치가 정확합니다.

MapView에 두 개의 수신기가 연결되었습니다. 첫 번째는 네트워크 신호를 기다리고 두 번째 신호는 GPS 신호를 기다립니다. 리스너 구현의 시작 부분에서 다른 제공자가 위치를 검색하는 동안 시간을 ​​줄이기 위해 마지막으로 알려진 위치를 얻습니다.

다음과 같이지도보기 나의 LocationListner가 호출

:

public void locationManager(){ 

    mLocationUpdateHandlerGPS  = new LocationUpdateHandler(); 
    mLocationUpdateHandlerNetwork = new LocationUpdateHandler(); 

    mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    //-------Check if Network is available----- 
    mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mLocationUpdateHandlerNetwork); 

    //-------Check if GPS is available--------- 
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 1, mLocationUpdateHandlerGPS); 


} 

내가 리스너는 다음과 같습니다 구현 된 LocationUpdateHandler.class :지도 내가 로그 출력을 확인 시작되면

public class LocationUpdateHandler implements LocationListener { 

    @Override 
    public void onLocationChanged(Location location) { 

     location = mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

     int lat = (int) (location.getLatitude() * 1E6); 
     int lng = (int) (location.getLongitude() * 1E6); 

     //Log Actual Position 
     Log.v(TAG, "Actual Postion // Get Latitude: " + lat);   
     Log.v(TAG, "Actual Postion // Get Longitude: " + lng); 

     mMyLocationOverlay.enableMyLocation(); 
     Log.v(TAG, "Enable Location returns: "+mMyLocationOverlay.enableMyLocation()); 

     mMyLocationOverlay.runOnFirstFix(new Runnable() { 
      @Override 
      public void run() { 
       mMapView.getController().animateTo(
         mMyLocationOverlay.getMyLocation()); 
      } 
     }); 
    } 

} 

을 DDMS에서 위치 정보가 도착 시간임을 알 수 있습니다.

08-29 14:50:16.136: VERBOSE/GeoTagMapActivity(7300): Running Activity GeoTagMapActivity 
08-29 14:50:20.691: VERBOSE/GeoTagMapActivity(7300): Enable Location returns: true 
08-29 14:50:20.691: VERBOSE/GeoTagMapActivity(7300): Actual Postion // Get Latitude: ******* 
08-29 14:50:20.691: VERBOSE/GeoTagMapActivity(7300): Actual Postion // Get Longitude: ******* 

그럼에도 불구하고 위치가지도에 표시 될 때까지 2 ~ 5 분 정도 걸립니다.

어디서 문제가 있는지 잘 모릅니다. 도움 주셔서 감사합니다.

+0

이 질문에 대한 답변을하지 못할 수도 있지만 실제로 [실제] 수정을받는 데 몇 분이 걸리는 경우가 있습니다. 가장 최근에 나온 앱은 GPS를 사용하고 있으며, 내가 시작한 시점을 알기 때문에 좌절감을 느낍니다. 최근에 픽스를 얻지 못하면 몇 분이 걸릴 것입니다. – Jack

+1

mMyLocationOverlay.runOnFirstFix (새의 Runnable() { @Override 공공 무효 실행() { mMapView.getController() animateTo ( mMyLocationOverlay.getMyLocation());. } }); 이 대신에. mMapView.getController()를 작성하십시오. animateTo ( mMyLocationOverlay.getMyLocation()); 시도 해봐. – user370305

+0

안녕하세요 @ 잭 감사합니다. 하지만 지금은 좀 혼란 스럽습니다. 로그 파일에서 볼 수 있듯이 앱이 위치를 잡을 때까지 4 초 밖에 걸리지 않습니다. – Chris

답변

1

MyLocationOverlay은 Android 용 Google지도의 도우미 클래스입니다. 그것은 자신의 위치 획득, 더 구체적으로 GPS를 사용하여 수행합니다.

코드를 실행하기 전에 runOnFirstFix(runnable) (으)로 전화하기 때문에 GPS 수정 프로그램을 기다리는 중입니다. 때로는 (특히 실내) 분이 소요될 수 있습니다. 따라서 지연. 또한 네트워크 기반 위치를 획득하는 것은 전적으로 가능하지만 GPS 위치 (특히 실내)를 획득 할 수 없으므로이 경우 코드가 실행되지 않습니다 (단, MyLocationOverlay은 시간 초과 후 네트워크 제공 업체로 돌아가는 것을 제외하고 - 이것은 어디에서도 설명되지 않음).

로그에 표시되는 위치는 네트워크 위치 제공 업체 (Wi-Fi 및 셀 네트워크 위치)를 통해 획득 한 위치입니다.

댓글에서 제안 된 @ user370305와 마찬가지로 runOnFirstFix()을 삭제하면됩니다.

+0

안녕 피터와 @ user370305. 우리의 답변에 많은 감사드립니다. runOnFirstFix()를 제거하고 MapController.animateTo (GeoPoint)로 초기 위치를 설정 한 후에 매우 부드럽게 실행됩니다. :) – Chris

관련 문제