美文网首页程序员计算机微刊
后台持续定位,实时上传坐标

后台持续定位,实时上传坐标

作者: 奴良 | 来源:发表于2017-08-22 11:13 被阅读112次
    background.jpg

    项目配置

    • 1: 需在项目配置中开启如下权限


      setting
    • 2:在info.plist中添加 NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription

    实现部分代码

    demo点这里

    //定位 相关参数设置
    - (CLLocationManager *)locManager
    {
        if (!_locManager) {
            _locManager = [[CLLocationManager alloc] init];
            if ([_locManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) {
                _locManager.allowsBackgroundLocationUpdates = YES;
            }
            _locManager.pausesLocationUpdatesAutomatically = NO;
            _locManager.distanceFilter = kCLDistanceFilterNone;
            _locManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
        }
        return _locManager;
    }
    
    - (void)startLocation
    {    
        if ([CLLocationManager locationServicesEnabled] == NO) {
            NSLog(@"locationServicesEnabled false");
        } else {
            CLAuthorizationStatus authorizationStatus= [CLLocationManager authorizationStatus];
            
            if(authorizationStatus == kCLAuthorizationStatusDenied || authorizationStatus == kCLAuthorizationStatusRestricted) {
                NSLog(@"authorizationStatus failed");
            } else {
                NSLog(@"authorizationStatus authorized");
                self.locManager.delegate = self;
                
                [self.locManager requestAlwaysAuthorization];
    //            [self.locManager requestWhenInUseAuthorization];
                [self.locManager startUpdatingLocation];
    }   
    
    //回调
    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
    {
        if (![self canUpload]) return;
        
        CLLocation *loc = locations.firstObject;
        
        NSLog(@"----- i = %d, 维度: %f, 经度: %f", i++, loc.coordinate.latitude, loc.coordinate.longitude);
        
        //上传定位
        [self uploadLocation:loc.coordinate];
    }
    
    - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
    {
        NSLog(@"定位失败: %@", error);
    }
    
    - (BOOL)canUpload
    {
        CFTimeInterval t = CACurrentMediaTime();
        if (t - self.lastUpdateTime > _interval) {
            self.lastUpdateTime = t;
            return YES;
        }
        return NO;
    }
    

    效果图

    foreground.png lock.jpg

    后言

    由于截图是在位置不变的情况下进行的测试,位置不变,定位回调会间隔有点长,可能不会每60s(所设置的时间间隔)就回调一次, 但是如果在室外位置移动的情况及设置 _locManager.desiredAccuracy = kCLLocationAccuracyBest; 的情况下, 几乎可以达到每秒定位回调成功一次。

    相关文章

      网友评论

        本文标题:后台持续定位,实时上传坐标

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