背景
我们在应用中经常会遇到这样的场景,我们第一次打开应用的时候,会有很多的弹框,包括说会调用你的相机和相册权限啥的,还有网络权限还有通知权限,是否允许,我们有时候会很自然的出于保护的意识,点击那个不允许,那么一旦不允许之后,如果后面用户发现点击某个按钮或者进入某个界面需要用到定位功能,但是已经不允许了,那么我们这个时候要提示用户去进入设置界面设置权限,如何实现呢?
实现
其实很简单,就是只要是应用外的东西,包括外链都是调用openURL
这个接口,请看ViewContorller中的代码:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self addBtn];
}
- (void)addBtn{
UIButton *btn = [[UIButton alloc]init];
btn.frame = CGRectMake(0, 0, 200, 50);
btn.center = self.view.center;
btn.backgroundColor = [UIColor orangeColor];
[self.view addSubview:btn];
[btn setTitle:@"点我跳转设置界面" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(didClickBtn) forControlEvents:UIControlEventTouchUpInside];
}
- (void)didClickBtn{
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if([[UIApplication sharedApplication] canOpenURL:url]) {
NSURL*url =[NSURL URLWithString:UIApplicationOpenSettingsURLString];
//此处可以做一下版本适配,至于为何要做版本适配,大家应该很清楚
[[UIApplication sharedApplication] openURL:url];
}
}
@end
以下是核心代码:
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if([[UIApplication sharedApplication] canOpenURL:url]) {
NSURL*url =[NSURL URLWithString:UIApplicationOpenSettingsURLString];
//此处可以做一下版本适配,至于为何要做版本适配,大家应该很清楚
[[UIApplication sharedApplication] openURL:url];
}
跳转到系统设置的当前某个界面
iOS跳转到具体某个应用的设置
代码如下:
[[UIApplication sharedApplication]openURL:[NSURLURLWithString:@"prefs:root=com.app.app"]];
但是运行起来就报错:
canOpenURL: failed for URL: "prefs:root=LOCATION_SERVICES" - error: "The operation couldn’t be completed. (OSStatus error -10814.)"
查阅资料后发现iOS10之前和iOS之后是有区别的:
详情请查阅:iOS10以后跳转系统设置的url
但是即便即便不报错了,还是达不到我们的预期,就是说都是只能跳转到设置界面,但是跳转不到设置里面的应用的界面,原因是苹果不让跳转了,只能跳转到和以下代码一样的效果:
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if([[UIApplication sharedApplication] canOpenURL:url]) {
NSURL*url =[NSURL URLWithString:UIApplicationOpenSettingsURLString];
//此处可以做一下版本适配,至于为何要做版本适配,大家应该很清楚
[[UIApplication sharedApplication] openURL:url];
}
以上!