自己APP调起高德,百度和自带地图导航(小结)

1,效果如

自己APP调起高德,百度和自带地图导航(小结)_第1张图片
demo

2,设置info.plist

info.plist下检测是否设置平台Scheme,对于需要配置的平台,如果没有配置,将无法正常跳转平台客户端,因此需要配置Scheme名单。本文我们需要添加百度地图和高德地图的scheme白名单。

操作方法:在项目的info.plist中添加LSApplicationQueriesSchemes字段,类型是Array,然后添加两个Item。

如图:

设置infoplist

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才能调用

你可能感兴趣的:(自己APP调起高德,百度和自带地图导航(小结))