SSukha 地图开发者文档

入门指南

2.1 环境准备与获取 Key

工程基线为 JDK 17、Gradle 8.7、Android Gradle Plugin 8.5.2、compileSdk 34、minSdk 23;源码使用 Java 11,开启 desugaring。客户工程可使用经自行验证的其他兼容版本。

申请Sukha Android Key 时提供:应用 applicationId、实际 APK 签名证书 SHA1、授权数据集及地图/搜索/路线/导航能力。调试证书和正式证书分别登记。高德 Key 不可用于Sukha服务。

2.2 配置工程

将解压出的 maven 放到客户工程根目录的 vendor/sukha/maven。

// settings.gradle
dependencyResolutionManagement {
    repositories {
        maven { url = uri("$rootDir/vendor/sukha/maven") }
        google()
        mavenCentral()
    }
}
// app/build.gradle
android {
    compileSdk 34
    defaultConfig { minSdk 23 }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
        coreLibraryDesugaringEnabled true
    }
}
dependencies {
    implementation 'cn.sukha.maps:maps-core:0.1.0-alpha.23'
    implementation 'cn.sukha.maps:maps-services:0.1.0-alpha.19'
    implementation 'cn.sukha.maps:maps-location:0.1.0-alpha.21'
    // 自定义导航时引入
    implementation 'cn.sukha.maps:maps-navigation-services:0.1.0-alpha.36'
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.3'
}

若采用完整地图界面,选择 maps-ui:0.1.0-alpha.79,由 POM 引入其依赖。不要混用不同批次模块。第三方 AndroidX、MapLibre 等依赖仍由 Google/Maven Central 获取。

2.3 配置 Manifest

<!-- manifest 节点下 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 使用定位才需要以下权限;还需宿主进行运行时申请 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<!-- application 节点内,替换成自己的授权信息 -->
<meta-data android:name="cn.sukha.maps.API_KEY" android:value="YOUR_ANDROID_KEY" />
<meta-data android:name="cn.sukha.maps.SERVICE_URL" android:value="https://map.sukha.cn" />
<meta-data android:name="cn.sukha.maps.DATASET_ID" android:value="YOUR_DATASET_ID" />

示例经纬度位于演示数据范围;YOUR_DATASET_ID 由提供方分配,不能用示例坐标推断覆盖全国或全球。

2.4 显示第一张地图

下面是 Activity 的最小结构,在宿主完成所需的授权流程后进入此页。它不主动申请或启动定位。

package example;

import android.app.Activity;
import android.os.Bundle;
import cn.sukha.mapsdk.maps.MapView;
import cn.sukha.mapsdk.maps.CameraUpdateFactory;
import cn.sukha.mapsdk.maps.model.LatLng;
import cn.sukha.mapsdk.services.core.MapsInitializer;

public class QuickStartActivity extends Activity {
    private MapView mapView;
    @Override public void onCreate(Bundle state) {
        super.onCreate(state);
        MapsInitializer.initialize(this);
        mapView = new MapView(this);
        setContentView(mapView);
        mapView.onCreate(state);
        mapView.getMapAsync(map -> map.moveCamera(
            CameraUpdateFactory.newLatLngZoom(
                new LatLng(21.67623, 100.02228), 16)));
    }
    @Override protected void onStart() { super.onStart(); mapView.onStart(); }
    @Override protected void onResume() { super.onResume(); mapView.onResume(); }
    @Override protected void onPause() { mapView.onPause(); super.onPause(); }
    @Override protected void onStop() { mapView.onStop(); super.onStop(); }
    @Override protected void onSaveInstanceState(Bundle out) {
        super.onSaveInstanceState(out); mapView.onSaveInstanceState(out);
    }
    @Override public void onLowMemory() { super.onLowMemory(); mapView.onLowMemory(); }
    @Override protected void onDestroy() { mapView.onDestroy(); super.onDestroy(); }
}

宿主还需在 Manifest 声明此 Activity。getMapAsync 表示地图控制对象可用,不保证所有网络数据已加载。通过 MapView.setOnMapLoadListener 的 onMapLoadError(SdkException) 接收数据加载失败。

2.5 示例约定

后续示例为方法体片段,context 为 Activity/Context,map 是 getMapAsync 得到的 SukhaMap,report(value) 表示宿主更新界面或记录日志。示例并非全部顺序执行。常用 imports:

import cn.sukha.mapsdk.maps.*;
import cn.sukha.mapsdk.maps.model.*;
import cn.sukha.mapsdk.services.core.*;
import cn.sukha.mapsdk.services.poisearch.*;
import cn.sukha.mapsdk.services.inputtips.*;
import cn.sukha.mapsdk.services.geocoder.*;
import cn.sukha.mapsdk.services.route.*;
import cn.sukha.mapsdk.location.SukhaLocationClient;
import cn.sukha.mapsdk.location.SukhaLocationClientOption;