Обработка UIBackgroundTask Expiration останавливает мой метод beaconRanging

Я разработал приложение, которое работает в фоновом режиме с использованием ibeacon API. Как он использует местоположение ядра и Bluetooth, так что я включил расположение, настройку Bluetooth из возможностей. Итак, после запуска моего приложения, ранжирование происходит в фоновом режиме, но через 5-10 минут между моим приложением заканчивается, когда я запускаю приложение, оно снова показывает всплеск и страницу входа в систему, поэтому после Google я узнал, что приложение работает в фоновом режиме с некоторыми дополнительное время.

Чтобы преодолеть завершение приложения, я использую приведенный ниже код в методе и вызываю этот метод в applicationDidEnterBackground.

-(void)startBackgroundTask
 {
if(bgTask != UIBackgroundTaskInvalid)
    {
     [[UIApplication sharedApplication] endBackgroundTask:bgTask];
   bgTask = UIBackgroundTaskInvalid;
      }
bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{


   [self endBackgroundUpdateTask];

  NSLog(@"your time is over");
    //you can call start once again to get more time
    }];
  }

 -(void) endBackgroundUpdateTask
{
[[UIApplication sharedApplication] endBackgroundTask: bgTask];
bgTask= UIBackgroundTaskInvalid;
[[NSNotificationCenter defaultCenter]
 postNotificationName:@"TimerOutStartMonitering"   object:nil];

}

После использования приведенного выше кода и отладки, мое приложение останавливается, как только UIBackgroundTaskInvalid. Как я могу выполнить обе задачи 1) Мое приложение не должно завершать работу после окончания фонового времени. 2) Мой выбор радиомаяков не должен останавливаться.

Является ли это возможным? Пожалуйста, помогите мне.

1 ответ

К сожалению, это невозможно. Вы не можете запускать фоновые задачи, как это бесконечно. Этот механизм предназначен только для краткосрочной очистки приложения перед завершением. Смотрите здесь.

Приложения, выполняющие фоновые задачи, имеют ограниченное количество времени для их запуска. (Вы можете узнать, сколько времени доступно, используя свойство backgroundTimeRemaining.)

Из-за этого диапазон iBeacon ограничен несколькими секундами в фоновом режиме. Вы можете использовать мониторинг IBeacon для повторного запуска вашего приложения и повторного определения диапазона при обнаружении маяка, но, опять же, вы получите лишь небольшое время, пока пользователь не выведет приложение на передний план.

Другие вопросы по тегам