Как запустить приложение в фоновом режиме навсегда? - PullRequest
1 голос
/ 16 сентября 2011

У меня есть одна критическая проблема, позвольте мне поделиться с вами. у меня есть приложение для iphone, которое должно отправлять текущее местоположение на сервер, независимо от того, работает приложение в фоновом режиме или в режиме переднего плана в минуту. я сделал настройку свойства в параметре info.plist, например, в фоновом режиме -> location и другой код для настройки местоположения обычно

- (CLLocationManager *)loc_mngr {

    if (loc_mngr != nil) {
        return loc_mngr;
    }


    loc_mngr = [[CLLocationManager alloc] init];
    loc_mngr.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
    loc_mngr.delegate = self;
    return loc_mngr;

}

loc_mngr является объектом CLLocationManager. Реализация метода делегата завершена. это работает для меня, но проблема в том, как включить службу определения местоположения, когда мое приложение находится в фоновом режиме. помогите пожалуйста как с этим бороться? спасибо в Adv.

Ответы [ 3 ]

2 голосов
/ 01 августа 2012

Посмотрите на этот яблочный документ , у вас есть следующие способы сделать это.

CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(0.0, 0.0); 
CLRegion *region = [[CLRegion alloc] initWithCircularRegionWithCenter:coord radius:500 identifier:@"Some Identifier"];

А затем зарегистрируйте регион с рамкой:

[locationManager startMonitoringForRegion:region]; 

Протоколы делегатов определяют три метода для регионов:

– locationManager:didEnterRegion:
– locationManager:didExitRegion:
– locationManager:monitoringDidFailForRegion:withError:
0 голосов
/ 17 февраля 2012

Термин «навсегда» концептуально неверен: Apple сохраняет за собой право убивать приложения в любой момент.Вам необходимо пересмотреть логику.

Некоторые примечания:

  • неверно держать локализацию (стандартную локализацию) всегда включенной: она очень быстро расходует батарею

  • лучше использовать:

    [locationManager startMonitoringSignificantLocationChanges];

    Таким образом, потребление энергии намного меньше (даже если точность ниже ...)

  • использовать регионы: они подчиняются, даже если ваше приложение было убито / прервано.(мы проверили его в io5, и он работает)
0 голосов
/ 20 сентября 2011

Вам потребуется создать CLLocationManagerDelegate для получения обратных вызовов к вашему приложению.Вам нужно настроить элемент местоположения для запуска, и когда ваше приложение переходит в фоновый режим, вам нужно, чтобы делегат «прослушивал» обновления местоположения.Это может быть через мониторинг региона -didEnterRegion или -didExitRegion.Или так же просто, как -didUpdateToLocation из стандартного мониторинга местоположения.

Подробнее см. Руководство по программированию Apple для определения местоположения .Удачи.

...