iOS实现设备判断是否安装相关地图(百度,高德等)

  

  

最近项目关于地图的,和朋友一起做的,他们用的高德地图,他做到半路有事,我来接手,结果我手机上没有安装高德地图,到我这边点击导航没啥反应,后来就查了一下,简单处理下,最终实现以下的需求:
  

  

点击导航,底部弹框,显示用户设备上所有的地图(一般就苹果自带的地图,百度地图,高德地图,当然了还有其他地,图个人感觉就这几个用的人比较多,其他的其实也类似)、下面话不多说了,来一起看看详细的介绍吧。

  

  

<强> 1,plist文件进行相关的配置
  

  

LSApplicationQueriesSchemes(这个一定不要写错,一定不要写错,一定不要写错,这个我是有教训的,说多了都是泪)这是一个数组,可以添加各地图的相关的url方案
  

  

常见的地图对应如下:
  

  
      <李>百度地图:baidumap李   <李>高德地图:iosamap李   <李>谷歌地图:comgooglemaps李   <李>腾讯地图:qqmap李   
  

 iOS实现设备判断是否安装相关地图(百度,高德等)

  

你也可以直接直接复制以下代码到plist文件

        & lt; key> LSApplicationQueriesSchemes   & lt; array>   & lt; string> baidumap   & lt; string> iosamap   & lt; string> comgooglemaps   & lt; string> qqmap   & lt;/array>      

<强> 2。使用系统的API判断设备是否安装相关的地图应用程序

        (保龄球)canOpenURL:(NSURL *) url NS_AVAILABLE_IOS (3 _0);      

<强>具体写发如下:

  

百度地图

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

高德地图

        [[UIApplication sharedApplication] canOpenURL:(NSURL URLWithString: @ " iosamap://"]]      

谷歌地图

        [[UIApplication sharedApplication] canOpenURL:(NSURL URLWithString: @ " comgooglemaps://"]]      

腾讯地图

        [[UIApplication sharedApplication] canOpenURL:(NSURL URLWithString: @ " qqmap://"]]      

该方法返回的bool值即可判断该设备有没有安装相关的地图应用
  

  

苹果自带的地图是不需要判断的

  

这里贴一段代码,需要的时候稍微修改下即可

        - (void) doNavigationWithEndLocation: endLocation (NSArray *)   {   NSMutableArray *地图=[NSMutableArray数组);//苹果原生地图——苹果原生地图方法和其他不一样   称为unaryoperations * iosMapDic=(称为unaryoperations字典);   iosMapDic[@“标题”]=@ "苹果地图”;   (地图addObject: iosMapDic);//百度地图   如果([[UIApplication sharedApplication] canOpenURL:(NSURL URLWithString: @ " baidumap://"]]) {   称为unaryoperations * baiduMapDic=(称为unaryoperations字典);   baiduMapDic[@“标题”]=@“百度地图”;   NSString * urlString=[[NSString stringWithFormat: @“baidumap://地图/方向# 63;起源={{我的位置}},目的地=latlng: % @, % @ | name=北京,模式=driving& coord_type=gcj02”, endLocation [0], endLocation [1]] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding);   baiduMapDic [@ " url "]=urlString;   (地图addObject: baiduMapDic);   }//高德地图   如果([[UIApplication sharedApplication] canOpenURL:(NSURL URLWithString: @ " iosamap://"]]) {   称为unaryoperations * gaodeMapDic=(称为unaryoperations字典);   gaodeMapDic[@“标题”]=@”高德地图”;   NSString * urlString=[[NSString stringWithFormat: @“iosamap://纳# 63;sourceApplication=% @& backScheme=% @& lat=% @&朗=% @& dev=0,风格=2”,@“导航功能”,@“nav123456 endLocation [0], endLocation [1]] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding);   gaodeMapDic [@ " url "]=urlString;   (地图addObject: gaodeMapDic);   }//谷歌地图   如果([[UIApplication sharedApplication] canOpenURL:(NSURL URLWithString: @ " comgooglemaps://"]]) {   称为unaryoperations * googleMapDic=(称为unaryoperations字典);   googleMapDic[@“标题”]=@“谷歌地图”;   NSString * urlString=[[NSString stringWithFormat: @“comgooglemaps://& # 63; x-source=% @& x-success=% @& saddr=, daddr=% @ % @& directionsmode=驾驶”,@“导航测试”,@“nav123456 endLocation [0], endLocation [1]] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding);   googleMapDic [@ " url "]=urlString;   (地图addObject: googleMapDic);   }//腾讯地图   如果([[UIApplication sharedApplication] canOpenURL:(NSURL URLWithString: @ " qqmap://"]]) {   称为unaryoperations * qqMapDic=(称为unaryoperations字典);   qqMapDic[@“标题”]=@“腾讯地图”;   NSString * urlString=[[NSString stringWithFormat: @“qqmap://地图/routeplan& # 63;从=我的位置,类型=drive& tocoord=% @ % @&=终点,coord_type=1,政策=0”,endLocation [0], endLocation [1]] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding);   qqMapDic [@ " url "]=urlString;   (地图addObject: qqMapDic);   }//选择   UIAlertController *警报=[UIAlertController alertControllerWithTitle: @”选择地图”信息:nil preferredStyle: UIAlertControllerStyleActionSheet);   NSInteger指数=maps.count;   for (int i=0;我& lt;指数;我+ +){   NSString *标题=地图[我][@“标题”);//苹果原生地图方法   如果(i==0) {   UIAlertAction *行动=[UIAlertAction actionWithTitle:标题风格:(UIAlertActionStyleDefault)处理程序:^ (UIAlertAction * _Nonnull行动){   (自我navAppleMapnavAppleMapWithArray: endLocation);   });   [警报addAction:行动];   继续;   }   UIAlertAction *行动=[UIAlertAction actionWithTitle:标题风格:UIAlertActionStyleDefault处理程序:^ (UIAlertAction * _Nonnull行动){   NSString * urlString=地图[我][@“url”);   [[UIApplication sharedApplication] openURL: [NSURL URLWithString: urlString]];   });   [警报addAction:行动];   }   UIAlertAction *行动=[UIAlertAction actionWithTitle: @”取消”风格:UIAlertActionStyleCancel处理程序:^ (UIAlertAction * _Nonnull行动){   });   [警报addAction:行动];   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

iOS实现设备判断是否安装相关地图(百度,高德等)