ios从app跳转到设置开启定位

作者: 李易_64c1 | 来源:发表于2017-09-08 16:40 被阅读0次

    想要自己的app能够定位成功,相对于系统来说要开启两个权限

    1)开启系统定位,下面代码可以判断系统的定位是否开启

    [CLLocationManager locationServicesEnabled];

    2)开启本app的允许定位权限,下面代码可以判断当前的允许定位状态

    ```[CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied```

    在app安装成功之后有定位需求的情况下系统进行两次询问是否开启app定位,有alert提示框,如果在提示框处同意开启定位则不用跳转设置的开启定位。

    引导用户跳转设置开启定位界面一般以弹出alert框的形式,在跳出alert框之前判断当前是否开启定位,如若开启不弹引导框

    [UIAlertView bk_showAlertViewWithTitle:@"打开“定位服务”来允许“你的app”确定你的位置" message:@"你的app需要使用您的位置来为你提供服务" cancelButtonTitle:@"取消" otherButtonTitles:@[@"设置"]handler:^(UIAlertView *alertView, NSInteger buttonIndex) {

    if (buttonIndex == 1) {

    //同意前往设置,跳到设置界面

    }

    } else {

    //不同意前往设置

    }

    在app中有方法跳转本app的设置开启定位,下面的openURL方法在iOS2.0以上系统均支持

    NSURL *url = [[NSURL alloc] initWithString:UIApplicationOpenSettingsURLString];

    if( [[UIApplication sharedApplication] canOpenURL:url]) {

    [[UIApplication sharedApplication] openURL:url];

    }

    还有一带回调的方法,下面的带成功回调的方法只有iOS10以上的系统才有,在iOS10.0以下会因为找不到方法的实现而崩溃,如果你的app要兼容10以下系统建议用上面的方法

    [[UIApplication sharedApplication] openURL:url options:nil completionHandler:^(BOOL success) {

    }];

    跳到设置界面意味着跳出本app,本app进入后台,大约跳出本app 10min后本app就会被系统杀死。

    可以用kvo监听CLLocationManager authorizationStatus的状态改变以便在跳出app的情况下知道用户是否在设置中开启定位。

    还可以在跳出app之前对当前的定位允许状态进行保存,待下次app从后台进入前台时再取出当前定位状态进行比较(可以通过notifacation监控进入后台和进入前台,并保存当前[CLLocationManager authorizationStatus]的值,监控UIApplicationDidBecomeActiveNotification和UIApplicationWillResignActiveNotification),前者状态是NO,后者状态是YES的情况下开始定位,startUserLocationService,并发送定位成功通知,通知各个依赖定位的页面定位成功,刷新页面。

    '''

    - (void)handleBecomeActive {

    //如果进入后台的时候app不允许定位,进入前台app允许定位则进行定位

    if(!self.beforeLocationState&&[CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied&&[self locationEnable]) {

    [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationHasOpenLocation object:nil];

    [self updateLocation];

    }

    }

    '''

    注:kNotificationHasOpenLocation用来通知各个需要定位的页面刷新页面

    注意:1)用户不一定是通过点击引导定位的弹窗跳到设置去开启定位,还可能通过按home键,然后自己到设置开启本app的定位,在app从后台进入前台时要判断允许定位是否开启,如果开启将alert给dismiss掉。

              2)引导定位的alert有两种被dismiss的方式,一是用户不同意引导定位,二是用户同意引导定位并在设置中打开定位,后面有需求在不同意引导定位时弹出定位失败的提示框,要对两种情况进行区分,用一属性进行记录,前者在提示框的回调中对属性赋值,并发送不同意定位的通知,以便各个vc弹出提示框;后者在从后台进入前台时对属性赋值。

    相关文章

      网友评论

        本文标题:ios从app跳转到设置开启定位

        本文链接:https://www.haomeiwen.com/subject/yiswjxtx.html