从app中打开另一个应用程序

最近要在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启动另外一个应用:

  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. }  
    NSURL * myURL_APP_A = [NSURL URLWithString:@"testHello://"];
    if ([[UIApplication sharedApplication] canOpenURL:myURL_APP_A]) {
        NSLog(@"canOpenURL");
        [[UIApplication sharedApplication] openURL:myURL_APP_A];
    }

自定义处理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变量中或者打印出来:

  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. }  
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    if (!url) {  return NO; }
    NSString *URLString = [url absoluteString];
    NSLog(@"%@",URLString);
    //[[NSUserDefaults standardUserDefaults] setObject:URLString forKey:@"url"];
    //[[NSUserDefaults standardUserDefaults] synchronize];
    return YES;
}

其他

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

  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. }  
    // 检查用户是否配置了AppId
    // 有没有准确配置Info的CFBundleURLSchemes字段
    // 是不是可以正确打开
    if (!kAppId) {
        UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Setup Error"
                                  message:@"Missing app ID. You cannot run the app until you provide this in the code."
                                  delegate:self
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil,
                                  nil];
        [alertView show];
        [alertView release];
    } else {
        // Now check that the URL scheme fb[app_id]://authorize is in the .plist and can
        // be opened, doing a simple check without local app id factored in here
        NSString *url = [NSString stringWithFormat:@"fb%@://authorize",kAppId];
        BOOL bSchemeInPlist = NO; // find out if the sceme is in the plist file.
        NSArray* aBundleURLTypes = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleURLTypes"];
        if ([aBundleURLTypes isKindOfClass:[NSArray class]] &&
            ([aBundleURLTypes count] > 0)) {
            NSDictionary* aBundleURLTypes0 = [aBundleURLTypes objectAtIndex:0];
            if ([aBundleURLTypes0 isKindOfClass:[NSDictionary class]]) {
                NSArray* aBundleURLSchemes = [aBundleURLTypes0 objectForKey:@"CFBundleURLSchemes"];
                if ([aBundleURLSchemes isKindOfClass:[NSArray class]] &&
                    ([aBundleURLSchemes count] > 0)) {
                    NSString *scheme = [aBundleURLSchemes objectAtIndex:0];
                    if ([scheme isKindOfClass:[NSString class]] &&
                        [url hasPrefix:scheme]) {
                        bSchemeInPlist = YES;
                    }
                }
            }
        }
        // Check if the authorization callback will work
        BOOL bCanOpenUrl = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString: url]];
        if (!bSchemeInPlist || !bCanOpenUrl) {
            UIAlertView *alertView = [[UIAlertView alloc]
                                      initWithTitle:@"Setup Error"
                                      message:@"Invalid or missing URL scheme. You cannot run the app until you set up a valid URL scheme in your .plist."
                                      delegate:self
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil,
                                      nil];
            [alertView show];
            [alertView release];
        }
    }


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

  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. }  
-(IBAction)openMaps {//打开地图
    // Where is Apple on the map anyway?
    NSString* addressText = @”1 Infinite Loop, Cupertino, CA 95014″;
    // URL encode the spaces
    addressText =  [addressText stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];
    NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];
    // lets throw this text on the log so we can view the url in the event we have an issue
    NSLog(urlText);
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];
    }
    -(IBAction)openEmail {//打开mail
    // Fire off an email to apple support
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://devprograms@apple.com"]];
    }
    -(IBAction)openPhone {//拨打电话
    // Call Google 411
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8004664411"]];
    }
    -(IBAction)openSms {//打开短信
    // Text to Google SMS
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://466453"]];
    }
    -(IBAction)openBrowser {//打开浏览器
    // Lanuch any iPhone developers fav site
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunesconnect.apple.com"]];
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值