如何在 iOS 10 上以编程方式打开 Objective-C 中的 WIFI 设置
How to programmatically open the WIFI settings in Objective-C on iOS 10
以下代码在 iOS 9 上运行良好,请参阅 post。但它不适用于 iOS 10。如何在 iOS 10
上以编程方式打开 WIFI 设置
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];
完全相同的代码应该可以工作,但是对于 iOS 10,您需要通过将 "prefs" 添加到 URL 类型来做一些额外的工作:
选择目标后:
- 导航到 "Info" 选项卡。
- 滚动到底部后,您应该会看到 "URL Types" 部分。
- 添加一个新的(通过单击加号按钮)并用 "prefs" 填充 "URL Schemes"。
应该是这样的:
现在,您的代码应该可以正常工作了。
更新:
如果它以某种方式没有按预期工作,您可能需要遵循此workaround。
希望对您有所帮助。
试试这个:
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]options:[NSDictionary dictionary] completionHandler:^(BOOL success) {
}];
}
谢谢:)
在iOS 10 中,需要一个新的url。尝试使用此代码来测试 urls :
NSArray* urlStrings = @[@"prefs:root=WIFI", @"App-Prefs:root=WIFI"];
for(NSString* urlString in urlStrings){
NSURL* url = [NSURL URLWithString:urlString];
if([[UIApplication sharedApplication] canOpenURL:url]){
[[UIApplication sharedApplication] openURL:url];
break;
}
}
对于Swift:
let url = URL(string: "App-Prefs:root=WIFI")
if UIApplication.shared.canOpenURL(url!){
UIApplication.shared.openURL(url!)
}
这在 iOS 10,
上工作正常
Go to Targets --> (Application) --> Info --> URL Types --> +
在URL Schemes
写
prefs
看图,
然后添加如下代码,
-(void)openWifiSettings{
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"prefs:root=WIFI"]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];
} else {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"App-Prefs:root=WIFI"]];
}
}
let url=URL(string: "App-Prefs:root=WIFI")
// you can change root as your requirements
if UIApplication.shared.canOpenURL(url!)
{
UIApplication.shared.open(url!, options: [:], completionHandler: {success in
})
}
else{
UIApplication.shared.open(url!, options: [:], completionHandler: {success in
})
}
Swift4.2,iOS12
使用较新版本的 iOS 不再可能进行这种深层链接。我的应用最近被拒绝使用:“非public URL 方案”,例如:prefs:root=
。所以我想说不要浪费你的时间在我们目前不能做的事情上,只需打开设置即可。
这是我目前在我的应用程序中使用的功能:
extension UIApplication {
...
@discardableResult
static func openAppSetting() -> Bool {
guard
let settingsURL = URL(string: UIApplicationOpenSettingsURLString),
UIApplication.shared.canOpenURL(settingsURL)
else {
return false
}
UIApplication.shared.open(settingsURL)
return true
}
}
用法:UIApplication.openAppSetting()
以下代码在 iOS 9 上运行良好,请参阅
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];
完全相同的代码应该可以工作,但是对于 iOS 10,您需要通过将 "prefs" 添加到 URL 类型来做一些额外的工作:
选择目标后:
- 导航到 "Info" 选项卡。
- 滚动到底部后,您应该会看到 "URL Types" 部分。
- 添加一个新的(通过单击加号按钮)并用 "prefs" 填充 "URL Schemes"。
应该是这样的:
现在,您的代码应该可以正常工作了。
更新:
如果它以某种方式没有按预期工作,您可能需要遵循此workaround。
希望对您有所帮助。
试试这个:
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]options:[NSDictionary dictionary] completionHandler:^(BOOL success) {
}];
}
谢谢:)
在iOS 10 中,需要一个新的url。尝试使用此代码来测试 urls :
NSArray* urlStrings = @[@"prefs:root=WIFI", @"App-Prefs:root=WIFI"];
for(NSString* urlString in urlStrings){
NSURL* url = [NSURL URLWithString:urlString];
if([[UIApplication sharedApplication] canOpenURL:url]){
[[UIApplication sharedApplication] openURL:url];
break;
}
}
对于Swift:
let url = URL(string: "App-Prefs:root=WIFI")
if UIApplication.shared.canOpenURL(url!){
UIApplication.shared.openURL(url!)
}
这在 iOS 10,
上工作正常Go to Targets --> (Application) --> Info --> URL Types --> +
在URL Schemes
写
prefs
看图,
然后添加如下代码,
-(void)openWifiSettings{
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"prefs:root=WIFI"]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];
} else {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"App-Prefs:root=WIFI"]];
}
}
let url=URL(string: "App-Prefs:root=WIFI")
// you can change root as your requirements
if UIApplication.shared.canOpenURL(url!)
{
UIApplication.shared.open(url!, options: [:], completionHandler: {success in
})
}
else{
UIApplication.shared.open(url!, options: [:], completionHandler: {success in
})
}
Swift4.2,iOS12
使用较新版本的 iOS 不再可能进行这种深层链接。我的应用最近被拒绝使用:“非public URL 方案”,例如:prefs:root=
。所以我想说不要浪费你的时间在我们目前不能做的事情上,只需打开设置即可。
这是我目前在我的应用程序中使用的功能:
extension UIApplication {
...
@discardableResult
static func openAppSetting() -> Bool {
guard
let settingsURL = URL(string: UIApplicationOpenSettingsURLString),
UIApplication.shared.canOpenURL(settingsURL)
else {
return false
}
UIApplication.shared.open(settingsURL)
return true
}
}
用法:UIApplication.openAppSetting()