博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发 - 百度地图后台持续定位
阅读量:6110 次
发布时间:2019-06-21

本文共 2892 字,大约阅读时间需要 9 分钟。

hot3.png

  • 之前有做一个定位的项目,类似嘀嘀打车那样。 需要后台持续定位。

    这里选择了百度地图,不过在后台持续定位方面, 之前只是简单的设置如下:

    \

    不过经测试发现, 这样设置完,在后台运行大概30分钟,又会被crash掉。 重新打开应用则自动恢复定位。< 喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD48cD48YnIgLz48L3A+PHA+tbHIu6Os1eKyu8rHztLDx8/r0qq1xNCnufujrMv50tTV28zawcvPwqOsyrXP1sHLuvPMqLPW0Pi2qM67oaM8L3A+PHA+19y1xMC0y7WjrL7NysfA+9PDvfjI67rzzKi6887Sw8e/ybLZv9i1xDEwt9bW06OswLTN6rPJ0rvQqcrCx+mhozwvcD48cD7OqrTvtb2z1tD4tqjOu6Osw78xMLfW1tOho9fUtq/W2NDCv6rG9Laozruho9Xi0fm+zb3ivvbOysziwcuhozwvcD48cD48YnIgLz48L3A+PHA+vt/M5cjnz8I6PC9wPjxwPjxiciAvPjwvcD48cD5BcHBEZWxlZ2F0ZS5oPGJyIC8+PC9wPjxwPjxwcmUgY2xhc3M9"brush:java;">@property (nonatomic, unsafe_unretained) UIBackgroundTaskIdentifier bgTask; 

    AppDelegate.m

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    - (
    void
    )backgroundHandler
    {
        
    NSLog(@
    "### -->backgroundinghandler"
    );
         
        
    UIApplication* app = [UIApplication sharedApplication];
         
        
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
             
            
    [app endBackgroundTask:bgTask];
            
    bgTask = UIBackgroundTaskInvalid;
             
        
    }];
         
        
    // Start the long-running task
        
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
    0
    ), ^{
             
            
    // 您想做的事情,
            
    // 比如我这里是发送广播, 重新激活定位
            
    // 取得ios系统唯一的全局的广播站 通知中心
            
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
            
    //设置广播内容
            
    NSDictionary *dict = [[NSDictionary alloc]init];
            
    //将内容封装到广播中 给ios系统发送广播
            
    // LocationTheme频道
            
    [nc postNotificationName:@
    "LocationTheme"
    object:self userInfo:dict];
     
        
    });
         
    }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    - (
    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.
         
        
    BOOL backgroundAccepted = [[UIApplication sharedApplication] setKeepAliveTimeout:
    600
    handler:^{ [self backgroundHandler]; }];
         
        
    if
    (backgroundAccepted)
             
        
    {
            
    NSLog(@
    "backgrounding accepted"
    );
        
    }
     
        
    [self backgroundHandler];
    }

    然后在开启定位的位置,成为广播接收者,并且重新激活定位

    1
    2
    3
    4
    5
    //初始化BMKLocationService
        
    myLocService = [[BMKLocationService alloc]init];
        
    myLocService.delegate = self;
        
    //启动LocationService
        
    [myLocService startUserLocationService];

    1
    2
    3
    4
    NSNotificationCenter *nc2 = [NSNotificationCenter defaultCenter];
         
        
    // 成为听众一旦有广播就来调用self recvBcast:函数
        
    [nc2 addObserver:self selector:
    @selector
    (activeLocation:) name:@
    "LocationTheme"
    object:nil];

    1
    2
    3
    4
    5
    6
    7
    8
    9
    - (
    void
    ) activeLocation:(NSNotification *)notify
    {
        
    [myLocService stopUserLocationService];
        
    //初始化BMKLocationService
        
    myLocService = [[BMKLocationService alloc]init];
        
    myLocService.delegate = self;
        
    //启动LocationService
        
    [myLocService startUserLocationService];
    }

    当然,上面的方式,可能方法比较渣,代码也写的比较乱。

    只是提供一种解决办法而已。

转载于:https://my.oschina.net/u/2603560/blog/596834

你可能感兴趣的文章
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>
Groonga 3.0.8 发布,全文搜索引擎
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>