MapView的XML需要
com.mapbox.mapboxsdk.maps.MapView
不
com.mapbox.mapboxsdk.views.MapView
使用最新的Mapbox Android SDK版本时可能会有所帮助的其他内容:
implementation ('com.mapbox.mapboxsdk:mapbox-android-sdk:8.4.0@aar'){
transitive=true
}
确保包括所有必需的权限以及遥测服务:
<service android:name="com.mapbox.mapboxsdk.telemetry.TelemetryService" />
为了在8.4.0中控制MapView,有一个新方法叫做
getMapAsync
它监听地图何时准备好。完成后,您可以添加标记、更改相机位置等。
以下是请求许可的方法:
Mapbox.getInstance(this, ACCESS_TOKEN);
你的
onCreate
方法应该如下所示:
String ACCESS_TOKEN = "ACCESS_TOKEN_HERE"
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Be sure to call this setContentView
Mapbox.getInstance(this, ACCESS_TOKEN);
setContentView(R.layout.activity_main);
mapView = (MapView) findViewById(R.id.mapview);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(MapboxMap mapboxMap) {
// add markers, change camera position, etc. here!
}
...
最后,确保在活动生命周期中包含所有mapView方法。它看起来像这样:
// Activity lifecycle methods
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
public void onResume() {
super.onResume();
mapView.onResume();
}
@Override
public void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}