2015-07-12 93 views
1

堆栈溢出应用程序检测我越狱设置的默认浏览器(Chrome)的名称。我如何在objective-c和swift中实现同样的目标?如何获取默认的iOS浏览器名称?

(只是名称,而不是ActivityView代码)

例子:

chrome


更新:我进入设置>堆栈交流,发现这个:

settings

它看起来应用程序默认为Safari,但iff Chrome安装后,链接将发送到该浏览器。 Chrome最有可能通过下面答案中描述的canOpenUrl方法检测到。

+0

它是否检测到Chrome是您的默认浏览器或只是您安装了Chrome?即使没有显示,您是否也安装了Safari? – ndmeiri

+0

@ndmeiri是的,我已经安装了,还有第三个。通过越狱,我可以将我的默认浏览器更改为Chrome,以便在iOS版Chrome中打开所有应用的链接。不知何故堆栈应用程序找到了我目前的“默认”浏览器。 – Drakes

回答

1

我怀疑Stack Exchange应用程序没有专门检查您的默认浏览器。毕竟,由于Apple不提供简单的方法来更改默认浏览器,我怀疑SDK提供了一个API来检测默认浏览器。

取而代之的是,堆栈交换应用可以使用UIApplication上的canOpenURL(_:)方法来测试是否安装了预定义的一组通用浏览器应用。对于安装的每个浏览器,操作表都会获得一个新按钮。该方法可能类似于以下代码片段。

let safariURL = NSURL(string: "http://stackoverflow.com")! 
let chromeURL = NSURL(string: "googlechrome://stackoverflow.com")! 
let operaURL = NSURL(string: "opera-http://stackoverflow.com")! 

let sharedApplication = UIApplication.sharedApplication() // convenience 

if sharedApplication.canOpenURL(safariURL) { 
    // add "Safari" button to action sheet 
} 

if sharedApplication.canOpenURL(chromeURL) { 
    // add "Chrome" button to action sheet 
} 

if sharedApplication.canOpenURL(operaURL) { 
    // add "Opera" button to action sheet 
} 

// display action sheet 
+0

这是一个合理的方法,并且思路良好,但即使我安装了Safari(可以将其删除?),Chrome也显示出来。也许他们使用这种方法,首先检查Chrome手指交叉? – Drakes

+0

@Drakes也许。测试的一种方法是保持Chrome安装,但将Safari重新设置为默认浏览器。如果按钮仍然说Chrome,那么你是对的。 – ndmeiri

+0

我切换回Safari,它仍然显示Chrome。我切换到另一个浏览器,它仍然显示Chrome。我删除了Chrome,并且显示了Safari。 – Drakes