2016-12-10 1 views
1

상당히 간단한 설정 (아래 참조)으로 안드로이드 (7.0 및 7.1에서 Nexus 5x로 테스트)에서 MapBox를 사용하고 있습니다. 이상한 점은 휴대 전화가 움직이지 않거나 내가 걷고있는 것처럼 사용되면지도가 표류하기 시작한다는 것입니다. 아래 코드 샘플은 복제 할 최소값입니다. 추가 위치 수신기를 추가하고 Mapbox에도 첨부했습니다. 흥미로운 점은 내가 표류 할 때 Mapbox SDK (4.1.1)의 버그라고 생각하게 만드는 위치 변경을위한 로그가 없다는 것입니다.지도 상자 내 위치 표류 안드로이드

무슨 일이 일어날 지 생각해보십시오.

public class MainActivity extends AppCompatActivity { 

    private MapView mMapView; 
    private MapboxMap mMap; 
    private LocationManager mLocationManager; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mMapView = (MapView) findViewById(R.id.map); 
     mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     mMapView.onCreate(); 
     mMapView.getMapAsync(this::onMapReady); 
     // To keep the example short I'm skipping the permissions. 
     mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_UPDATE_MIN_TIME, 
      GPS_UPDATE_MIN_DISTANCE, this::onLocationChanged); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle state) { 
     super.onSaveInstanceState(state); 
     mMapView.onSaveInstanceState(state); 
    } 

    @Override 
    public void onLowMemory() { 
     super.onLowMemory(); 
     mMapView.onLowMemory(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     mMapView.onDestroy(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     mMapView.onResume(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     mMapView.onPause(); 
    } 

    private void onMapReader(MapboxMap map) { 
     mMap = map; 
     mMap.getTrackingSettings() 
       .setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW); 
     mMap.setOnMyLocationChangeListener(this::onLocationChanged); 
    } 

    private onLocationChanged(Location location) { 
      Log.d("Map", "Mapbox location @ " + location.getLatitude() + ", " + location.getLongitude()); 
    } 
} 

레이아웃은 다음과 같습니다

<com.mapbox.mapboxsdk.maps.MapView 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:style_url="@string/mapbox_style_url" 
     app:tilt="45" 
     app:scroll_enabled="false" 
     app:zoom_enabled="false" 
     app:rotate_enabled="false" 
     app:logo_enabled="false" 
     app:attribution_enabled="false" 
     app:my_location_enabled="true" 
     app:compass_enabled="false"/> 

답변

1

좋아, 그럼 문제는 여기에 추적 모드가되는지도보기의 초기화 동안 리셋 (및 moveCamera에 대한 호출이 있다는 사실이었다.

mMap.getTrackingSettings() 
     .setDismissLocationTrackingOnGesture(false); 
1

을 나뿐만 아니라 이런 식으로 뭔가가 발생했습니다 나는 그것이 TrackingSettings#setDismissLocationTrackingOnGesture(false)와 아무 상관이 있다고 생각하지 않는다, 당신은 아마 당신이있어 이후 있음을 호출 할 않지만 :. 솔루션을 추가했다 추적 모드를 설정합니다.

TRACKING_FOLLOWa bug I submitted과 함께 사용하도록 설정된 것 같습니다. 지도 박스 안드로이드 SDK는 일반 GPS보다는 융합 된 위치 센서를 사용합니다. 나는 때때로 GPS 위치를 잃거나 네트워크 기반 위치에 우선 순위를 부여하는 것으로 나타났습니다. 이 경우 위치 정확도 원이 매우 커지고 위치 표시기가 가장 가까운 셀 타워의 방향으로 이동합니다.