我正在构建一个使用CoreLocation的应用程序有两个目的:
首先,监控信标区域.大多数情况下,我们使用充当信标的特定硬件设备,并使用CoreLocation跟踪该信标连接的状态.
其次,当应用程序检测到与信标设备断开连接时,我们希望启动GPS进程以找到断开连接的位置.
在大多数情况下,当应用程序处于后台时,会发生信标设备的断开连接回调.因此,应用程序必须通过-startUpdatingLocation在后台进行呼叫来启动GPS跟踪.
这就是问题所在.如果-startUpdatingLocation在应用程序处于后台时调用发生,iOS似乎无法启用位置后台更新.
显然,我已经正确配置了背景模式,NSLocationAlwaysUsageDescription将属性设置_locationManager.allowsBackgroundLocationUpdates为YES.
令人惊奇的事情:如果我-startUpdatingLocation在前台呼叫然后切换到后台,位置更新会在后台正确发送.但是,当-startUpdatingLocation在后台进行调用时,应用程序会收到2或3个位置更新,然后永久暂停..直到我手动将应用程序恢复到前台,当位置更新恢复时,即使我将应用程序切换到再次背景.
有人知道或理解我该怎么做才能解决这个问题?或者它是iOS的主要约束?由于我的应用程序的要求,我真的需要在应用程序处于后台时开始定位更新(在信标的回调内部确实退出区域).
顺便说一句,如果你想重现这个问题很容易.只需在Xcode中创建一个空白项目,然后将此代码添加到默认视图控制器中.请记住启用后台模式为info.plist键"NSLocationAlwaysUsageDescription"添加说明.
- (void)viewDidLoad
{
[super viewDidLoad];
_locationManager = [[CLLocationManager alloc] init];
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_8_3)
_locationManager.allowsBackgroundLocationUpdates = YES;
_locationManager.delegate = self;
_locationManager.activityType = CLActivityTypeOther;
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
_locationManager.distanceFilter = kCLDistanceFilterNone;
[_locationManager requestAlwaysAuthorization];
// Creating a background task to delay the start of the startUpdatingLocation
__block UIBackgroundTaskIdentifier taskIdentifier = UIBackgroundTaskInvalid;
taskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:taskIdentifier];
}]; …Run Code Online (Sandbox Code Playgroud) iOS中的所有事件和方法都使用NSRunLoop以下方式处理:用户事件,方法调用,旋转,计时器,连接等.
我的问题是:
如何在运行循环的精确时刻执行选择器作为开始和结束?
在阅读Apple文档并检查stackoverflow之后,我无法完全理解是否可以以编程方式调用"Action"或"Share"类型的特定应用程序扩展.
主要是,我已经构建了一个类型为"Action"的应用程序扩展,我想从第二个应用程序以编程方式调用它(所以我可以发送一些输入属性并从扩展中获取输出),而无需打开UIActivityViewController.
有什么办法吗?
我正在为iOS 8和9构建一个iOS应用程序,我面临的问题是,当应用程序进入后台时,系统会在2或3分钟后终止它.
我的测试很简单:
一些评论:
我的问题是:你知道为什么会这样吗?我可能不会考虑或忘记的任何事情?
我不想通过使用CoreLocation或类似的东西强制我的应用程序在后台运行.如果系统最终杀死我的应用程序,我很好.我不想要的是每次我将我的应用程序移动到后台时系统都会终止它.
任何提示或帮助将不胜感激.
谢谢,