Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 628|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    6 天前
  • 签到天数: 745 天

    [LV.9]以坛为家II

    2041

    主题

    2099

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    704660
    发表于 2021-9-7 12:36:15 | 显示全部楼层 |阅读模式

    最近要在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 plain

    copy

    1. 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.testHellotestHello://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  
    • {  
    •     if

     (!url) {  

    return

     NO; }  

    •     NSString *URLString = [url absoluteString];  
    •     NSLog(@"%@"

    ,URLString);  

    •     //[[NSUserDefaults standardUserDefaults] setObject:URLString forKey:@"url"];

      

    •     //[[NSUserDefaults standardUserDefaults] synchronize];

      

    •     return

     YES;  

    • }  

    其他

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

    [csharp]

     view plaincopy

    1. // 检查用户是否配置了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];  
    •     }  
    • }  

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

    [csharp]

     view plaincopy

    1. -(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

      

    IOS开发~两个App互相调用

    分类: IOS

    2013-07-01 20:27

     273人阅读 评论(1) 收藏 举报

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

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-3-28 18:11 , Processed in 0.066008 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表