我有一个开关,供用户禁用/启用应用程序对该位置的使用。我有两个问题。
1 - 当本机ios弹出窗口出现询问是否允许使用位置时,他说不,我不再显示promixa时间我请求权限弹出窗口,以及启用用户权限的唯一方法在iPhone设置中。
2 - 如果用户已允许使用该位置,但在某些时候您想要禁用该应用程序中存在的开关,则不能。
下面是我正在使用的代码。
-(IBAction)avancar:(id)sender{
if (locationManager == nil) {
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
}
if (switchPermissao.isOn) {
[locationManager startUpdatingLocation];
if(IS_OS_8_OR_LATER) {
[locationManager requestWhenInUseAuthorization];
[locationManager requestAlwaysAuthorization];
}
}else{
[locationManager stopUpdatingLocation];
[self performSegueWithIdentifier:@"tela2" sender:self];
}
}
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusDenied) {
[switchPermissao setOn:NO animated:YES];
}
else if (status == kCLAuthorizationStatusAuthorizedAlways
|| status == kCLAuthorizationStatusAuthorizedWhenInUse) {
[switchPermissao setOn:YES animated:YES];
}
[self performSegueWithIdentifier:@"tela2" sender:self];
}
答案 0 :(得分:0)
RE:1)操作系统只会显示一次权限对话框。用户进行选择后,即使您的代码再次请求权限,操作系统也不会再次显示权限对话框。因此,您必须使用代码处理此问题,以向用户显示自定义对话框/警报。为此,请使用CLLocationManager authorizationStatus
获取当前状态。仅当此状态为kCLAuthorizationStatusNotDetermined
时,操作系统才会显示系统权限对话框。在所有其他情况下,您需要使用自定义对话框处理权限。
RE:2)您的应用无法更改位置服务的状态,这只能由用户在系统设置下更改。要处理此问题,您可以显示一个自定义对话框,该对话框将打开您应用的系统设置,以便用户可以更改状态。您可以在iOS 8中使用UIApplicationOpenSettingsURLString
打开应用的系统设置。