后台定位

刚刚做一个用于后台定位的demo,在网上搜索了很多代码都说ios支持在后台的三种包括音乐、电话、还有定位

起初在模拟器中运行代码,然后退出到后台后代码也正常运行,每隔一秒都会打印一次经纬度,可是我弄到真机上后,发现出问题了,进入后台后代码执行一次打印,之后就没有反应了。

好了,废话不多说,上代码

首先需要配置环境,这个网上很多,也都很对,我用的是Xcode5.0版本的,有一种更简单的方法就是点击项目->选中Target->然后你会看到有General、Capabilities、Info、Build Settings、Build Phases、Build Rules这些常用于配置的选项,点击Capabilities你会看到有九个选项,再选择Background Modes选项,这里面是多项选择,选择你需要支持的后台应用就可以了。我选择的是这些

下面再说代码部分在Appdelegate.m页面的后台方法中如下

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    if ([[UIDevice currentDevice]respondsToSelector:@selector(isMultitaskingSupported)]) {
        if ([[UIDevice currentDevice]isMultitaskingSupported]) {
            UIApplication *application=[UIApplication sharedApplication];
            UIBackgroundTaskIdentifier backgroundTask = 0;
            backgroundTask=[application beginBackgroundTaskWithExpirationHandler:^{
                [application endBackgroundTask:backgroundTask];
                //backgroundTask = UIBackgroundTaskInvalid;
            }];
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                [application endBackgroundTask:backgroundTask];
            });
            
        }
    }
}

然后在另个自己建立的controller里面执行如下代码
    //定位lable
    alertLable=[[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 40)];
    alertLable.backgroundColor=[UIColor orangeColor];
    alertLable.hidden=YES;
    alertLable.text=@"无法定位";
    [self.view addSubview:alertLable];
    //调用定位协议方法
    locationManager=[[CLLocationManager alloc]init];
    [locationManager setDelegate:self];
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    //开始定位
    [locationManager startUpdatingLocation];

//开始追踪
-(void)startTracking:(id)sender
{
    if (locationManager) {
        [locationManager startMonitoringSignificantLocationChanges];
    }
}

//定位的协议方法CLLocationManagerDelegate

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    CLLocation *local=[locations lastObject];
    NSDate *eventDate=local.timestamp;
    NSTimeInterval howRecent=[eventDate timeIntervalSinceNow];
    if (abs(howRecent)<15.0) {
        NSLog(@"%f--------------%f",local.coordinate.latitude,local.coordinate.longitude);
    }
    
}
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
    NSLog(@"定位失败,原因是:--------%@",[error description]);
    [alertLable setHidden:NO];
}

进入后台后你也可以发现不断的有经纬度打印出来

起初我以为真机有问题呢,偶然间发现并不是这样,只是真机时间间隔较大,等了5分钟后同样执行了,所以在此告诉大家,有些地方可能并没有出错,只是时间问题。

哈哈哈哈哈----------时间可以证明一切。。。。。。。。。。

至于为什么我还没有研究出来,同时希望知道原因的大神们赐教。

这些都是小弟刚发现的,还不确定到底有多达的正确性,望各位给予批评




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值