CLLocationManager AuthorizationStatus callback?

后端 未结 6 1883
天命终不由人
天命终不由人 2021-02-01 02:38

In my app I have a tab called \"Discover\". The Discover tab will use the users current location to find \"stuff\" near them. Instead of presenting the user with a generic Autho

6条回答
  •  自闭症患者
    2021-02-01 03:35

    Objective C

    For a block callback on didChangeAuthorizationStatus add this in .h

    @property void(^authorizationCompletionBlock)(BOOL);
    

    and following in .m

    -(void)locationManager:(CLLocationManager *)locationManager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    _authorizationStatus = status;
    
    switch (status) {
        case kCLAuthorizationStatusAuthorizedAlways:
        case kCLAuthorizationStatusAuthorizedWhenInUse:
            if (self.authorizationCompletionBlock) {
                self.authorizationCompletionBlock(YES); // this fires block
            }
        default:
            if (self.authorizationCompletionBlock) {
                self.authorizationCompletionBlock(NO); // this fires block
            }
            break;
        }
    }
    

    and add handler like this:

    // this listens block
    // in your VC or Utility class
    authorizationCompletionBlock = ^(BOOL isGranted) {
        completionBlock(isGranted);
    };
    

    Swift 3.2

    var authorizationCompletionBlock:((Bool)->())? = {_ in}
    
    
    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        switch (status)
        {
        case (.authorizedWhenInUse):
            if authorizationCompletionBlock != nil
            {
                authorizationCompletionBlock!(true)
            }
    
        default:
            if authorizationCompletionBlock != nil
            {
                authorizationCompletionBlock!(false);
            }
        }
    }
    

    and handler like this

    authorizationCompletionBlock = { isGranted in
            print(isGranted)
        }
    

提交回复
热议问题