canOpenUrl和tel://

时间:2010-02-23 19:27:54

标签: iphone iphone-sdk-3.0

我无法理解这种方法的工作原理。

从文档中,它指定:

  

canOpenURL:返回是否   应用程序可以打开给定的URL   资源。

     

- (BOOL)canOpenURL:(NSURL *)url

     

参数url一个URL对象   识别给定的资源。网址   方案 - 可能是一种习俗   scheme - 标识哪个应用程序   可以处理URL。

     

如果没有申请,则返回值NO   可用,将接受URL;   否则,返回YES。

     

讨论此方法保证   如果openURL:被调用,另一个   应用程序将启动处理   它。它不保证   完整网址有效。

     

可用性在iPhone OS中可用   3.0及更高版本。在UIApplication.h中声明

具体来说,如果:

保证如果调用openURL:,将启动另一个应用程序来处理它。

然后,例如,如果我传入tel://HELLOWORLD,则返回YES,当我尝试openUrl时,电话应用程序不会调用它。什么都没发生,所以我假设在尝试拨号时,完整的URL无效。

我知道它不会验证完整的网址,但是按照设计,如果我无法拨打该号码,为什么不向我显示错误或其他内容?

基本上我想知道的是:完全验证是什么?

我不相信它只会检查处理程序类型以及支持该特定处理程序的应用程序(例如,tel://对于iPod Touch不起作用。)。

2 个答案:

答案 0 :(得分:12)

验证不是此功能的目的。它只检查是否有为此URL 方案注册的应用程序

E.g。在iPod touch或iPad上,没有手机应用程序,因此canOpenURL会返回NOtel:网址。

或者,如果您要求使用foo:方案的网址,如果用户设备安装了声称可以处理此方案的任何应用,则会返回true。

无法验证网址,因为它不了解foo方案或下一个应用开发者提出的任何方案。此时您也不想加载应用程序以验证URL。

答案 1 :(得分:0)

来自docs

  

讨论

     

这种方法可以保证   如果调用openURL:,则另一个   应用程序将启动处理   它。 它不保证   完整网址有效。