• 使用openURL实现程序间带参数跳转详解


    使用openURL实现程序间带参数跳转详解

    实现的效果:有两款应用A与B,A打开B

    A --> B

    1. 新建工程B,bundle ID为com.YouXianMing.B

    建立一个URL

    这么填写(与前面bundle ID类似的写法):

    2. 新建工程A,bundle ID随便起,为简单起见,写下如下代码

        NSURL *url = [NSURL URLWithString:@"B://com.YouXianMing"];
        if ([[UIApplication sharedApplication] canOpenURL:url])
        {
            NSLog(@"跳转并打开");
            [[UIApplication sharedApplication] openURL:url];
        }
        else
        {
            NSLog(@"打开失败");
        }

    先执行B(安装应用B),在执行应用A,你会发现可以正常从A应用跳转到B应用了.

    很简单吧!

    我们再来实现可以传递参数的

    实现的效果:有两款应用A与B,A打开B,并传递一些参数

        参数

    A -----> B

    1. A中代码这么写

        // 其他应用的 URL Schemes --> B
        // 其他应用的 Identifier  --> com.YouXianMing
        // values?              --> 要传递的参数,方便解析
        NSURL *url = [NSURL URLWithString:
                      @"B://com.YouXianMing/values?username=WT&password=123456&callback=invoking"];
        if ([[UIApplication sharedApplication] canOpenURL:url])
        {
            NSLog(@"跳转并打开");
            [[UIApplication sharedApplication] openURL:url];
        }
        else
        {
            NSLog(@"打开失败");
        }

    2. 在B应用中请添加如下方法到AppDelegate.m中

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
        if ([[url scheme] isEqualToString:@"B"])
        {
            if ([[url host] isEqualToString:@"com.YouXianMing"])
            {
                /*
                 query用法
                 
                 The query string from the URL. 
                 If the receiver does not conform to RFC 1808, returns nil. For example, 
                 in the URL http://www.example.com/index.php?key1=value1&key2=value2, 
                 the query string is key1=value1&key2=value2.
                 */
                NSString *query = [url query];
    
                // 分割&
                NSArray *array = [query componentsSeparatedByString:@"&"];
            
                // 显示数据
                NSLog(@"%@", array);
            }
            
            return YES;
        }
        
        return NO;
    }

    3. 执行A程序后,注意观察B程序的打印信息:

    2014-04-21 13:06:00.277 B[1683:60b] (
        "username=WT",
        "password=123456",
        "callback=invoking"
    )

    实现的效果:有两款应用A与B,A打开B并传参数,B打开A并传参数

    太简单了,略.

    小结:

    1. 如果A应用想被B应用打开,需要在A应用中设置URL,在设置中需要设置URL identifier 以及 URL Schemes,作为这个应用的标示

    2. A既要打开B,B也能够打开A,那就需要AB两款应用都设置URL了

    3. 可以传递字符串的参数

  • 相关阅读:
    Quote comes from C. Joybell C.
    Operating System: Three Easy Pieces --- LDE (Note)
    Operating System: Three Easy Pieces --- Pthread Locks (Note)
    Operating System: Three Easy Pieces --- Locks (Note)
    Modern Operating System --- Multiple Processor Systems
    Modern Operating System --- Power Management (CPU)
    Modern Operating System --- Power Management (Hard Disk)
    ls指定日期和时间输出格式
    python StringIO
    PING命令入门详解
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3678193.html
Copyright © 2020-2023  润新知