后台执行中的位置服务

时间:2013-04-24 07:14:07

标签: iphone ios

我希望24x7次获取设备的位置。但根据苹果文档,应用程序最多只能运行10分钟。之后,应用程序将自动被杀死。 我使用以下代码:

- (void)applicationWillResignActive:(UIApplication *)application
{
UIApplication * app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler: ^ {
    dispatch_async (dispatch_get_main_queue (), ^ {
        if (bgTask != UIBackgroundTaskInvalid)
        {
            [app endBackgroundTask: bgTask];
            bgTask = UIBackgroundTaskInvalid;
        }
    });
}];

// Start the long-running task and return immediately.

dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ {
    lm.locationManager.distanceFilter = kCLDistanceFilterNone;
    lm.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
    [lm.locationManager startMonitoringSignificantLocationChanges];
    [lm.locationManager startUpdatingLocation];

    dispatch_async (dispatch_get_main_queue (), ^ {
        if (bgTask != UIBackgroundTaskInvalid) {
            [app endBackgroundTask: bgTask];
            bgTask = UIBackgroundTaskInvalid;
        }
    });
});
}

我还将支持的后台模式包括为需要位置

但该应用只运行了10分钟。如何让应用程序一直运行。请帮帮我!

1 个答案:

答案 0 :(得分:2)

significantLocationChanges不要求您实施后台任务。只需删除bgtask创建并使用Supported Background Mode键正常运行它。

预定的BackgroundTasks在10分钟后被OS杀死,因此您的位置服务监控。所以你只需要删除你为位置更新创建的BGTask。