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

我做的这个项目接触到了地图,有地图就有导航(后面会详细讲解百度地图使用方法)。关于导航百度地图里面有导航的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检测用户是否安装相关程序)