2014-11-24 2 views
0

Наше оборудование радиомаяка было запрограммировано как iBeacon + writeable BLE. Итак, я могу открыть его с помощью iBeacon, а также подключиться к нему через BLE.Переход от iBeacon к BLE в режиме реального времени?

Я хотел бы просканировать IBeacon, и когда я войти в регион (приложение в фоновом режиме), а делегат вызывается, то он будет, чем переключиться на BLE и подключиться к устройству с BLE:

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { 
    // here connect as usual via bluetooth 
} 

Итак, как я уже сказал, я могу отдельно писать/обнаруживать оборудование, но когда я пытаюсь подключиться к модулю, от делегата через BLE (когда приложение в фоновом режиме, я вхожу в область, делегат включен, чем в фоновом режиме, пытающемся связаться с BLE, его не работает, хотя я могу в фоновом режиме делать другие вещи, когда внутри региона, например, подключается к серверу.)

Есть ли что-нибудь, что я могу сделать, чтобы это произошло? Я также пытался остановить мониторинг зоны маяка, но даже в этом случае он не может подключиться к BLE из фона.

+0

у вас есть ключ режима фон установлен в info.plist –

+0

да, все из них. похоже, проблема в том, что приложение просыпается только на 10 секунд, и у BLE нет достаточного времени для подключения. можете ли вы получить больше времени от системы? – Curnelious

+1

yes.Ill ответьте на это –

ответ

1

Чтобы сделать что-то в bg, вам нужно запросить время у os. вы получите идентификатор.

//identifier 
@property(nonatomic, assign) UIBackgroundTaskIdentifier backgroundTaskIdentifier; 

запрос путем вызова:

if(!self.backgroundTaskIdentifier) { 
    self.backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 
     NSLog(@"expired, fail, throw!!!"); 
     @throw [NSException exceptionWithName:@"BeaconServiceKilled" reason:@"Expired in bg" userInfo:nil]; 
    }]; 
} 

когда сделано затем отпустите его

if(self.backgroundTaskIdentifier) { 
    [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskIdentifier]; 
    self.backgroundTaskIdentifier = 0; 
} 
+0

спасибо, я не понял, как его использовать .. где этот код идет, и где я подключаюсь к BLE? – Curnelious

+0

свойство переходит в интерфейс и запрос при запуске соединения BLE. Закончите, когда закончите со всем ... может быть, когда вы покинете регион? –

+0

Большое вам спасибо, несколько вещей, во-первых, я установил связь BLE перед блоком, который вы написали, или внутри него? во-вторых, это разрешено Apple? это требует некоторых прав пользователя? сколько времени вы можете получить? Кажется странным, что яблоко позволяет это, потому что я могу сохранить его навсегда. – Curnelious

Смежные вопросы