美文网首页iOSiOS移动开发iOS开发
iOS后台定位,实时向服务器发送最新位置

iOS后台定位,实时向服务器发送最新位置

作者: Lonely__M | 来源:发表于2015-09-29 10:00 被阅读11061次

第一步,开启后台模式,选中定位,选择project --> capabilities-->Backgorund Modes --> Location updates 如图:

Paste_Image.png

第二步,在info.list 文件中添加如下配置:

允许 http 请求 ,ios 9 之后需要添加,便于向服务器发送请求

<key>NSAppTransportSecurity</key>
 <dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
 </dict>
添加定位权限,ios8之后需要添加,否则无法定位

<key>NSLocationWhenInUseUsageDescription</key>
 <string>YES</string>
 <key>NSLocationAlwaysUsageDescription</key>
 <string>YES</string>

第三步,代码如下:



#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    self.view.backgroundColor = [UIColor whiteColor];
    self.title = @"后台定位";
    
    self.locationManager = [[CLLocationManager alloc] init];
    
    self.locationManager.delegate = self;
    
    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    
    if ([[UIDevice currentDevice].systemVersion floatValue] > 8)
    {
         /** 请求用户权限:分为:只在前台开启定位  /在后台也可定位, */
        
         /** 只在前台开启定位 */
//        [self.locationManager requestWhenInUseAuthorization];
        
         /** 后台也可以定位 */
        [self.locationManager requestAlwaysAuthorization];
    }
    
    if ([[UIDevice currentDevice].systemVersion floatValue] > 9)
    {
         /** iOS9新特性:将允许出现这种场景:同一app中多个location manager:一些只能在前台定位,另一些可在后台定位(并可随时禁止其后台定位)。 */
        [self.locationManager setAllowsBackgroundLocationUpdates:YES];
    }
    
     /** 开始定位 */
    [self.locationManager startUpdatingLocation];
}

#pragma mark -  定位代理方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
    CLLocation *loc = [locations objectAtIndex:0];
    
    NSLog(@"经纬度  %f  %f ",loc.coordinate.latitude,loc.coordinate.longitude);
    
    NSURLSession *session = [NSURLSession sharedSession];
    
    NSURLSessionDataTask *task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://ac.ybjk.com/ua.php"]] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//        NSLog(@"response  %@",response);
        
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        
        NSLog(@"result %@",result);
    }];
    
    [task resume];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

至此,完成后台实时定位功能,并向服务器发送请求成功

记录点滴。

Tip


学习的路上总是曲折的,每个人都是从菜鸟过来的,遇到问题总是希望能够与他人沟通交流,而在各种群里问了问题就石沉大海,所以想建一个技术交流为主的群,遇到的问题可以记录下来分享给他人,方便了自己,也造就了他人,不管怎样,记录点滴,但愿与君共勉

*QQ群号:527377492 *

Paste_Image.png

相关文章

网友评论

  • 路边的风景呢:大神 您的联系方式是什么 我想请教一个问题
  • 饥人谷_张炜:调试模式都可以,但是不连接Xcode、直接打开App 就不能后台定位了。
  • 梁森的简书:实时定位实时上传位置这样很费流量吧。而且也影响性能吧
    Lonely__M:@阳光黑 只是提供这样一个实现思路,具体的实现和业务紧密相连:smile:
  • 秋田之意:调试模式都可以,但是不连接Xcode、直接打开App 就不能后台定位了。
    秋田之意:@饥人谷_张炜 解决了的哦。~只是我都记不得怎么解决的了,一般是 把权限勾选好了。然后 就用过ios的系统定位 就可以一直定位! 具体怎么解决,忘记了。!:relaxed:
    饥人谷_张炜:你好 我现在情况和你一样 你有解决这个问题么....
  • Hunter琼:ios7能用吗??
  • 洁简:怎么实时监听位置是否打开呢?
  • 卟师:你好,我能转载分享吗?我会标注上作者和出处的
    Lonely__M:@卟师 好的
  • Civiy:锁屏好像就不行了,打印log输出测试,锁屏无日志输出,后台可以
  • panda_熊猫:实时后台定位导致内存飙升,怎么回事?指点一下,谢谢
  • 986d14688d75:可以实现后台定位.如果要持续性的后台定位,防止APP被系统杀死之后就无法定位,这样的demo楼主做过吗,能否给些指点
    东方不败撸大师:@嘿小学生 文章里面 有下载SDK 的地址哦
    嘿小学生:@东方不败撸大师 你的SDK呢?
    东方不败撸大师:@Reminisce天彤 楼主这个是基本的定位,不过很棒!。如果要进入后台同时锁屏的情况下继续定位上传更新数据可以看看我写的SDK。。。

本文标题:iOS后台定位,实时向服务器发送最新位置

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