翻译自:openURL Deprecated in iOS10 译者:Haley_Wong 苹果在iOS 2 推出了 openURL:方法 作为一种打开外部链接的方式。 苹果在iOS 10 中已经弃用了openURL:这个旧方法,用openURL:options:completionHandler:来代替。 翻译如下: 新的UIApplication 方法`openURL:options:completionHandler:` 会异步执行,并在主队列中调用这个指定的 `completion handler` 这个弃用的方法有一个要打开的URL 参数,并且返回一个表示成功或者失败的布尔值: // Objective-C - (BOOL)openURL:(NSURL*)url // Swift open func 传一个空字典时,该方法的效果与 openURL:一致。 一个带有 成功与否 参数的 completion handler(可认为是闭包或block)。如果你对这个状态不感兴趣可以传Null。
打开 APP 设置入口的流程分析 进入当前 APP 的设置页面 的方案很简单,只需要下列代码就可以进入当前 APP 的设置页面 [[UIApplication sharedApplication] openURL UIApplication 的 openURL: 方法被调用时,会先做一系列的预处理: 通过 _shouldAttemptOpenURL: 判断是否可以打开地址: 通过 com.apple.lsd.open image 打开任意 APP 的设置界面 通过对 -[UIApplication openURL:] 背后的流程进行分析,我们可以得到以下两种方案打开任意 APP 的设置界面: 通过构造 xpc 信息 :` 方法 [hook openURL:[NSURL URLWithString:@"app-prefs:com.tencent.xin"]]; } 代码执行效果: ? 总结 本文通过分析 -[UIApplication openURL:] 的背后逻辑,提供了一种打开任意 APP 设置页面的方法。
应用: 第三方分享的SDK就是通过这种方式来实现分享的,我们将需要分享的数据传递给SDK,SDK通过OpenURL来打开第三方应用传递数据,返回时SDK来处理OpenUrl的参数,实现查看分享的回调 给 WSL 添加Url Scheme 添加URL Scheme.png 重写WSL中AppDelegate中的openUrl方法,当WSL被唤起时会执行openUrl 如果只想允许在特定情况下才能被唤起,比如说分享,就可以对传入的openUrl加以验证,符合要求return YES ,否则返回NO。 给UIActivityViewController系统原生分享也添加Url Scheme 重写UIActivityViewController系统原生分享中AppDelegate中的openUrl方法, 重写UIActivityViewController系统原生分享的openUrl方法 以上就是通过Url Scheme实现APP间相互跳转、传递数据、通信、分享功能的过程。
Qt接口 QDesktopServices::openUrl(url) /* QDesktopServices::openUrl(QUrl("http://www.example.com")); */ /* QDesktopServices::openUrl(QUrl::fromLocalFile("file:///C:/Users/Hello/Pictures/Qt.jpg")) */ Qml接口
openURL openURL 是 SwiftUI 2.0 中新增的一个环境值( EnvironmentValue ),它有两个作用: 通过调用它的 callFunction 方法,实现打开 URL 的动作 此时在 Button 中,我们可以直接通过 openURL 来完成在 SwiftUI 1.0 版本中通过调用其他框架 API 才能完成的工作。 struct Demo: View { @Environment(\.openURL) private var openURL // 引入环境值 var body: some View handler 的返回结果 handled 和 discarded 都将阻止 url 继续向下传递,它们之间的不同只有在显式调用 openURL 时才会表现出来。 ) var openURL @State var url:URL?
nihao://one"]]; }else{ NSLog(@"未安装"); } B中如此的设置 - (BOOL)application:(UIApplication *)application openURL 跳转页面设置一个属性保存传递的字符串 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication :[NSURLURLWithString:@“tel:// 8008808888” ]]; 调用短信 [[UIApplicationsharedApplication] openURL :[ NSURL URLWithString :@“sms:// 800888” ]]; 调用自带浏览器safari [[UIApplicationsharedApplication] openURL :[NSURLURLWithString:@“http://www.hzlzh.com” ]]; 调用远程 [[UIApplicationsharedApplication] openURL
应用: 第三方分享的SDK就是通过这种方式来实现分享的,我们将需要分享的数据传递给SDK,SDK通过OpenURL来打开第三方应用传递数据,返回时SDK来处理OpenUrl的参数,实现查看分享的回调。 给 WSL 添加Url Scheme [添加URL Scheme.png] 重写WSL中AppDelegate中的openUrl方法,当WSL被唤起时会执行openUrl方法,我们可以在方法里根据传入的参数的做出处理 如果只想允许在特定情况下才能被唤起,比如说分享,就可以对传入的openUrl加以验证,符合要求return YES ,否则返回NO。 :url]; //iOS 10以上 [[UIApplication sharedApplication] openURL:url options:nil completionHandler [重写UIActivityViewController系统原生分享的openUrl方法] 以上就是通过Url Scheme实现APP间相互跳转、传递数据、通信、分享功能的过程。
//1、调用 自带mail [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://admin@CodeSnippet.cn "]]; //2、调用 电话phone [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8008808888 "]]; //3、调用 SMS [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://800888"]]; // 4、调用自带 浏览器 safari [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://outofmemory.cn
UIApplication来管理状态栏,先修改info.plist的设置:View controller-based status bar appearance 的值为NO 6、UIApplication的openURL 方法:- (BOOL) openURL: (NSURL *)url; 使用例子:UIApplication *app = [UIApplication sharedApplication] ; [app openURL: [NSURL URLWithString:@"tel://10086"]]; //打电话 [app openURL: [NSURL URLWithString :@"sms://10086"]]; //发短信 [app openURL: [NSURL URLWithString:@"mailto://520520@qq.com"]]; //发邮件 [app openURL: [NSURL URLWithString:@"http://www.cnblogs.com"]]; //打开一个网页 7、UIApplication和delegate
首先是简单的在app内打开任意url:在应用内打开链接:plus.runtime.openWeb("https://www.baidu.com/")调用系统浏览器打开链接:plus.runtime.openURL \/\//, '')}`; plus.runtime.openURL(taobaoUrl, (res) => { uni.showModal({ content: '本机未检测到对应客户端 , success: (res) => { if (res.confirm) { plus.runtime.openURL(url); } params=${JSON.stringify(data)}`; plus.runtime.openURL(openUrl, (res) => { uni.showModal({ content , success: (res) => { if (res.confirm) { plus.runtime.openURL(url); } },
APP间相互调用专题 1 OpenUrl原理 如果一个应用程序支持一些已知类型的URL,您就可以通过对应的URL模式和该程序进行通讯。 您的应用程序可以和其它应用程序通讯,具体方法是用正确格式的内容创建一个NSURL对象,然后将它传给共享UIApplication对象openURL:方法。 openURL:方法会启动注册接收该URL类型的应用程序,并将URL传给它。当用户最终退出该应用程序时,系统通常会重新启动您的应用程序,但并不总是这样。 2 OpenUrl实现APP间调用 2.1 注册OpenURL协议 在IOS中,实现一个应用启动另外一个应用,使用UIApplication的openURL:方法就可实现,这里以test跳到 实际上的做法很简单,使用的还是UIApplication类的OpenURL方法: [[UIApplication sharedApplication] openURL:[NSURLURLWithString
打开本地文件或目录 方式1 QDesktopServices::openUrl(QUrl::fromLocalFile("C:\\Users\\User\\Documents")); 方式2 QDesktopServices ::openUrl(QUrl::fromLocalFile("C:/Users/User/Documents")); 方式3 QDesktopServices::openUrl(QUrl::fromLocalFile ("file:///C:/Users/User/Documents")); 打开网址 QDesktopServices::openUrl(QUrl("http://www.qtbig.com/about
longitude, latitude]; [[UIApplication sharedApplication] openURL :[NSURL URLWithString:url]]; 注意这个例子中的openURL:方法。 q=Constitution+Avenue+Northwest+Washington+DC"; [[UIApplication sharedApplication] openURL:[NSURL URLWithString
urls.addAll(JavaFile.getUrl(path)); } for (String url : urls) { openURL (url); } } public static void openURL(String url) { try { /苹果的打开方式 Class fileMgr = Class.forName("com.apple.eio.FileManager"); Method openURL = fileMgr.getDeclaredMethod("openURL", new Class[] { String.class }); openURL.invoke(null
把下面的代码加到你的 AppDelegate.m 文件中 #import "RCTLinkingManager.h" - (BOOL)application:(UIApplication *)application openURL *)sourceApplication annotation:(id)annotation { return [RCTLinkingManager application:application openURL componentDidMount() { var url = Linking.getInitialURL().then((url) => { if (url) { Linking.openURL response }); }); Linking.getInitialURL().then((url) => { if (url) { Linking.openURL title="Open example://test" /> <Button onPress={() => Linking.openURL
{ // 如果已经安装天猫客户端,就使用客户端打开链接 [[UIApplication sharedApplication] openURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; [[UIApplication sharedApplication] openURL sharedApplication] canOpenURL:url]) { // 如果已经安装淘宝客户端,就使用客户端打开链接 [[UIApplication sharedApplication] openURL id=%@", itemId]]; // [[UIApplication sharedApplication] openURL:url]; skuid,houUrl]; NSURL *url=[NSURL URLWithString:urlString]; [[UIApplication sharedApplication] openURL
您还没有安装高德地图") let urlString = "itms-apps://itunes.apple.com/app/id452186370" self.openURL 您还没有安装腾讯地图") let urlString = "itms-apps://itunes.apple.com/app/id481623196" self.openURL let urlString = "itms-apps://itunes.apple.com/app/id452186370" as String self.openURL return false } if UIApplication.shared.canOpenURL(url) == true { self.openURL as String) return true } else { return false } } func openURL
打电话、发短信、上网 使用openURL的方法 // 打开百度 NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"]; [app openURL:url]; // 打电话 NSURL *phone = [NSURL URLWithString:@"tel:10086"]; [app openURL :phone]; // 发短信 NSURL *sms = [NSURL URLWithString:@"sms:10086"]; [app openURL:sms ]; // 发邮件 NSURL *email = [NSURL URLWithString:@"mailto:hah@22.com"]; [app openURL:email
animated: true, completion: nil) } /// 打开页面的设置页面 func openAppSetting() { if let openUrl ) { if UIApplication.shared.canOpenURL(openUrl) { if #available (iOS 10.0, *) { UIApplication.shared.open(openUrl, options: [:]) { (result) } } else { UIApplication.shared.openURL (openUrl) } } } } } } extension CLLocationTool
通过block只返回跳转是否成功,比如打开设置页: [PTRouter openURL:@"" callback:^(BOOL result) { if (! showInfoWithStatus:@"打开失败"]; } }]; PTRouter 支持同步 & 异步获取返回值,其中异步转同步内部通过semaphore实现 + (void)openURL :(NSString *)url callback:(void (^)(BOOL result))callback; + (BOOL)openURL:(NSString *)url; 另外openURL 除了支持url中带参数,也支持参数放在字典中 + (void)openURL:(NSString *)url param:(NSDictionary<NSString*,id> * __nullable )param callback:(void (^)(BOOL result))callback; + (BOOL)openURL:(NSString *)url param:(NSDictionary<