我搜索了很多天的解决方案,但我没有发现任何令我满意的事情。
我已启动LocationManager
,这是正常的。现在,我想将LocationManager
与时间表联系起来。例如,在上午9点到下午1点之间,位置经理应该工作,下午1点到3点应该关闭,然后到午夜,位置经理必须开启。
如果应用被暂停且LocationManager
已关闭,我该如何触发操作?
我写了这样的话:
[NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(doInBackground:) userInfo:nil repeats:YES];
- (void) doInBackground:(NSTimer*)time {
ScheduleModel *schMod = [[ScheduleModel alloc]init];
if(![schMod isScheduleActiveNow]){
[locationManager stopUpdatingLocation];
NSLog(@"LocationManager OFF");
} else if(!locationManager){
[locationManager startUpdatingLocation];
NSLog(@"LocationManager ON");
}
[schMod release];
}
但它仅在LocationManager
工作时有效。当我关闭LocationManager
时,似乎没有任何东西可以触发操作doInBackground
。
这个问题有解决方法吗?
答案 0 :(得分:0)
当应用程序暂停时,如果您尚未注册后台位置服务并启动了位置管理器实例更新,则无法通过计时器再次开始更新应用程序。 您的选择是:
背景中的持续更新(如果不是必需的话)不是对用户电池的负责任处置。如果你解释了你想要完成的更多内容,我可能会有更好的建议。
你可以在github上看到我在处理程序中以后台状态工作的一些内容:
答案 1 :(得分:0)
为了实现这样的功能,您必须注意有关ios应用程序状态及其多任务处理能力的一些要点。 首先,即使应用程序未运行,您也需要注册应用程序以获取位置更新。通过重要位置更改属性,您可以跟踪应用程序状态的无关位置。 另一件事是您需要在特定时间间隔内更新位置。我认为可以通过触发本地通知服务来实现。