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 {
// 处理权限被拒绝的情况
}
}