简介

Android的Mapbox Maps SDK是一个开源工具集,用于在Android应用程序中显示地图。
Mapbox官网:https://docs.mapbox.com/android/maps/overview/
参考:Mapbox Android入门(一)

安装

1.添加依赖
在App的build.gradle 文件中,保证 minSdkVersion 大于等于14,添加 dependence :

dependencies {  implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:8.2.1'}

注:在为Android添加Mapbox Maps SDK之后,可能会出现与Gradle依赖项不匹配的情况。不要忘记你可以使用下面的“exclude group”来删除某些依赖关系:

implementation ('com.mapbox.mapboxsdk:mapbox-android-sdk:8.2.1'){    exclude group: 'group_name', module: 'module_name'}

此外,在命令行中运行 “gradle app_module_name_here:dependencies” 将打印依赖项列表。”./gradlew app:dependencies“ 如果你有一个Gradle包装器就可以工作。当多个库包含在一个项目中时,它们有助于对灵活的Gradle配置进行故障诊断。可以看到特定库带来的依赖关系以及冲突可能发生的位置。

2.获取Acess Token
在Mapbox的账户界面,获取 default public token 。在 R.strings.xml 中添加一条专门用于保存该token:

MAPBOX_ACCESS_TOKEN

然后,要将其传递到Maps SDK,您需要将 acess token 放在应用程序的 onCreate() 方法中。

public class MyApplication extends Application { @Overridepublic void onCreate() {super.onCreate(); // Mapbox Access tokenMapbox.getInstance(getApplicationContext(), pk.eyJ1IjoiMTU5OTUwODY2MTYiLCJhIjoiY2pzanBmejBiMTh4dDQ0cDY0NDk0Y3JobCJ9.sEmUKARVlNUTVbbVbrwGAw);}}

如果想在运行时切换 Mapbox 访问令牌,Maps SDK 还提供了一个 setToken() 方法。某些 Mapbox api 需要特殊的 Mapbox 令牌,比如中国的map。设置一个新的令牌可以同时使用多个 Mapbox 工具。此方法允许您在使用特定的 Mapbox 工具之前设置令牌,而不是在初始时设置令牌,并要求对所有与 Mapbox 相关的请求使用相同的令牌。如下:

Mapbox.setAccessToken(pk.eyJ1IjoiMTU5OTUwODY2MTYiLCJhIjoiY2pzanBmejBiMTh4dDQ0cDY0NDk0Y3JobCJ9.sEmUKARVlNUTVbbVbrwGAw);

3.设置权限
在 Manifest 文件中添加相应的权限:

< uses-permission android:name="android.permission.INTERNET" />< uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />< uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />< uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

4.添加地图到应用中
首先在activity_main.xml引入mapview组件:

然后,下面示例中给出了将地图加入到activity的方法,包含了创建activity、设置token、导入样式,以及设计map组件。
MainActivity.java:

private MapView mapView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Mapbox.getInstance(this, pk.eyJ1IjoiMTU5OTUwODY2MTYiLCJhIjoiY2pzanBmejBiMTh4dDQ0cDY0NDk0Y3JobCJ9.sEmUKARVlNUTVbbVbrwGAw);setContentView(R.layout.activity_main);mapView = (MapView) findViewById(R.id.mapView);mapView.onCreate(savedInstanceState);mapView.getMapAsync(new OnMapReadyCallback() {@Overridepublic void onMapReady(@NonNull MapboxMap mapboxMap) {mapboxMap.setStyle(Style.MAPBOX_STREETS, new Style.OnStyleLoaded() {@Overridepublic void onStyleLoaded(@NonNull Style style) {  // 现在已经设置了Map并加载了样式。可以在此处添加数据或进行其他地图调整。  }});}});

5.Lifecycle 方法
MapView 包含自己的生命周期方法,用于管理Android的 OpenGL 生命周期,该生命周期必须直接从包含的活动中调用。为了让您的应用程序正确地调用 MapView 的生命周期方法,您必须在包含 MapView 的活动中覆盖以下生命周期方法,并调用相应的 MapView 方法。一共需要override以下生命周期方法,并包含匹配的MapView方法。

onCreate();onStart();onResume();onPause();onStop();onSaveInstanceState();onLowMemory();onDestroy();

例如,onStart()方法应该是这样的:

@Overrideprotected void onStart() {super.onStart();mapView.onStart();}

注意,如果使用的是fragment,那么在fragment的 onDestroyView() 方法中调用mapview.onDestroy(),而不是在 onDestroy() 方法中调用。如下:

@Overridepublic void onDestroyView() {super.onDestroyView();mapView.onDestroy();}

Attribution归属

您必须在任何使用用于Android的 Mapbox Maps SDK 的地图上包含 Mapbox wordmark 和属性通知。SDK 提供了一个属性布局,其中包含所有必需的信息,可以用 xml 定制,也可以使用 uisetings 对象定制。您可以调整 Mapbox wordmark 和属性通知的位置,但它们必须在地图上保持可见。您还可以更改属性通知的背景和文本颜色,以匹配您的设计美学,但所有信息必须清晰易读。否则,您不能更改 Mapbox wordmark 或文本属性通知。如果您希望移动或删除 Mapbox wordmark,请与我们的销售团队联系,讨论在我们的企业计划下可用的选项。

Telemetry

Mapbox Telemetry是这个 SDK 中包含的一个功能强大的位置分析平台。默认情况下,每当主机应用程序要求收集匿名的位置和使用数据时,SDK 都会向 Mapbox 发送匿名的位置和使用数据。Mapbox 服务条款要求你的应用程序向用户提供一种方法,让他们单独选择不使用 Mapbox 遥测技术,这是自动提供的属性控制的一部分。如果隐藏了属性控件,则必须为用户提供一个可供选择的out选项。

XML属性

可以在 XML MapView 中添加ML属性,以进一步定制地图行为,例如设置起始摄像机位置、启用倾斜或调整屏幕上的罗盘位置。所有 MapView XML 属性都以 “mapbox_” 开头,用于标识和消除与其他库的任何潜在冲突。由于目前Android Studio的实现,您不能通过键入自动生成 MapView 属性。其中一些属性的使用示例如下:

MainActivity.java 完整代码

package com.example.myapplication;import android.os.Bundle;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import com.mapbox.mapboxsdk.Mapbox;import com.mapbox.mapboxsdk.maps.MapView;import com.mapbox.mapboxsdk.maps.MapboxMap;import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;import com.mapbox.mapboxsdk.maps.Style;public class MainActivity extends AppCompatActivity {    private MapView mapView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Mapbox.getInstance(this, getString(R.string.mapbox_access_token));        setContentView(R.layout.activity_main);        mapView = findViewById(R.id.mapView);        mapView.onCreate(savedInstanceState);        mapView.getMapAsync(new OnMapReadyCallback() {            @Override            public void onMapReady(@NonNull MapboxMap mapboxMap) {                mapboxMap.setStyle(Style.MAPBOX_STREETS, new Style.OnStyleLoaded() {                    @Override                    public void onStyleLoaded(@NonNull Style style) {                        // Map is set up and the style has loaded. Now you can add data or make other map adjustments.                    }                });            }        });    }    // Add the mapView lifecycle to the activity's lifecycle methods    @Override    public void onResume() {        super.onResume();        mapView.onResume();    }    @Override    protected void onStart() {        super.onStart();        mapView.onStart();    }    @Override    protected void onStop() {        super.onStop();        mapView.onStop();    }    @Override    public void onPause() {        super.onPause();        mapView.onPause();    }    @Override    public void onLowMemory() {        super.onLowMemory();        mapView.onLowMemory();    }    @Override    protected void onDestroy() {        super.onDestroy();        mapView.onDestroy();    }    @Override    protected void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        mapView.onSaveInstanceState(outState);    }}

更多相关文章

  1. eclipse 开发 android 快捷键!
  2. Android属性系统
  3. Android监听来电和去电的实现方法
  4. Android(安卓)JsBridge 源码解析
  5. listview使用小技巧
  6. EditText android:windowSoftInputMode 属性之旅
  7. Android(安卓)中文 API (22) ―― MultiAutoCompleteTextView
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. Android(安卓)SharedPreferences总结及优
  2. android检查手机网络状态
  3. ImageView属性中android:src和android:ba
  4. android 透明效果
  5. Android视频播放器ExoPlayer全屏
  6. [置顶] Android(安卓)Studio安装与使用(二
  7. android 模拟器上网 设置
  8. Android 短信发送
  9. 【MarsChen】D01_Android一日游
  10. Android加载对话框,异步执行代码的封装类