简介

地图服务SDK是一套Android系统地图开发调用的接口,地图数据可以覆盖海外绝大多数国家,支持多种语言。地图采用WGS84 GPS坐标系,满足绝大多数海外地图开发的需求。您可以轻松地在自己的Android应用中加入地图相关的功能,包括:

您将建立什么

您可通过地图服务SDK可以开发地图相关的App,比如:

您将会学到什么

硬件要求

软件要求

集成Map Kit能力,您需要完成以下准备工作:

具体操作,请按照HUAWEI HMS Core集成准备中详细说明来完成。

1. - 登录AppGallery Connect网站,选择"我的项目"。
2. - 在项目列表中找到您的项目,在项目下的应用列表中选择需要开通地图服务的应用。
3. - 前往"项目设置 > API管理"中开启"Map Kit"权限。

添加应用的AppGallery Connect配置文件。

  1. 下载应用中的"agconnect-services.json"配置文件。
  2. 将"agconnect-services.json"配置在模块级目录下。

添加编译依赖

  1. 打开应用级的"build.gradle"文件。
  2. 在"dependencies"中添加如下编译依赖。
    dependencies { implementation 'com.huawei.hms:maps:{version}' }
  3. 在文件头添加配置apply plugin: ‘com.huawei.agconnect'
  1. 在"AndroidManifest.xml"中"application"同级标签添加权限申请。
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  2. 在layout中添加MapView 。文件位置为"\mapdemo\app\src\main\res\layout\activity_main.xml"。
    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.huawei.hms.maps.MapView xmlns:map="http://schemas.android.com/apk/res-auto" android:id="@+id/mapView" android:layout_width="match_parent" android:layout_height="match_parent" map:cameraTargetLat="51" map:cameraTargetLng="10" map:cameraZoom="8.5" map:mapType="normal" map:uiCompass="true" map:uiZoomControls="true" /> </LinearLayout>
  3. 在活动中添加MapView的调用。文件位置为"\mapdemo\app\src\main\java\com\wz\android\mapdemo\MainActivity.java"。
    Java示例代码如下:
    package com.wz.android.mapdemo; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import com.huawei.hms.maps.HuaweiMap; import com.huawei.hms.maps.MapView; import com.huawei.hms.maps.OnMapReadyCallback; /** * map activity entrance class */ public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { private static final String TAG = "MapViewDemoActivity"; // HUAWEI map private HuaweiMap hMap; private MapView mMapView; private static final String MAPVIEW_BUNDLE_KEY = "MapViewBundleKey"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // get mapview instance mMapView = findViewById(R.id.mapView); Bundle mapViewBundle = null; if (savedInstanceState != null) { mapViewBundle = savedInstanceState.getBundle(MAPVIEW_BUNDLE_KEY); } // please replace "Your API key" with api_key field value in // agconnect-services.json MapsInitializer.setApiKey("Your API key"); mMapView.onCreate(mapViewBundle); // get map instance mMapView.getMapAsync(this); } @Override public void onMapReady(HuaweiMap map) { // get map instance in a callback method Log.d(TAG, "onMapReady: "); hMap = map; } }

    Kotlin示例代码如下:

    package com.huawei.mapkitsample import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity import com.huawei.hms.maps.CameraUpdateFactory import com.huawei.hms.maps.HuaweiMap import com.huawei.hms.maps.MapView import com.huawei.hms.maps.OnMapReadyCallback import com.huawei.hms.maps.model.LatLng import com.huawei.hms.maps.util.LogM /** * map activity entrance class */ class MapViewDemoActivity : AppCompatActivity(), OnMapReadyCallback { // HUAWEI map private var hMap: HuaweiMap? = null private var mMapView: MapView? = null companion object { private const val TAG = "MapViewDemoActivity" private const val MAPVIEW_BUNDLE_KEY = "MapViewBundleKey" } override fun onCreate(savedInstanceState: Bundle?) { LogM.d(TAG, "onCreate:") super.onCreate(savedInstanceState) setContentView(R.layout.activity_mapview_demo) mMapView = findViewById(R.id.mapView) var mapViewBundle: Bundle? = null if (savedInstanceState != null) { mapViewBundle = savedInstanceState.getBundle(MAPVIEW_BUNDLE_KEY) } mMapView?.apply { onCreate(mapViewBundle) getMapAsync(this@MapViewDemoActivity) } } override fun onMapReady(map: HuaweiMap) { Log.d(TAG, "onMapReady: ") hMap = map } }
  4. 调用MapView的生命周期。文件位置为"\mapdemo\app\src\main\java\com\wz\android\mapdemo\MainActivity.java"。
    Java示例代码如下:
    @Override protected void onStart() { super.onStart(); mMapView.onStart(); } @Override protected void onStop() { super.onStop(); mMapView.onStop(); } @Override protected void onDestroy() { super.onDestroy(); mMapView.onDestroy(); } @Override protected void onPause() { mMapView.onPause(); super.onPause(); } @Override protected void onResume() { super.onResume(); mMapView.onResume(); }

    Kotlin示例代码如下:

    override fun onStart() { super.onStart() mMapView?.onStart() } override fun onStop() { super.onStop() mMapView?.onStop() } override fun onDestroy() { super.onDestroy() mMapView?.onDestroy() } override fun onPause() { mMapView?.onPause() super.onPause() } override fun onResume() { super.onResume() mMapView?.onResume() }
  5. 确认是否已开启所需权限。文件位置为"\mapdemo\app\src\main\java\com\wz\android\mapdemo\MainActivity.java"。
    Java示例代码如下:
    private static boolean hasPermissions(Context context, String... permissions) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && permissions != null) { for (String permission : permissions) { if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { return false; } } } return true; }

    Kotlin示例代码如下:

    private fun hasPermissions(context: Context, vararg permissions: String): Boolean { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { for (permission in permissions) { if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { return false } } } return true }

编译、加载、调试

使用Android Studio自带的Gradle编译工具,双击"installDebug",即可安装Demo。

打开开发调试版本的地图Demo后,查看地图是否能够展示。

干得好,您已经成功完成了codelab并学到了:

  1. 造成返回码010001或010002可能的原因?更多错误码解析请参见错误码
  2. 更多关于地图服务的功能请参见地图服务指南文档
  3. 您可以点击下载源码
Code copied