zoukankan      html  css  js  c++  java
  • IOS 在一个应用里打开另一个应用 及其 两个应用互相调用

    在IOS应用中打开另外一个应用的解决方案

    最近要在IOS中实现一个应用启动另外一个应用的功能,搜了一些资料,使用UIApplication的openURL:的方法就能实现,现在整理和大家分享一下!

    注册自定义URL协议

    首先被启动的应用需要向iPhone注册一个自定义URL协议。这是在你的项目文件夹的info.plist文件进行的(就是你改变应用程序图标的同一个文件)。
    Step1. 右键,选择“Add Row”Step2. Key值选择“URL types”
    Step3. 打开“Item 0″,然后为该key增加一个URL identifier。可以是任何值,但建议用“反域名”(例如 “com.fcplayer.testHello”)。
    Step4. 在“Item 0”下再加一行。
    Step5. 选择“URL Schemes” 作为Key。
    Step6. 输入你的URL协议名 (例如“testHello://” 应写做“testHello”)。如果有必要,你可以在这里加入多个协议。
    操作截图如下:

    访问自定义URL

    在主应用程序中通过访问自定义URL启动另外一个应用:

    [csharp] view plaincopy
     
     
    1. NSURL * myURL_APP_A = [NSURL URLWithString:@"testHello://"];  
    2. if ([[UIApplication sharedApplication] canOpenURL:myURL_APP_A]) {  
    3.     NSLog(@"canOpenURL");  
    4.     [[UIApplication sharedApplication] openURL:myURL_APP_A];  
    5. }  

    自定义处理URL

    有些时候我们除了启动还需向另外一个应用发送参数,这是也可以通过自定义的URL来实现,如:

    testHello://
    testHello://com.fcplayer.testHello
    testHello://config=1&abar=2

    这时我们在被启动应用中就必须进行自定义处理,在delegate中实现该消息(Cocos2d加在AppDelegate中),例如:
    - (BOOL)application:(UIApplication *)applicationhandleOpenURL:(NSURL*)url {   // Do something withthe url here }

    通常,我们会从参数中解析出URL以便在视图中显示或者存储到UserPreference。下面的例子把URL存储为User Preference的url变量中或者打印出来:

    [csharp] view plaincopy
     
     
    1. -(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url  
    2. {  
    3.     if (!url) {  return NO; }  
    4.     NSString *URLString = [url absoluteString];  
    5.     NSLog(@"%@",URLString);  
    6.     //[[NSUserDefaults standardUserDefaults] setObject:URLString forKey:@"url"];  
    7.     //[[NSUserDefaults standardUserDefaults] synchronize];  
    8.     return YES;  
    9. }  

    其他

    基本上至此我们就已经实现一个应用程序中启动另外一个应用的功能,但是为了是我们的代码更加强壮,我在网上又找了一段访问代码,如下:

    [csharp] view plaincopy
     
     
    1. // 检查用户是否配置了AppId  
    2. // 有没有准确配置Info的CFBundleURLSchemes字段  
    3. // 是不是可以正确打开  
    4. if (!kAppId) {  
    5.     UIAlertView *alertView = [[UIAlertView alloc]  
    6.                               initWithTitle:@"Setup Error"  
    7.                               message:@"Missing app ID. You cannot run the app until you provide this in the code."  
    8.                               delegate:self  
    9.                               cancelButtonTitle:@"OK"  
    10.                               otherButtonTitles:nil,  
    11.                               nil];  
    12.     [alertView show];  
    13.     [alertView release];  
    14. else {  
    15.     // Now check that the URL scheme fb[app_id]://authorize is in the .plist and can  
    16.     // be opened, doing a simple check without local app id factored in here  
    17.     NSString *url = [NSString stringWithFormat:@"fb%@://authorize",kAppId];  
    18.     BOOL bSchemeInPlist = NO; // find out if the sceme is in the plist file.  
    19.     NSArray* aBundleURLTypes = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleURLTypes"];  
    20.     if ([aBundleURLTypes isKindOfClass:[NSArray class]] &&  
    21.         ([aBundleURLTypes count] > 0)) {  
    22.         NSDictionary* aBundleURLTypes0 = [aBundleURLTypes objectAtIndex:0];  
    23.         if ([aBundleURLTypes0 isKindOfClass:[NSDictionary class]]) {  
    24.             NSArray* aBundleURLSchemes = [aBundleURLTypes0 objectForKey:@"CFBundleURLSchemes"];  
    25.             if ([aBundleURLSchemes isKindOfClass:[NSArray class]] &&  
    26.                 ([aBundleURLSchemes count] > 0)) {  
    27.                 NSString *scheme = [aBundleURLSchemes objectAtIndex:0];  
    28.                 if ([scheme isKindOfClass:[NSString class]] &&  
    29.                     [url hasPrefix:scheme]) {  
    30.                     bSchemeInPlist = YES;  
    31.                 }  
    32.             }  
    33.         }  
    34.     }  
    35.     // Check if the authorization callback will work  
    36.     BOOL bCanOpenUrl = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString: url]];  
    37.     if (!bSchemeInPlist || !bCanOpenUrl) {  
    38.         UIAlertView *alertView = [[UIAlertView alloc]  
    39.                                   initWithTitle:@"Setup Error"  
    40.                                   message:@"Invalid or missing URL scheme. You cannot run the app until you set up a valid URL scheme in your .plist."  
    41.                                   delegate:self  
    42.                                   cancelButtonTitle:@"OK"  
    43.                                   otherButtonTitles:nil,  
    44.                                   nil];  
    45.         [alertView show];  
    46.         [alertView release];  
    47.     }  
    48. }  

    另外还有一段启动其他应用的代码:

    [csharp] view plaincopy
     
     
    1. -(IBAction)openMaps {//打开地图  
    2.     // Where is Apple on the map anyway?  
    3.     NSString* addressText = @”1 Infinite Loop, Cupertino, CA 95014″;  
    4.     // URL encode the spaces  
    5.     addressText =  [addressText stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];  
    6.     NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];  
    7.     // lets throw this text on the log so we can view the url in the event we have an issue  
    8.     NSLog(urlText);  
    9.     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];  
    10.     }  
    11.     -(IBAction)openEmail {//打开mail  
    12.     // Fire off an email to apple support  
    13.     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://devprograms@apple.com"]];  
    14.     }  
    15.     -(IBAction)openPhone {//拨打电话  
    16.     // Call Google 411  
    17.     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8004664411"]];  
    18.     }  
    19.     -(IBAction)openSms {//打开短信  
    20.     // Text to Google SMS  
    21.     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://466453"]];  
    22.     }  
    23.     -(IBAction)openBrowser {//打开浏览器  
    24.     // Lanuch any iPhone developers fav site  
    25.     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunesconnect.apple.com"]];  
    26. }  

    附参考链接:http://blog.csdn.net/arthurchenjs/article/details/6920631

      

    IOS开发~两个App互相调用

    分类: IOS

    1、新建两个项目:AppOne,AppTwo;

    2、分别在其属性列表中添加如下:

    AppOwn:

    AppTwo:

    3、分别实现代码:

    AppOwn的 viewController.m 中添加代码:

    - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    {

        

        NSURL *url  = [NSURLURLWithString:@"AppTwo:"];

     

        if ([[UIApplicationsharedApplication] canOpenURL:url])

        {

            NSLog(@"canOpenURL");

            [[UIApplication sharedApplication] openURL:url];

        } else

        {

            NSLog(@"can not OpenURL");

        }

    }


    AppTwn的 viewController.m 中添加代码:

    - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    {

        

        NSLog(@"touchesBegan");

        

        NSURL *url  = [NSURLURLWithString:@"AppOne:"];

        

        if ([[UIApplicationsharedApplication] canOpenURL:url])

        {

            NSLog(@"canOpenURL");

            [[UIApplication sharedApplication] openURL:url];

        } else

        {

            NSLog(@"can not OpenURL");

        }

    }


    4、分别运行下两个项目,然后无论把其中一个项目进程杀掉,或者使其进入休眠,都可以通过另一个项目来打开另一个项目。

  • 相关阅读:
    UDP
    TCP
    python基础之socket编程
    单列模式
    元类
    issubclass()和isinstance()
    手持机设备公司(WINCE/ANDROID/LINUX)
    Android Hal 分析
    Android JNI 使用的数据结构JNINativeMethod详解
    MTK GPIO 一些理解
  • 原文地址:https://www.cnblogs.com/linusflow/p/8541840.html
Copyright © 2011-2022 走看看