ios 一个app启动另一个app

问题描述:需要从一个ios应用程序中,能启动另一个ios应用程序。

开发环境:xcode7.3.1

关键词:白名单(LSApplicationQueriesSchemes)、注册自己的URL

Demo源代码链接:http://pan.baidu.com/s/1bo327sb

如何从一个app中,启动另一个app???本人ios菜鸟(工作需要,刚开始自学ios,现学现卖,哈哈)参考网上若干文章,实现了这个功能。目前,将demo分享出来。

1.注册自己的URL

新建一个工程MyAppOne,在info.plist 文件中添加字段,注册 MyAppOne的URL.

1.1在 Information Property List中,点击“+” 添加 URL types,添加一个Item,再在Item中,添加“URL Schemes”,再在URL Schemes的Item中,添加一个字符串“AppDemo1”(参考下图),该字符串 即为 当前 工程 MyAppOne 自己 为自己注册的 URL。注册自己的URL完成。

1.2我们刚才注册的自己的URL,就相当于我们当前的工程MyAppOne的一个身份标识。其他app通过ios提供的接口(后面会介绍是ios 的哪个函数),调用这个URL就能启动我们这个MyAppOne应用程序了。

2. 白名单 LSApplicationQueriesSchemes

在ios9以后,需要在info.plist文件中添加 LSApplicationQueriesSchemes(白名单),才能合法启动你想要启动的那个app。白名单中添加的,是你想要启动的app的 URL(这个URL就是上面讲解的“注册自己的URL”)。

2.1 添加 LSApplicationQueriesSchemes。(当前的工程是xcode7.3.1,xcode没有自动匹配 LSApplicationQueriesSchemes,因此,需要你手动输入这个字段,并将它的属性改为【Array】),在 LSApplicationQueriesSchemes 中添加“AppDemo2”。

我们假设已经有一个MyAppTwo,它注册的URL是 AppDemo2。我们想在MyAppOne工程去启动的MyAppTwo这个app,就需要在白名单中添加MyAppTwo的URL。

3.MyAppOne 启动 另一个App的关键代码

3.1 字符串AppDemo2后面的 "://"是必须添加的,否则会 无法打开你指定的app的URL的。

3.2 代码介绍了 无参URL和有参URL。如果想传递参数,在“://”后面附加这些参数即可。

 1 //// 用户 按下 按钮********* 请参考 ViewController.m 文件中的代码
 2 - (IBAction)Btn1Click:(id)sender {
 3     NSLog(@"MyAppOne: You click the button1111.");
 4     char szbuff[50] = {0};
 5     sprintf(szbuff, "%s", "AppDemo2://userName=heliang&pwd=20160812");
 6     /// 1.不带参数的传递方式
 7     //    NSURL* urlLocal = [NSURL URLWithString:@"AppDemo2://"];
 8     /// 2.带参数的传递方式
 9     NSURL* urlLocal = [NSURL URLWithString:[NSString stringWithUTF8String:szbuff]];
10
11     // 判断是否可以启动该 url
12     if([[UIApplication sharedApplication] canOpenURL:urlLocal])
13     {
14         [[UIApplication sharedApplication] openURL:urlLocal];
15         NSLog(@"launch AppDemo2 success!");
16     }
17     else
18     {
19         NSLog(@"No such url.");
20         /// 跳到 appStore 某个 app
21         NSURL* urlAppStore = [NSURL URLWithString:@"https://itunes.apple.com/cn/app/tie-lu12306/id564818797?mt=8"];
22         [[UIApplication sharedApplication] openURL: urlAppStore];
23     }
24 }

3.3至此,已经介绍完如何从一个app1启动另一个app2了。

步骤如下

app2在info.plist的URL Schemes中 注册自己的URL

②app1在info.plist的【白名单】中添加 app2注册的 URL

③app1中调用 [UIApplication sharedApplication] openURL:urlLocal]; 方法,启动 app2。(可以参考链接中的demo,进行进一步的理解。)

如何获取传递这种启动方式,传递过来的参数呢?

4.获取传递过来的参数

4.1在AppDelegate.m 中重写 下面的这个application方法(如果文件中没有这个函数,就手动添加下面的函数,这就是重写)。传递过来的参数,就在 url中。(可以参考链接中的demo,进行进一步的理解。)

