The scarecrow's blog

No heart, No lung!

使用高德地图SDK过程中的各种坑

1. APP内调起高德地图导航

高德文档描写如下:

1
2
3
4
5
6
7
8
9
10
11
//配置导航参数
MANaviConfig * config = [[MANaviConfig alloc] init];
config.destination = view.annotation.coordinate;//终点坐标,Annotation的坐标
config.appScheme = [self getApplicationScheme];//返回的Scheme,需手动设置
config.appName = [self getApplicationName];//应用名称,需手动设置
config.style = MADrivingStrategyShortest;
//若未调起高德地图App,引导用户获取最新版本的
if(![MANavigation openAMapNavigation:config])
{
[MANavigation getLatestAMapApp];
}

实际情况

  • 2.5.0 SDK使用此方法调用导航都无任何反应 [MANavigation openAMapNavigation:config] 返回为成功
  • 2.6.0 SDK查无此类

解决方法

  • 更新SDK为2.6.0 pod 'AMap2DMap', '~> 2.6.0'

代码修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
//配置导航参数
MANaviConfig * config = [[MANaviConfig alloc] init];
config.destination = _parkingCoordinate;         //终点坐标,Annotation的坐标    
config.appScheme = [self getApplicationScheme];  //返回的Scheme,需手动设置
config.appName = [self getApplicationName];      //应用名称,需手动设置
config.strategy = MADrivingStrategyShortest;

//若未调起高德地图App,引导用户获取最新版本的
if(![MAMapURLSearch openAMapNavigation:config])
{
[MAMapURLSearch getLatestAMapApp];
}

2. - (void)setZoomLevel:(double)newZoomLevel animated:(BOOL)animated; 失效

使用情况

  • 2.5.0 SDK使用此方法设置一次,永久有效
  • 2.6.0 SDK使用此方法设置无效,需要延时设置

解决方法,代码如下

1
2
3
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.mapView setZoomLevel:14.f animated:YES];
});