美文网首页iOS Developer
iOS检测用户是否安装相关程序

iOS检测用户是否安装相关程序

作者: 梦iOS | 来源:发表于2016-11-15 17:03 被阅读0次

    我做的这个项目接触到了地图,有地图就有导航(后面会详细讲解百度地图使用方法)。关于导航百度地图里面有导航的API,但是我觉得自己嵌入的话很麻烦,就是用了其他程序来完成导航。

    我这边默认检测的地图APP只有苹果地图、百度地图、高德地图。

    检测手机内是否安装百度app,返回布尔类型

    URL Schemes:baidumap://

    Schemes,表示的是一个 URL 中的一个位置——最初始的位置,即://之前的那段字符。比如http://www.apple.com这个网址的Schemes是http

    [[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"baidumap://"]]

    这里插入一个小细节,在IOS9之后,苹果进一步完善了安全机制,必须在plist里面设置url scheme白名单,不然无法打开对应的应用

    info.plist

    我这里并没有添加系统地图哦

    手机内未安装百度地图客户端将不会显示在UIAlertController内(苹果地图、高德地图同理)

    //百度地图

    UIAlertAction *baiDUMap;

    if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {

    baiDUMap = [UIAlertActionactionWithTitle:@"百度地图"style:UIAlertActionStyleDestructivehandler:^(UIAlertAction*_Nonnullaction) {

    //CLLocationCoordinate2D start_loc = CLLocationCoordinate2DMake(30.99957127410806,105.8939575078758);

    _mapAppName=@"百度地图";

    [selfalertTextfield];

    }];

    [alertControlleraddAction:baiDUMap];

    }

    UIAlertController全部代码:

    #pragma弹出alertController

    -(void)alertChangeMapAppView{

    UIAlertController*alertController = [[UIAlertControlleralertControllerWithTitle:@"检测到适合的地图软件"message:@"推荐使用高德地图"preferredStyle:UIAlertControllerStyleActionSheet]init];

    UIAlertAction*cameraAction = [UIAlertActionactionWithTitle:@"取消"style:UIAlertActionStyleCancelhandler:^(UIAlertAction*action) {

    }];

    UIAlertAction*iPhoneMapAction = [UIAlertActionactionWithTitle:@"苹果地图"style:UIAlertActionStyleDestructivehandler:^(UIAlertAction*action) {

    _mapAppName=@"苹果地图";

    //NSString *oreillyAddress = @"成都市青羊区天府广场";//测试使用中文也可以找到经纬度具体的可以多尝试看看~

    [selfalertTextfield];

    }];

    //百度地图

    UIAlertAction*baiDUMap;

    if([[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:@"baidumap://"]]) {

    baiDUMap = [UIAlertActionactionWithTitle:@"百度地图"style:UIAlertActionStyleDestructivehandler:^(UIAlertAction*_Nonnullaction) {

    //CLLocationCoordinate2D start_loc = CLLocationCoordinate2DMake(30.99957127410806,105.8939575078758);

    _mapAppName=@"百度地图";

    [selfalertTextfield];

    }];

    [alertControlleraddAction:baiDUMap];

    }

    //高德地图

    UIAlertAction*gaoDeDUMap;

    if([[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:@"iosamap://"]]) {

    gaoDeDUMap = [UIAlertActionactionWithTitle:@"高德地图"style:UIAlertActionStyleDestructivehandler:^(UIAlertAction*_Nonnullaction) {

    _mapAppName=@"高德地图";

    [selfalertTextfield];

    }];

    [alertControlleraddAction:gaoDeDUMap];

    }

    [alertControlleraddAction:cameraAction];

    [alertControlleraddAction:iPhoneMapAction];

    [selfpresentViewController:alertControlleranimated:YEScompletion:nil];

    }

    选择地图APP后弹出输入框,让用户键入终点地址

    这里就不贴全部代码了,只说怎么将中文地址转位经纬度吧

    //将中文地点转换为坐标系

    //起点

    CLGeocoder *myGeocoder = [[CLGeocoder alloc]init];

    [myGeocodergeocode AddressString:@“成都市青羊区天府广场” completionHandler:^(NSArray*placemarks,NSError*error) {

    //CLPlacemark *firstPlacemark = [placemarks objectAtIndex:0];

    _endPlacemark= [placemarksobjectAtIndex:0];//获取终点坐标

    if([placemarkscount] >0&& error ==nil)

    {

    if([_mapAppNameisEqualToString:@"苹果地图"]) {

    [selfopenAppleMap];

    }elseif([_mapAppNameisEqualToString:@"百度地图"]){

    [selfopenBaiDuMap];

    }elseif([_mapAppNameisEqualToString:@"高德地图"]){

    [selfopenGaoDeMap];

    }

    }

    elseif([placemarkscount] ==0&& error ==nil)

    {

    NSLog(@"Found no placemarks.");

    }

    elseif(error !=nil)

    {

    NSLog(@"An error occurred = %@", error);

    }

    }];

    打开百度地图

    #pragma打开百度地图

    -(void)openBaiDuMap{

    //CLLocationCoordinate2D end_loc = CLLocationCoordinate2DMake(_endPlacemark.location.coordinate.latitude,_endPlacemark.location.coordinate.longitude);

    NSString*urlString = [[NSStringstringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=%@&mode=driving&coord_type=bd09ll",_endPlacemark.location.coordinate.latitude,_endPlacemark.location.coordinate.longitude,_end_textfield.text]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlString]];

    }

    打开高德地图

    #pragma打开高德地图

    -(void)openGaoDeMap{

    //CLLocationCoordinate2D end_loc = CLLocationCoordinate2DMake(_endPlacemark.location.coordinate.latitude,_endPlacemark.location.coordinate.longitude);

    NSString*urlString = [[NSStringstringWithFormat:@"iosamap://navi?sourceApplication=%@&backScheme=%@&lat=%f&lon=%f&dev=0&style=2",@"公务用车",@"GongWuYongChe",_endPlacemark.location.coordinate.latitude,_endPlacemark.location.coordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlString]];

    }

    相关文章

      网友评论

        本文标题:iOS检测用户是否安装相关程序

        本文链接:https://www.haomeiwen.com/subject/bjclpttx.html