====== 让ios程序一直后台运行 ======
选择项目->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后,不一定会审核通过。