1,效果如
2,设置info.plist
info.plist下检测是否设置平台Scheme,对于需要配置的平台,如果没有配置,将无法正常跳转平台客户端,因此需要配置Scheme名单。本文我们需要添加百度地图和高德地图的scheme白名单。
操作方法:在项目的info.plist中添加LSApplicationQueriesSchemes字段,类型是Array,然后添加两个Item。
如图:
3,代码附上:如下
#pragma mark -- 设置导航
-(void)thridMapNavgationMath{
//导航到某个地方
self.navcoordinate = CLLocationCoordinate2DMake(39.3183, 116.9206);
//系统版本高于8.0,使用UIAlertController
if (IS_SystemVersionGreaterThanEight) {
UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"导航到还车点" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
NSMutableAttributedString *alertControllerStr = [[NSMutableAttributedString alloc] initWithString:@"导航到还车点"];
//设置字体颜色
[alertControllerStr addAttribute:NSForegroundColorAttributeName value:BC_RGBColor(0x333333) range:NSMakeRange(0, 0)];
[alertControllerStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:14] range:NSMakeRange(0, 0)];
[alertController setValue:alertControllerStr forKey:@"attributedTitle"];
// //自带地图
// [alertController addAction:[UIAlertAction actionWithTitle:@"自带地图" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
//
// NSLog(@"alertController -- 自带地图");
//
// //使用自带地图导航
// MKMapItem *currentLocation =[MKMapItem mapItemForCurrentLocation];
//
// MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:self.navcoordinate addressDictionary:nil]];
//
// [MKMapItem openMapsWithItems:@[currentLocation,toLocation] launchOptions:@{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
// MKLaunchOptionsShowsTrafficKey:[NSNumber numberWithBool:YES]}];
//
//
// }]];
//判断是否安装了高德地图,如果安装了高德地图,则使用高德地图导航
if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
UIAlertAction *gaodeAction =[UIAlertAction actionWithTitle:@"高德地图" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"alertController -- 高德地图");
NSString *urlsting =[[NSString stringWithFormat:@"iosamap://navi?sourceApplication= &backScheme= &lat=%f&lon=%f&dev=0&style=2",self.navcoordinate.latitude,self.navcoordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:urlsting]];
}];
[gaodeAction setValue:BC_RGBColor(0x32d2dc) forKey:@"titleTextColor"];
[alertController addAction:gaodeAction];
// [alertController addAction:[UIAlertAction actionWithTitle:@"高德地图" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
//
// NSLog(@"alertController -- 高德地图");
// NSString *urlsting =[[NSString stringWithFormat:@"iosamap://navi?sourceApplication= &backScheme= &lat=%f&lon=%f&dev=0&style=2",self.navcoordinate.latitude,self.navcoordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// [[UIApplication sharedApplication]openURL:[NSURL URLWithString:urlsting]];
//
// }]];
}
//判断是否安装了百度地图,如果安装了百度地图,则使用百度地图导航
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
UIAlertAction *baiduAction = [UIAlertAction actionWithTitle:@"百度地图" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"alertController -- 百度地图");
NSString *urlsting =[[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",self.navcoordinate.latitude,self.navcoordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlsting]];
}];
[baiduAction setValue:BC_RGBColor(0x32d2dc) forKey:@"titleTextColor"];
[alertController addAction:baiduAction];
// [alertController addAction:[UIAlertAction actionWithTitle:@"百度地图" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
//
// NSLog(@"alertController -- 百度地图");
// NSString *urlsting =[[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",self.navcoordinate.latitude,self.navcoordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlsting]];
//
// }]];
}
//添加取消选项
UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
[alertController dismissViewControllerAnimated:YES completion:nil];
}];
[cancleAction setValue:BC_RGBColor(0x32d2dc) forKey:@"titleTextColor"];
[alertController addAction:cancleAction];
// [alertController addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
//
// [alertController dismissViewControllerAnimated:YES completion:nil];
//
// }]];
//显示alertController
[self presentViewController:alertController animated:YES completion:nil];
}
else { //系统版本低于8.0,则使用UIActionSheet
UIActionSheet * actionsheet = [[UIActionSheet alloc] initWithTitle:@"导航到还车点" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"自带地图", nil];
//如果安装高德地图,则添加高德地图选项
if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
[actionsheet addButtonWithTitle:@"高德地图"];
}
//如果安装百度地图,则添加百度地图选项
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
[actionsheet addButtonWithTitle:@"百度地图"];
}
[actionsheet showInView:self.view];
}
}
#pragma mark - UIActionSheetDelegate
- (void)actionSheetCancel:(UIActionSheet *)actionSheet
{
NSLog(@"ActionSheet - 取消了");
[actionSheet removeFromSuperview];
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"numberOfButtons == %ld",actionSheet.numberOfButtons);
NSLog(@"buttonIndex == %ld",buttonIndex);
if (buttonIndex == 0) {
NSLog(@"自带地图触发了");
MKMapItem *currentLocation =[MKMapItem mapItemForCurrentLocation];
MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:self.navcoordinate addressDictionary:nil]];
[MKMapItem openMapsWithItems:@[currentLocation,toLocation] launchOptions:@{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
MKLaunchOptionsShowsTrafficKey:[NSNumber numberWithBool:YES]}];
}
//既安装了高德地图,又安装了百度地图
if (actionSheet.numberOfButtons == 4) {
if (buttonIndex == 2) {
NSLog(@"高德地图触发了");
NSString *urlsting =[[NSString stringWithFormat:@"iosamap://navi?sourceApplication= &backScheme= &lat=%f&lon=%f&dev=0&style=2",self.navcoordinate.latitude,self.navcoordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:urlsting]];
}
if (buttonIndex == 3) {
NSLog(@"百度地图触发了");
NSString *urlsting =[[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",self.navcoordinate.latitude,self.navcoordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlsting]];
}
}
//安装了高德地图或安装了百度地图
if (actionSheet.numberOfButtons == 3) {
if (buttonIndex == 2) {
if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
NSLog(@"只安装的高德地图触发了");
NSString *urlsting =[[NSString stringWithFormat:@"iosamap://navi?sourceApplication= &backScheme= &lat=%f&lon=%f&dev=0&style=2",self.navcoordinate.latitude,self.navcoordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:urlsting]];
}
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
NSLog(@"只安装的百度地图触发了");
NSString *urlsting =[[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",self.navcoordinate.latitude,self.navcoordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlsting]];
}
}
}
}
4:小结:(1),自己项目没用到自带地图导航,所以注释掉了
(2)调用自己地图需注意添加#import<MapKit/MapKit.h>才能调用