我想让我的应用程序继续在后台运行位置服务.为此我用过:
-(void)applicationDidEnterBackground:(UIApplication *)application {
[locationManager stopUpdatingLocation];
[locationManager startUpdatingLocation];
//timer=[NSTimer scheduledTimerWithTimeInterval:300 target:self selector:@selector(UpdateLocation) userInfo:nil repeats:YES];
}
Run Code Online (Sandbox Code Playgroud)
但是当我使用NSTimer它时不会打电话UpdateLocation.我尝试使用另一种方法调用它,但之后它也只调用一次.
我想在后台持续运行应用程序,在定期间隔后检测位置.
我创建了在后台运行NSTimer的Application.我使用位置管理器在后台运行NSTimer,
我使用下面的链接在后台运行NSTimer,
这种方法在iOS 6中运行良好,但在iOS 7上无效.我的应用程序在iOS 7后面的应用程序中应用程序崩溃了一段时间.
如果有任何不同的方法在后台运行NSTimer,请告诉我.
提前致谢.
如果应用程序处于后台状态或处于前台状态,我希望每5分钟更新一次用户的位置.这是一个非常敏感的应用程序,所以在任何时候都知道位置是至关重要的.
关于这个问题有很多关于SO的答案,但是很多都是针对iOS 6及更早版本的.在iOS 7之后,许多后台任务已经改变,我很难找到在后台实现定期位置更新的方法.
概观
我的公司要求我发布一个可以每两个小时检查一次设备位置的应用程序.应用程序会通过TCP/IP套接字将这些位置数据发送到我的服务器,然后根据这些非常数据(直接通过相同的TCP/IP套接字)接收信息.所以我不是试图让我的应用程序在后台模式下连续运行(实际上,这似乎是iOS中的热门话题,而且它也不适合我的项目).
题
为了可靠,实现这一目标的最佳做法是什么?所以,我想知道:
didUpdateToLocation?beginBackgroundTaskWithExpirationHandler并使用Cocoa允许的10分钟来执行我的发送/接收任务吗?到目前为止我取得的成就/发现
location密钥Info.plist以便能够运行didUpdateToLocation处理程序.backgroundTimeRemaining什么时候didUpdateToLocation被调用.我得到了一个非常大的结果数,这似乎是正常的,因为在这一点上,applicationState它不在UIApplicationStateBackground但是在UIApplicationStateActive.这些要点在官方文档中并不十分清楚,我没有找到与我的具体案例相关的主题.
谢谢你的帮助.
我已经按如下方式配置了locationManager.
_locationManager = [[CLLocationManager alloc] init];
[_locationManager setDelegate:self];
[_locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
[_locationManager setDistanceFilter:kCLDistanceFilterNone];
Run Code Online (Sandbox Code Playgroud)
当应用程序运行时,我从委托方法获得一些更新.当我不改变位置,并且移动设备静止约2小时后,我在前10分钟内收到大约10-12个更新,然后停止接收更新.
我所理解的是,理想的准确度是设备将继续尝试越来越精确的方法来获取当前位置的时间.所以在我的情况下,需要大约10分钟才能获得所需的精度.
我想确认这是否属实.还有一种方法可以让我获得定期的位置更新,即使设备没有移动?