热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

URLScheme程序之间相互调用传值

在ios程序间通信,可以通过URLScheme,判断是否安装了另外的应用,打开特定URL的方式来传递参数给另一个程序。例如:在程序A(Receiver)的Info.plist中加

在ios程序间通信,可以通过URL Scheme,判断是否安装了另外的应用,打开特定 URL 的方式来传递参数给

另一个程序。例如:在程序A(Receiver)的Info.plist中加入你需要注册的URL Scheme,然后在你的应用程序B中

加入处理这类请求的代码,从而实现在B程序中调用A程序,判断A程序是否安装,跳到安装界面,传递参数给A程序。

具体操作如下:

在程序A中:

Info.plist中,增加一个字段,名称为(URL Types),Xcode会自动为你创建一个必须的键:

URL Identifier,这个键的值可以赋值为一个唯一的字符串。通常是逆向的域名结构,如:me.venj.myapp

然后在URL Types这个键下增加一个子项:(URL Schemes),这里填入你想注册的URL Scheme的名称,

如:cloud,你可以增加多个URL Scheme

 

在程序B中:

加入调用传参判断,我们可以在AppDelegate中加入一个方法,来处理这个请求

/* For iOS 4.1 and earlier */

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

 // Handle url request.

 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL Request"

 message:[url absoluteString] delegate:nil cancelButtonTitle:@"OK"otherButtonTitles:nil];

 [alert show];

 return YES;

}

/* For iOS 4.2 and later */

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url

   sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

  // Handle url request.

   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL Request" 

   message:[url absoluteString] delegate:nil cancelButtonTitle:@"OK"otherButtonTitles:nil];

   [alert show];

   return YES;

}

也可以在其它类中添加单独的方法处理

-(void) openReceiverApp:(id)sender {

    // Opens the Receiver app if installed, otherwise displays an error

    UIApplication *ourApplication = [UIApplication sharedApplication];

    NSString *URLEncodedText = @"传递的内容";//传递参数

    /**  

     Url拼装形式

     Url Schemes :// +传递内容。

    */

    NSString *ourPath = [@"cloud://" stringByAppendingString:URLEncodedText];

    NSURL *ourURL = [NSURL URLWithString:ourPath];

    //判断程序A(Receiver)是否已经安装

    if ([ourApplication canOpenURL:ourURL]) {//检测已经安装

        //[ourApplication openURL:ourURL];//open应用A(Recevier)

      UIAlertView *alertView = [[UIAlertViewallocinitWithTitle:@"Receiver Found"message:@""delegate:nilcancelButtonTitle:@"OK"otherButtonTitles:nil];

        alertView.tag = 101;

        alertView.delegate = self;

        [alertView show];

        [alertView release];

    }else {//检测未安装应用

        UIAlertView *alertView = [[UIAlertViewallocinitWithTitle:@"" message:

         @"The Receiver App is not installed." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

        [alertView show];

        [alertView release];

        UIApplication *ourApplication = [UIApplication sharedApplication];

        NSURL *ourURL = [NSURL URLWithString:

        @"https://itunes.apple.com/us/app/da-yan-shi-pin/id586827887?ls=1&mt=8"];

        [ourApplication openURL:ourURL];//打开下载地址页面

    }

}

iOS 预定义了如下几种URL Scheme 。

Mail:          mailto:frank@wwdcdemo.example.com

Tel:            tel:1-408-555-5555

SMS:        1-408-555-1212

Map:                  http://maps.google.com/maps?q=cupertino

YouTube: http://www.youtube.com/watch?v=VIDEO_IDENTIFIER

iTunes: http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=156093464&id=156093462&s=143441

 

利用一些方法获得当前正在运行的进程信息,从进程信息中获得安装的app信息。

//  ViewController.h

//  OpenProcess

#import 

@interface ViewController : UIViewController

@end

@interface UIDevice (ProcessesAdditions)

- (NSArray *)runningProcesses;

@end

 

 

//  ViewController.m

//  OpenProcess

#import 

#import "ViewController.h"

 @interfaceViewController ()

-(void)openProcess;

@end

@implementation ViewController

- (void)viewDidLoad {

    [superviewDidLoad];

    self.view.backgroundColor = [UIColorwhiteColor];

    UIButton *loginbt = [UIButtonbuttonWithType:UIButtonTypeRoundedRect];

    loginbt.frame = CGRectMake(4014014145);

    [loginbt setTitle:@"开启线程" forState:UIControlStateNormal];

    loginbt.tag = 900;

    [loginbt addTarget:selfaction:@selector(openProcess) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:loginbt];

}

-(void)openProcess {

//    NSProcessInfo *proInfo = [NSProcessInfo processInfo];

//    NSLog(@"----processName----%@",[proInfo processName]);  //进行名称

//    NSLog(@"----processName----%d",[proInfo processIdentifier]);  //进程号,系统分配给该进程的号

//    NSLog(@"----processName----%d",[proInfo processorCount]);  //获取cpu数目

//    

//    NSLog(@"------hostname-----%@",[proInfo hostName]);  //进程的主机名称

//    

//    NSLog(@"------systemName----%@",[proInfo operatingSystemName]);  //系统名称

//    NSLog(@"------systemVersion-%@",[proInfo operatingSystemVersionString]); //系统版本

//    NSLog(@"------system--------%d",[proInfo operatingSystem]);  //操作系统代表数字

    NSArray * processes = [[UIDevice currentDevicerunningProcesses];

    for (NSDictionary * dict in processes){

       //输出正在进程中的应用

        NSLog(@"%@ - %@", [dict objectForKey:@"ProcessID"], [dict objectForKey:@"ProcessName"]);

    }

- (void)didReceiveMemoryWarning{

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end

@implementation UIDevice (ProcessesAdditions)

- (NSArray *)runningProcesses {

    int mib[4] = {CTL_KERNKERN_PROCKERN_PROC_ALL0};

    size_t miblen = 4;

    size_t size;

    int st = sysctl(mib, miblen, NULL, &size, NULL0);

    struct kinfo_proc * process = NULL;

    struct kinfo_proc * newprocess = NULL;

    do {

        size += size / 10;

        newprocess = realloc(process, size);

        if (!newprocess){

            if (process){

                free(process);

            }

            returnnil;

        }

        process = newprocess;

        st = sysctl(mib, miblen, process, &size, NULL0);

    } while (st == -1 && errno == ENOMEM);

    if (st == 0){

        if (size % sizeof(struct kinfo_proc) == 0){

            int nprocess = size / sizeof(struct kinfo_proc);

            if (nprocess){

                NSMutableArray * array = [[NSMutableArrayallocinit];

                for (int i = nprocess - 1; i >= 0; i--){

                   NSString * processID = [[NSStringallocinitWithFormat:@"%d", process[i].kp_proc.p_pid];

                    NSString * processName = [[NSString allocinitWithFormat:@"%s", process[i].kp_proc.p_comm];

                    NSDictionary * dict = [[NSDictionary allocinitWithObjects:[NSArrayarrayWithObjects:processID, processName, nil]

                                                                        forKeys:[NSArrayarrayWithObjects:@"ProcessID"@"ProcessName"nil]];

                    [processID release];

                    [processName release];

                    [array addObject:dict];

                    [dict release];

                }

                free(process);

                return [array autorelease];

            }

        }

    }

      returnnil;

}

@end

 

参考

http://blog.csdn.net/kudy21/article/details/7803216

http://forrst.com/posts/UIDevice_Category_For_Processes-h1H

http://www.cocoachina.com/newbie/tutorial/2012/0529/4302.html



推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
author-avatar
超级放开祢旳掱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有