ios 持续获取定位 高德地图_iOS 后台持续定位,避免被系统回收
开启后台服务,如下图在info.list文件里面需要开启持续定位服务在AppDelegate里面添加如下代码创建CLLocationManager对象,并且设置CLLocationManagerDelegate的代理在didFinishLaunchingWithOptions方法里面调用rjxContinuedLocationManager这个方法#import "AppDelegate.h"#i
·
开启后台服务,如下图
在info.list文件里面需要开启持续定位服务
在AppDelegate里面添加如下代码
- 创建CLLocationManager对象,并且设置CLLocationManagerDelegate的代理
- 在didFinishLaunchingWithOptions方法里面调用rjxContinuedLocationManager这个方法
#import "AppDelegate.h"#import @interface AppDelegate()@property (nonatomic, strong) CLLocationManager *manager;@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //设置后台模式和锁屏模式下依然能够播放 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil]; [[AVAudioSession sharedInstance] setActive: YES error: nil]; [self rjxContinuedLocationManager]; [GeneratedPluginRegistrant registerWithRegistry:self]; // Override point for customization after application launch. return [super application:application didFinishLaunchingWithOptions:launchOptions];} // ios 8.x or older-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{ return [FlutterAlipayPlugin handleOpenURL:url];}// ios 9.0+-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{ return [FlutterAlipayPlugin handleOpenURL:url];}/** 应用进入后台执行定位 保证进程不被系统kill */-(void)rjxContinuedLocationManager{ //1.创建定位管理对象 _manager = [[CLLocationManager alloc]init]; //2.设置属性 distanceFilter、desiredAccuracy [_manager setDistanceFilter:kCLDistanceFilterNone];//实时更新定位位置 [_manager setDesiredAccuracy:kCLLocationAccuracyBest];//定位精确度 if([_manager respondsToSelector:@selector(requestAlwaysAuthorization)]){ [_manager requestAlwaysAuthorization]; } //该模式是抵抗程序在后台被杀,申明不能够被暂停 _manager.pausesLocationUpdatesAutomatically = NO; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) { //在后台也可定位 [_manager requestAlwaysAuthorization]; } if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) { _manager.allowsBackgroundLocationUpdates = YES; } //3.设置代理 _manager.delegate = self; //4.开始定位 [_manager startUpdatingLocation]; //5.获取朝向 [_manager startUpdatingHeading];}// 当你的程序将要被挂起,会调用改方法- (void)applicationWillResignActive:(UIApplication *)application { /** 应用进入后台执行定位 保证进程不被系统kill */ [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self.manager startUpdatingLocation];}/** 应用进入后台执行定位 保证进程不被系统kill */- (void)applicationDidEnterBackground:(UIApplication *)application { UIApplication *app = [UIApplication sharedApplication]; __block UIBackgroundTaskIdentifier bgTask; bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ dispatch_async(dispatch_get_main_queue(), ^{ if (bgTask != UIBackgroundTaskInvalid){ bgTask = UIBackgroundTaskInvalid; } }); }]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ dispatch_async(dispatch_get_main_queue(), ^{ if (bgTask != UIBackgroundTaskInvalid){ bgTask = UIBackgroundTaskInvalid; } }); }); [self.manager startUpdatingLocation];}@end
更多推荐
已为社区贡献2条内容
所有评论(0)