4.2尽信书不如无书,本文也不是权威的讲解。本文例子,仅供大家入门学习ios的这个知识点。更深层次的原理和应用,还需要大家慢慢琢磨了。当前,能在自己的工程中,实现这个功能,你就成功了。提前祝贺你成功!

 1 ///////// 重写的 application 方法******** 请参考 AppDelegate.m 文件中的代码
 2 -(bool)application:(UIApplication*)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<NSString *,id> *)options
 3 {
 4     //// 打印 我们收到的参数、以及应用程序的 applicationkey
 5     NSLog(@"AppDemo1被启动,下面是 AppDemo2传递过来的 启动参数:");
 6     NSString* strUrl = [[NSString alloc] init];
 7     strUrl = url.absoluteString;
 8     NSLog(@"strURL:%@", strUrl);
 9
10     NSString* sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey];
11     NSLog(@"sourceApplication:%@", sourceApplication);
12     return YES;
13 }

参考链接:

http://www.jianshu.com/p/e14df92cb207

http://lysongzi.com/2016/03/13/iOS-%E4%BD%BF%E7%94%A8URL-Scheme%E5%AE%9E%E7%8E%B0app%E4%B9%8B%E9%97%B4%E7%9A%84%E9%80%9A%E4%BF%A1/

时间: 2024-10-12 12:25:19

ios 一个app启动另一个app的相关文章

Android从一个应用启动另一个主界面隐藏图标的应用

用a.apk启动b.apk,并且b的图标是在手机主界面上看不到的. 一.新建a,b两个android项目(新建helloworld项目相似),在a项目中增加点击事件(启动按钮来启动b应用).      二.在b应用中修改b manifest.xml中<intent-filter>...</intent-filter>的内容就可以隐藏b应用的图标了. <?xml version="1.0" encoding="utf-8"?> &l

android 从APP启动另一个APP

写下如下代码即可 import android.content.ComponentName; //引入 Intent mIntent = new Intent("android.intent.action.MAIN"); ComponentName comp = new ComponentName("你要启动app的包命,如:com.android.app", "你要启动app的首页,如:com.android.app.MainAcrivity"

Android 一个应用启动另一个应用的说明

我们Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用. 一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动: Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName cn = new ComponentNam

关于一个普通程序启动另外一个程序的命令pm install

这里会采用两个开源项目的文件 这是对安装程序的简单的测试和demo package com.example.demoinstall; 用于判断是否为系统的运用 import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo; import android.content.Context; import android.content.Intent; import android.cont

Android 中如何从一个App启动另外一个App(如启动支付界面、启动地图界面、应用商场下载App等场景)

假定两个App,分别是A和B,当A运行某个功能需要启动B,一种是启动B应用,一种直接进入B的某个Activity.搜了很多资料,没有一个完整的.下面就A--Android5.1.1.B--Android7.1.1,实际华为平板Android5.1.1,EMUI3.1,分辨率1280*800进行测试.关键是Manifest文件设置及启动代码参数设置. 1.A启动整个B(代码来自:http://blog.csdn.net/mad1989/article/details/38090513) doSta

Android 一个app启动另一个app

[支付宝钱包],可以从支付宝直接跳转到[去啊],如果没有按照还提醒用户是否安装,有点炫酷哦,去啊的用户量一下增多了 第一个App中 // 通过包名获取要跳转的app,创建intent对象 Intent intent = activity().getPackageManager() .getLaunchIntentForPackage("com.zsl.download"); // 这里如果intent为空,就说名没有安装要跳转的应用嘛 if (intent != null) { //

iOS 应用添加启动画面以及App应用图标的方法

在ios开发中经常要为项目添加启动画面,目的主要有两个:一.更加美观,二.在启动画面呈现的同时加载初始化内部的项目数据. 注意在ios开发中,需要的是png格式的图片,仅仅良好的支持这一种格式,有钱就是任性. 下面介绍的都是支持在ios7及以上版本的应用: 准备工作: 1242*2208.750*1334像素的png图片主要分辨支持视网膜屏幕正常竖屏状态的5.5寸和4.7寸iPhone手机(ios8及以上系统) 2208*1242像素的png图片主要分辨支持视网膜屏幕横屏状态的5.5寸iPhon

Android应用中如何启动另一个应用

Android中 一个应用启动另外一个应用一般有2种情况, 被启动应用的包名已知 和  未知两种情况: 1  被启动应用的包名已知: /**启动另外应用的代码,其中被启动的应用的包名为packageName, 应用的入口为packageName.MainActivity, 此方法的2个应用的AndroidManifest.xml文件都不需要修改 **/ Intent intent = new Intent(); intent.setComponent(new ComponentName("pac

Xamarin,mono for android 用一个APP启动其他隐藏应用程序

花费了好几个小时测试最终搞定了,Mono for android用一个APP启动其他隐藏应用程序. 直接看代码: 隐藏APP(被启动)要在manifest文件配置如下,去除原本的两个标签,修改成只有一个data <Activity> <activity android:icon="@drawable/icon" android:label="IOCPDroid" android:name="iocpdroid.IOCPActivity&q