0%

iOS webview 使用百度地图定位

今天遇到需要用 webview 来定位显示地图的问题。

同样的代码直接用 safari 就可以定位,明显有定位的权限弹窗提示;而 app 里就没有任何弹窗,点击定位后提示定位失败。

这里有两个需要注意的地方,一个需要系统添加定位的框架;一个 iOS8 定位权限的获取。

第一个就比较简单了,添加 coreloaction 框架就可以了。

第二个需要两个步骤:

  • plist 里定义权限声明
    用 source edit 的方式编辑 plist,末尾添加


NSLocationAlwaysUsageDescription

NSLocationWhenInUseUsageDescription

  • 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;
    }
    }