• iOS学习之应用之间的操作(转发)


    首先要说的是每一个APP都可以设置一个自己独有的URL,APP应用之间的操作就是通过这个URL来实现的!

    1、如何配置自己应用的URL?

    关于自己的URL,作为资深的程序猿都会想到 Info.plist ,在 Info.plist 中如下图配置:

    2、APP中判断手机上是否存在另一个APP

    核心方法:

    [[UIApplication sharedApplication] canOpenURL:url];

    该方法的实质就是检测当前你的APP是否可以打开对应URL的APP,如果可以打开说明你手机中装有这个APP,反之打不开就没有这个APP。

    这样我们可以通过这个方法先检测后跳转到我们需要跳的应用,例如:我们可以在自己的APP中检测手机上已有的地图导航,有选择的展示和进行跳转。

    复制代码
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) { // 判断是否存在高德地图
            // 配置高德地图导航所需要的参数
            NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
            NSString *appName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
            NSString *appUrlScheme = @"Myapp://"; //TODO
            NSString *urlString = [NSString stringWithFormat:@"iosamap://navi?sourceApplication=%@&backScheme=%@&poiname=%@&lat=%f&lon=%f&dev=0&style=2", appName,appUrlScheme, station.name,endCoor.latitude, endCoor.longitude];
    
            NSDictionary *dic = @{@"name": @"使用高德地图导航", @"url": urlString};
            [self.availableMaps addObject:dic];
        }
        if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://map/"]]) { // 判断是否存在百度地图
            // 配置百度地图导航所需要的参数
            CLLocationCoordinate2D begin = [YDCoordinateConverter transform:startCoor];
            NSString *urlString = [NSString stringWithFormat:@"baidumap://map/direction?origin=latlng:%f,%f|name:我的位置&destination=latlng:%f,%f|name:%@&mode=driving&coord_type=gcj02", begin.latitude, begin.longitude, endCoor.latitude, endCoor.longitude, station.name];
    
            NSDictionary *dic = @{@"name": @"使用百度地图导航", @"url": urlString};
            [self.availableMaps addObject:dic];
        }
        if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"qqmap://map/"]]) { // 判断是否存在腾讯地图
            // 配置腾讯地图导航所需要的参数
            NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
            NSString *appName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
    
            NSString *format = @"qqmap://map/routeplan?type=drive&fromcoord=%f, %f&tocoord=%f,%f&coord_type=2&policy=0&refer=%@";
    
            NSString *urlString = [NSString stringWithFormat:format, startCoor.latitude, startCoor.longitude, endCoor.latitude, endCoor.longitude, appName];
    
            NSDictionary *dic = @{@"name": @"使用腾讯地图导航", @"url": urlString};
            [self.availableMaps addObject:dic];
        }
    复制代码

    以上代码是判断对应的地图APP并配置导航所需要的参数,拼接成URL,下面就为大家介绍这个URL如何使用!

    3、APP之间的跳转及参数传递

    核心方法:

    [[UIApplication sharedApplication] openURL:url];

     这里的URL就是上述代码中的URL,我针对一个URL进行分析一下

    qqmap://map/routeplan?type=drive&fromcoord=%f, %f&tocoord=%f,%f&coord_type=2&policy=0&refer=%@

    上面的URL中,qqmap://map/ 为腾讯地图APP的 URL Scheme 

    如果在不传参数的情况下,跳转代码如下:

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"qqmap://map/"]];

    至于qqmap://map/后面的部分为我们要传递的参数,也就是说,我们要传递什么参数就直接将参数拼接到URL上面就可以!

    代码如下:(接上面选择地图APP)

    NSDictionary *mapDic = self.availableMaps[index];
    NSString *urlString = mapDic[@"url"];
    urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:urlString];
    [[UIApplication sharedApplication] openURL:url];

    4、接受参数并处理

    在我们跳转到的APP里都应该实现一个方法,通过这个方法对接收到的参数进行处理

    核心方法:

    复制代码
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
        // 处理接收到的URL
        ...
        return YES;
    }
    复制代码

    这个方法从URL中分割出对应的参数并进行处理!

  • 相关阅读:
    Scala编译环境搭建(mac IDEA)
    Scala初见
    boost spirit使用
    基于OPENCV的图像融合
    C++获取hostname&IP&MAC地址
    httpd启动检查
    react eslint 代码格式补全的插件
    将html页面导出为word
    redux的笔记
    img onerror事件的使用
  • 原文地址:https://www.cnblogs.com/like359881584/p/6669405.html
Copyright © 2020-2023  润新知