今天遇到需要用 webview 来定位显示地图的问题。
同样的代码直接用 safari 就可以定位,明显有定位的权限弹窗提示;而 app 里就没有任何弹窗,点击定位后提示定位失败。
这里有两个需要注意的地方,一个需要系统添加定位的框架;一个 iOS8 定位权限的获取。
第一个就比较简单了,添加 coreloaction 框架就可以了。
第二个需要两个步骤:
- plist 里定义权限声明
用 source edit 的方式编辑 plist,末尾添加
`
`
- appdelegate 里代码获取权限
写代码,实现代理方法
`
locationManager = [CLLocationManager new];
locationManager.delegate = self;
[locationManager requestAlwaysAuthorization];
[locationManager requestWhenInUseAuthorization];
`
` - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
switch (status) {
case kCLAuthorizationStatusDenied :
{
// 提示用户出错原因,可按住Option键点击 KCLErrorDenied的查看更多出错信息,可打印error.code值查找原因所在
UIAlertView *tempA = [[UIAlertView alloc]initWithTitle:@”提醒” message:@”请在设置-隐私-定位服务中开启定位功能!” delegate:nil cancelButtonTitle:@”确定” otherButtonTitles:nil];
[tempA show];
}
break;
case kCLAuthorizationStatusNotDetermined :
//根据自己的需求和plist中的字段调用requestWhenInUseAuthorization或requestAlwaysAuthorization
if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[locationManager requestWhenInUseAuthorization];
}
break;
case kCLAuthorizationStatusRestricted:
{
// 提示用户出错原因,可按住Option键点击 kCLErrorDenied的查看更多出错信息,可打印error.code值查找原因所在
UIAlertView *tempA = [[UIAlertView alloc]initWithTitle:@”提醒”
message:@”定位服务无法使用!”
delegate:nil
cancelButtonTitle:@”确定”
otherButtonTitles:nil, nil];
[tempA show];
}
break;
default:
break;
}
}
`