我有一个具有明确用户交互的应用程序,它利用了用户的当前位置.如果用户拒绝访问位置服务,我仍然希望后续用户提示用户转到设置并为我的应用重新启用位置服务.
我想要的行为是内置地图应用程序的行为:
在我自己的应用程序中,相同的基本流程导致我的CLLocationManagerDelegate -locationManager:didFailWithError:方法在最后一步调用kCLErrorDenied错误,并且用户没有选择打开Settings应用程序来纠正它.
我可以显示自己的警报以响应错误,但是它无法启动"设置"应用程序,就像操作系统可以提供内置地图应用程序所使用的警报一样.
CLLocationManager类中有什么东西我错过了能够给我这个行为吗?
我想拥有与地图应用程序相同的功能,每当用户按下"当前位置"按钮打开位置服务时,系统会提示用户:
在地图应用中,用户每次都会收到"打开位置服务..."消息.我怎样才能让我的应用程序也这样做?我让用户我正在使用一个新的CLLocationManager实例,以防这是问题,但事实并非如此.我看不到会影响这个的任何设置.
如果我自己发出警报,我就无法获得相同的"设置"按钮功能.此外,我不希望用户看到多个看起来相同的警报.
有任何想法吗?
在我的应用程序中,如果用户不允许访问其当前位置,我可以通过以下方法接收该消息
- (void)locationManager:(CLLocationManager*)aManager didFailWithError:(NSError*)anError
{
switch([anError code])
{
case kCLErrorLocationUnknown:
break;
case kCLErrorDenied:
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Access Denied" message:@"You didn't allow to access your current location" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何第二次询问用户权限?
我搜索并得到答案否,如果用户希望应用程序访问他/她的位置,他/她如何设置应用程序以使用他们当前的位置?
是删除应用程序并下载另一个唯一的解决方案?
从locationManager的文档:didFailWithError:
如果用户拒绝您的应用程序使用位置服务,则此方法会报告kCLErrorDenied错误.收到此类错误后,您应该停止位置服务.
当用户按"不允许"问题"MyApp想要使用您的当前位置"时,它可以工作,这样您就可以管理这种可能性.
但是当用户按下"取消"问题"打开位置服务以允许"MyApp"确定您的位置"时,没有任何事情发生(如果位置服务关闭则会出现此消息.
有没有办法进行任何类型的回调?