Android高德地图SDK

简介

Android高德地图SDK是一套功能强大的地图开发工具包,提供了地图展示、定位功能、路径规划、POI搜索等功能,可以帮助开发者快速集成地图功能到自己的Android应用中。

安装

首先,在项目的build.gradle文件中添加如下依赖:

implementation 'com.amap.api:3dmap:x.y.z'  // 使用最新版本号替换x.y.z

然后,同步项目以使依赖生效。

地图展示

在项目中,我们可以通过地图来展示地理位置信息。下面是一个简单的示例,展示了如何在Android应用中显示一个地图,并将地图中心设置为指定的经纬度。

import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.CameraPosition;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.MarkerOptions;

public class MainActivity extends AppCompatActivity implements AMap.OnMapLoadedListener {
    
    private MapView mapView;
    private AMap aMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mapView = findViewById(R.id.map_view);
        mapView.onCreate(savedInstanceState);

        if (aMap == null) {
            aMap = mapView.getMap();
            aMap.setOnMapLoadedListener(this);
        }
    }

    @Override
    public void onMapLoaded() {
        LatLng latLng = new LatLng(39.904989, 116.405285);
        aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10f));

        MarkerOptions markerOptions = new MarkerOptions()
                .position(latLng)
                .title("北京")
                .snippet("中国的首都");
        aMap.addMarker(markerOptions);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        mapView.onSaveInstanceState(outState);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }
}

在示例中,我们首先在布局文件中添加了一个MapView来显示地图。然后,在onCreate方法中,我们初始化了地图对象,并在地图加载完成后设置了地图的中心位置为北京,并添加了一个标记点。最后,我们需要在相应的生命周期方法中调用MapView的对应方法,以便地图能够正确的创建、销毁和恢复。

定位功能

除了地图展示,高德地图SDK还提供了定位功能,可以帮助我们获取手机当前的位置信息。下面是一个示例,展示了如何使用高德地图SDK进行定位。

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;

public class MainActivity extends AppCompatActivity implements AMapLocationListener {

    private static final int LOCATION_PERMISSION_REQUEST_CODE = 1;

    private AMapLocationClient locationClient;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    LOCATION_PERMISSION_REQUEST_CODE);
        } else {
            initLocation();
        }
    }

    private void initLocation() {
        AMapLocationClientOption option = new AMapLocationClientOption();
        option.setOnceLocation(true);

        locationClient = new AMapLocationClient(getApplicationContext());
        locationClient.setLocationOption(option);
        locationClient.setLocationListener(this);

        locationClient.startLocation();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == LOCATION_PERMISSION_REQUEST_CODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                initLocation();
            } else {
                // 处理权限被拒绝的情况
            }
        }