2014-10-10 2 views
0

Я разрабатываю аппаратное устройство Bluetooth 4.0 BLE. Он работает очень просто. Он рекламирует единый UUID службы и дополнительную специальную полезную нагрузку, которая содержит 0xFF (конкретные данные производителя). Он не публикует данные профиля GATT, кроме служебного UUID в рекламе.Мое периферийное устройство Bluetooth иногда не распознается моим фоном. Proximo by Kensington works

Основная идея заключается в том, что при приближении пользователя к устройству сообщение должно отображаться на iphone. Я не пытаюсь создать другой протокол iBeacon, но это приложение будет иметь конкретную цель :)

Приложение работает безупречно, когда на переднем плане, а также иногда работает, когда приложение находится в фоновом режиме, особенно через несколько минут после того, как я поместил телефон в спать. Я включил фоновый режим «bluetooth-central» в UIBackgroundModes.

Очень часто приложение никогда не замечает, что аппаратное обеспечение bluetooth близко, а приложение находится в фоновом режиме, и это основная проблема, с которой мне нужна помощь. В течение нескольких месяцев я думал, что это именно то, как работает iOS.

Теперь я купил Kensington Proximo Bluetooth Tracker Fob, и после некоторого тестирования я обнаружил, что это устройство действительно может разбудить iPhone. Я пытаюсь понять, как это сделать.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    NSDictionary *options = @{ CBCentralManagerOptionRestoreIdentifierKey:@"myCentralManagerIdentifier", CBCentralManagerScanOptionAllowDuplicatesKey:[NSNumber numberWithBool:NO]}; 
    self.manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:options]; 
    return YES; 
} 

- (void)centralManager:(CBCentralManager *)central willRestoreState:(NSDictionary *)dict { 
    NSLog(@"Restored, %@", dict); 
} 

- (void)centralManagerDidUpdateState:(CBCentralManager *)central { 
    NSDictionary *options = @{ CBCentralManagerOptionRestoreIdentifierKey:@"myCentralManagerIdentifier", CBCentralManagerScanOptionAllowDuplicatesKey:[NSNumber numberWithBool:NO]}; 

    if (self.manager.state == CBCentralManagerStatePoweredOn) { 
     //Note, the actual UUID has been replaced below: 
     [self.manager scanForPeripheralsWithServices:[NSArray arrayWithObject:[CBUUID UUIDWithString:@"12345678-1234-1234-1234-123456789012"]] options:options]; 
    } 
} 

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI { 
    UILocalNotification* localNotification = [[UILocalNotification alloc] init]; 
    localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1]; 
    localNotification.alertBody = @"It is close!"; 
    localNotification.soundName = UILocalNotificationDefaultSoundName; 
    localNotification.applicationIconBadgeNumber = 1; 
    localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 
    NSLog(@"%@", advertisementData); 
} 

ответ

0

Проверить https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html

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

+0

Спасибо за ответ. Я знаю, что он не обнаружит устройство, если он его видел раньше. Но это не совсем правильно. Если я изменю некоторые данные о конкретных производителях, он узнает его снова. Иногда это работает хорошо, но иногда не так, поэтому мне нужно знать, как это сделать, как это делает Proximo от Kensington. –

+0

Я бы предположил, что программное обеспечение Proximo пытается подключиться к (известному) устройству. Я не пробовал этого, но я буду, потому что сталкиваюсь с подобным вызовом. –

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