在开发的时候遇到需要从其他APP调用自己的APP的需求,比如从Safari中打开APP,并且传递一些信息的需要

  1、首先设置自己的URL types

  打开项目中的工程文件,打开info选项,在下面的URL types中添加自己APP的Identifier,并且自定义一个自己的scheme,如图:

  

  举个例子,设定自己的APP的scheme为 myApp;

  2、其他应用的调用

  其他的用如果想要调起自己的APP,需要执行如下类似代码

  

NSString *paramStr = [NSString stringWithFormat:@"myApp://userInfo....."];
NSURL *url = [NSURL URLWithString:[paramStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];

  myAPP://后面就是需要传进来的值

  3、接受被调起并且获取传来的值

  在appdelegate中添加如下方法

 -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSString *tmpUrl = [url absoluteString]; return YES;
}

  url就是 myApp后面的 userInfo.....

  sourceApplication主动调起的应用的bundle id

  

  在自己的应用中设定对应的参数来接收数据。

  备注:

    我一直想象分享的SDK那样添加一个返回上一个APP的功能,无奈只能获取到上个APP的bundle id,只有系统的私有APi可以使用bundle id调起一个APP,如果不考虑上线审核的话可以添加私有API的framework。

  首先要使用class-dump 和dumpFrameworks.pl 工具 将ios的framework导出来。

 
  以下是工具的下载地址:
 
  class-dump下载地址http://www.codethecode.com/projects/class-dump/
 
  DumpFrameworks.pl原来的下载地址不能用了,我在github上的别人的越狱程序里面找到的。
 
 
  将下载好的 class-dump 放入usr/local/bin 下. 
 
     如果 ‘/usr/local/bin’ 不知道在哪里,可以在terminal 下输入 ‘open -a Finder /usr/local/bin’ 以便打开目录.
 
  这个bin文件夹  就是所有命令行的可执行文件所在地,并不一定是这个目录,要看各自的系统。 
 
  因为dumpFrameworks.pl中对ios库的版本路径可能不一定正确了,所以要自己手动改正。
 
  用terminal直接执行dumpFrameworks.pl就可以了。
 
  会将所有到处的头文件,放到user/Headers文件夹下。
 
  将想用的头文件,组成xxx.framework/Headers的样式。导入工程。
 
  但是bulidsetting 设置framework的search path 时要设置真实的私有库路径,因为我们要用它的可执行文件,只有头文件是不行的。
 
  例    如:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/PrivateFrameworks
 
  这样就可以调用ios的私有库了
  

 Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
NSObject * workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
BOOL isopen = [workspace performSelector:@selector(openApplicationWithBundleID:) withObject:@"com.tencent.mqq"];

  上面的代码是用QQ的bundle  调起QQ,以上就是暂时想到的解决方式,如果系统开放更多权限,再增加吧

  

iOS应用之间的跳转与数据传递的更多相关文章

  1. iOS开发拓展篇—应用之间的跳转和数据传递

    iOS开发拓展篇—应用之间的跳转和数据传 说明:本文介绍app如何打开另一个app,并且传递数据. 一.简单说明 新建两个应用,分别为应用A和应用B. 实现要求:在appA的页面中点击对应的按钮,能够 ...

  2. Android activity之间的跳转和数据传递

    1.Activity之间的跳转 并且 传递数据 A Activity进行的操作 Intent intent = new Intent(context, B.class); intent.putExtr ...

  3. iOS界面之间的跳转方式

    iOS界面之间的跳转方式基本有3种. .改变window的根视图 [self.window setRootViewController:VC]; .模态弹出 [self presentViewCont ...

  4. ViewController之间的转场和数据传递

    ViewController之间的转场和数据传递 可以正向传递值, 反向传递值. 注意反向传值的时候,方法的位置: https://github.com/urmyfaith/GRDBUsage/blo ...

  5. Android first --- 页面跳转及数据传递

    页面跳转即数据传递 创建第二个界面Acivity *需要在清单文件中添加配置一个Actuvity标签 标签中如果带有这个子节点,则会在Android中添加一个快捷图标 <intent-filte ...

  6. iOS APP之间到跳转,以及热门应用,手机自带到应用跳转

    应用之间的跳转 在第一个APP中,做如下操作:1.在info.plist文件中的"信息属性列表"下添加一项:"URL类型"; 2.点开"URL类型&q ...

  7. iOS应用之间的跳转

    app应用跳转的原理解析 如何实现两个app应用之间的跳转 如何实现两个app之间跳转到指定界面 二.应用跳转原理 相信从一个应用跳转到另一个应用大家并不陌生,最常见的莫过于第三方登录,支付宝支付等等 ...

  8. iOS页面跳转及数据传递

    转: http://blog.csdn.net/wang9834664/article/details/8025571 iOS页面跳转: 第一种 [self.navigationController  ...

  9. Android应用开发基础之六:页面跳转和数据传递

    创建第二个Activity 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> <action ...

随机推荐

  1. 关于EventHandler的使用

    也就是委托和事件的使用.使用过,但了解的不够深入,现在逐渐来填以前留下的坑吧. EventHandler, EventHandler<TEventArg> 是.net Framework内 ...

  2. Android Activity和intent

  3. .Net平台下ActiveMQ入门实例(转)

    1.ActiveMQ简介 先分析这么一个场景:当我们在网站上购物时,必须经过,下订单.发票创建.付款处理.订单履行.航运等.但是,当用户下单后,立即跳转到"感谢那您的订单" 页面. ...

  4. OpenGL ES 2.0 shader开发

    1.创建一个shader容器 GLES20.glCreateShader(shaderType); 函数原型为: int glCreateShader (int type) 方法参数: GLES20. ...

  5. Python中的Copy和Deepcopy

    一,Python的对象: Python存在大量的对象,我们一般提到的对象都是C中的结构体在堆中申请的一块内存(以CPython为例),每一个对象都有ID,可以通过ID(Object)获得.对象的范围包 ...

  6. CSS3实现时间表

    一直想学CSS3,今天别的论坛看到的例子,挺好,mark起来以后自己看. <!doctype html> <html> <head> <meta charse ...

  7. 【设计模式:单例模式】使用单例模式加载properties文件

    先准备测试程序: package org.jediael.util; import static org.junit.Assert.*; import org.junit.Test; public c ...

  8. symfony配置

    1.获取配置的一些变量 在HttpFoundation/Kernel.php 文件里面有函数 getKernelParameters ()可以获取一些配置变量的数组.有需要可以从那里获取. 2.配置s ...

  9. awk之基本信息

    awk 利用RS来分割文本,分割后形成一条一条的record awk 利用FS来分割record,分割后形成一段一段的field field由一串一串的字符串构成 默认的RS是换行符 默认的FS是空格 ...

  10. DLL技术应用03 - 零基础入门学习Delphi46

    DLL技术应用03 让编程改变世界 Change the world by program DLL的加载和调用 [caption id="attachment_2685" alig ...