Ранжирование и мониторинг маяков, когда iPhone заблокирован и находится в спящем режиме

Итак, я создаю приложение для iOS и ищу маяки в фоновом режиме. Он хорошо работает, когда мой iPhone не спит, и продолжает работать, даже когда iPhone заблокирован ... однако iPhone все еще должен бодрствовать. Как только iPhone переходит в спящий режим, мое приложение колеблется еще около 10 раз, а затем останавливается. Если вы разбудите iPhone, он снова начнет колебаться.

Я тоже пробовал мониторить, но безрезультатно.

Может ли кто-нибудь сказать мне, если это вообще возможно? Я искал везде и не могу найти ответ! Пожалуйста, найдите мои методы маяка (которые находятся в AppDelegate) ниже

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];

    self.locationManager = [[CLLocationManager alloc] init];

    if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [self.locationManager requestAlwaysAuthorization];
    }

    self.locationManager.delegate = self;
    self.locationManager.pausesLocationUpdatesAutomatically = NO;

    [self.locationManager startUpdatingLocation];
    return YES;
}

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
    if(beacons.count > 0) {
        CLBeacon *nearestBeacon = beacons.firstObject;

        if (nearestBeacon.proximity == CLProximityImmediate || nearestBeacon.proximity == CLProximityNear) {
            NSLog("Beacon detected");
        }
    }
}

- (void)startRangingBeacons {
    self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:@"EBEFD083-70A2-47C8-9837-E7B5634DF525" identifier:@"receptionBeacon"];
    [self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}

Любая помощь приветствуется. Спасибо, Соня.


person S.Mac    schedule 03.09.2015    source источник


Ответы (1)


Есть один способ разбудить телефон. Если ваше приложение относится к области маяка, тогда

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region

вышеуказанный метод вызывается автоматически. Поэтому вам нужно поставить локальное уведомление, например «Вы находитесь рядом с зоной маяка», чтобы разбудить телефон. Но вы должны повторно войти в регион.

Как только ваше приложение войдет в регион, напишите следующий код, чтобы перезапустить процесс маяка:

[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
UIBackgroundTaskIdentifier bgTask = [[UIApplication  sharedApplication] 
                                      beginBackgroundTaskWithExpirationHandler:^{
      NSLog(@"End of tolerate time. Application should be suspended now if we do not ask more 'tolerance'");
     [[UIApplication sharedApplication] endBackgroundTask:UIBackgroundTaskInvalid];
}];

if (bgTask == UIBackgroundTaskInvalid)
{
     NSLog(@"This application does not support background mode");
} else {
     //if application supports background mode, we'll see this log.
     NSLog(@"Application will continue to run in background");
}

Надеюсь, это сработает для вас.

person Paddy    schedule 03.09.2015
comment
Мельница спасибо! Это держит его в диапазоне, пока iPhone спит, однако уведомление не пробуждает iPhone. Я должен нажать кнопку «Домой», чтобы разбудить его, а затем я получаю локальное уведомление на экране блокировки. - person S.Mac; 08.09.2015
comment
Пожалуйста. Если вы считаете, что это работает для вас, не забудьте отметить принятый ответ, который больше всего помог в решении проблемы. - person Paddy; 08.09.2015