选择项目→targets→项目→info中添加
Required background modes Array (1 item) Item 0 String App registers for location updates
.h文件
@property (nonatomic, strong) NSTimer *_updateTimer; @property (nonatomic) UIBackgroundTaskIdentifier backgroundTask;
.m文件
//响应后台 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil]; #pragma mark-用定时器控制后台运行 //用定时器控制后台运行 -(void)applicationDidEnterBackground:(NSNotificationCenter *)notication{ NSLog(@"程序进入后台!"); UIApplication* app = [UIApplication sharedApplication]; self.backgroundTask = [app beginBackgroundTaskWithExpirationHandler:^{ NSLog(@"applicationD in Background"); }]; //加入定时器,用来控制后台运行时间 self._updateTimer = [NSTimer scheduledTimerWithTimeInterval:60*60*3 target:self selector:@selector(stopUpdate) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:self._updateTimer forMode:NSRunLoopCommonModes]; } //时间到,停止后台运行定位 -(void)stopUpdate{ NSLog(@"时间到,停止后台运行定位!"); [self._updateTimer invalidate]; self._updateTimer = nil; if (self.backgroundTask != UIBackgroundTaskInvalid) { [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask]; self.backgroundTask = UIBackgroundTaskInvalid; } }
参考帖子:http://www.cocoachina.com/bbs/read.php?tid=174389
我自己尝试下来,如果配置App registers for location updates,程序进入后台之后可以获取地理位置信息,但是退出后头上会提示用户[“record”正在使用您的位置信息];如果配置App plays audio or streams audio/video using AirPlay,意思是播放音乐,程序虽然没有挂掉,但是进入后台之后就不能使用位置信息了。
而且还有一个问题,这个软件上传到APP STORE后,不一定会审核通过。